added rspec model specs for all models with FactoryGirl and proper association testing leveraging shoulda-matchers syntax - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit 86e1f2eb6b2e170a8ce01ca7503a606475d0b75a
 (DIR) parent c25db678ded165b56d64d94bddd23d98e6f97e0e
 (HTM) Author: zeknox <mccann.brandon@gmail.com>
       Date:   Fri, 23 Oct 2015 18:37:45 -0500
       
       added rspec model specs for all models with FactoryGirl and proper association testing leveraging shoulda-matchers syntax
       
       Diffstat:
         M app/models/project.rb               |       3 +--
         A spec/factories/call_media.rb        |      23 +++++++++++++++++++++++
         M spec/factories/calls.rb             |       9 ++++++---
         A spec/factories/jobs.rb              |      34 +++++++++++++++++++++++++++++++
         A spec/factories/lines.rb             |      20 ++++++++++++++++++++
         A spec/factories/projects.rb          |      21 +++++++++++++++++++++
         A spec/factories/providers.rb         |      28 ++++++++++++++++++++++++++++
         A spec/factories/settings.rb          |      19 +++++++++++++++++++
         A spec/factories/signature_fps.rb     |       6 ++++++
         A spec/factories/signatures.rb        |      26 ++++++++++++++++++++++++++
         M spec/factories/users.rb             |      14 +++++++-------
         A spec/models/call_medium_spec.rb     |      26 ++++++++++++++++++++++++++
         M spec/models/call_spec.rb            |      14 +++++++-------
         A spec/models/job_spec.rb             |      32 +++++++++++++++++++++++++++++++
         A spec/models/line_spec.rb            |      23 +++++++++++++++++++++++
         A spec/models/project_spec.rb         |      30 ++++++++++++++++++++++++++++++
         A spec/models/provider_spec.rb        |      36 +++++++++++++++++++++++++++++++
         A spec/models/settings_spec.rb        |      20 ++++++++++++++++++++
         A spec/models/signature_fp_spec.rb    |       5 +++++
         A spec/models/signature_spec.rb       |      26 ++++++++++++++++++++++++++
         M spec/models/user_spec.rb            |      11 +++++------
       
       21 files changed, 401 insertions(+), 25 deletions(-)
       ---
 (DIR) diff --git a/app/models/project.rb b/app/models/project.rb
       @@ -14,9 +14,8 @@
        
        class Project < ActiveRecord::Base
        
       -
       -        validates :name, :uniqueness => true
                validates_presence_of :name
       +        validates_uniqueness_of :name
        
                attr_accessible :name, :description, :included, :excluded
        
 (DIR) diff --git a/spec/factories/call_media.rb b/spec/factories/call_media.rb
       @@ -0,0 +1,23 @@
       +# == Schema Information
       +#
       +# Table name: call_media
       +#
       +#  id           :integer          not null, primary key
       +#  call_id      :integer          not null
       +#  project_id   :integer          not null
       +#  audio        :binary
       +#  mp3          :binary
       +#  png_big      :binary
       +#  png_big_dots :binary
       +#  png_big_freq :binary
       +#  png_sig      :binary
       +#  png_sig_freq :binary
       +#
       +
       +FactoryGirl.define do
       +        factory :call_medium do
       +                call
       +                project
       +        end
       +
       +end
 (DIR) diff --git a/spec/factories/calls.rb b/spec/factories/calls.rb
       @@ -25,8 +25,11 @@
        #
        
        FactoryGirl.define do
       -  factory :call do
       -    number { Faker::PhoneNumber.phone_number }
       -  end
       +        factory :call do
       +                project
       +                job
       +                provider
       +                number { Faker::PhoneNumber.phone_number }
       +        end
        
        end
 (DIR) diff --git a/spec/factories/jobs.rb b/spec/factories/jobs.rb
       @@ -0,0 +1,34 @@
       +# == Schema Information
       +#
       +# Table name: jobs
       +#
       +#  id           :integer          not null, primary key
       +#  created_at   :datetime
       +#  updated_at   :datetime
       +#  project_id   :integer          not null
       +#  locked_by    :string(255)
       +#  locked_at    :datetime
       +#  started_at   :datetime
       +#  completed_at :datetime
       +#  created_by   :string(255)
       +#  task         :string(255)      not null
       +#  args         :binary
       +#  status       :string(255)
       +#  error        :text
       +#  progress     :integer          default(0)
       +#
       +
       +FactoryGirl.define do
       +        factory :job do
       +                project
       +                task 'dialer'
       +                args "\x04\b{\t:\nrangeI\"\x0F7632458942\x06:\x06ET:\nlinesi\x0F:\fsecondsi::\rcid_maskI\"\tSELF\x06;\x06T"
       +                status 'submitted'
       +                error nil
       +                range { Faker::PhoneNumber.phone_number }
       +                cid_mask { Faker::PhoneNumber.phone_number }
       +                seconds { Faker::Number.between(1, 300) }
       +                lines { Faker::Number.between(1, 10000) }
       +        end
       +
       +end
 (DIR) diff --git a/spec/factories/lines.rb b/spec/factories/lines.rb
       @@ -0,0 +1,20 @@
       +# == Schema Information
       +#
       +# Table name: lines
       +#
       +#  id         :integer          not null, primary key
       +#  created_at :datetime
       +#  updated_at :datetime
       +#  number     :text             not null
       +#  project_id :integer          not null
       +#  line_type  :text
       +#  notes      :text
       +#
       +
       +FactoryGirl.define do
       +        factory :line do
       +                project
       +                number { Faker::PhoneNumber.phone_number }
       +        end
       +
       +end
 (DIR) diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb
       @@ -0,0 +1,21 @@
       +# == Schema Information
       +#
       +# Table name: projects
       +#
       +#  id          :integer          not null, primary key
       +#  created_at  :datetime
       +#  updated_at  :datetime
       +#  name        :text             not null
       +#  description :text
       +#  included    :text
       +#  excluded    :text
       +#  created_by  :string(255)
       +#
       +
       +FactoryGirl.define do
       +        factory :project do
       +                name { Faker::Lorem.sentence }
       +                description { Faker::Lorem.sentence }
       +        end
       +
       +end
 (DIR) diff --git a/spec/factories/providers.rb b/spec/factories/providers.rb
       @@ -0,0 +1,28 @@
       +# == Schema Information
       +#
       +# Table name: providers
       +#
       +#  id         :integer          not null, primary key
       +#  created_at :datetime
       +#  updated_at :datetime
       +#  name       :text             not null
       +#  host       :text             not null
       +#  port       :integer          not null
       +#  user       :text
       +#  pass       :text
       +#  lines      :integer          default(1), not null
       +#  enabled    :boolean          default(TRUE)
       +#
       +
       +FactoryGirl.define do
       +        factory :provider do
       +                name { Faker::Company.name }
       +                host { Faker::Internet.ip_v4_address }
       +                port { Faker::Number.between(1, 65535) }
       +                user { Faker::Internet.user_name }
       +                pass { Faker::Internet.password(10, 20) }
       +                lines { Faker::Number.between(1, 254) }
       +                enabled true
       +        end
       +
       +end
 (DIR) diff --git a/spec/factories/settings.rb b/spec/factories/settings.rb
       @@ -0,0 +1,19 @@
       +# == Schema Information
       +#
       +# Table name: settings
       +#
       +#  id         :integer          not null, primary key
       +#  var        :string(255)      not null
       +#  value      :text
       +#  thing_id   :integer
       +#  thing_type :string(30)
       +#  created_at :datetime
       +#  updated_at :datetime
       +#
       +
       +FactoryGirl.define do
       +        factory :setting, :class => 'Settings' do
       +                var "CachedStuff"
       +        end
       +
       +end
 (DIR) diff --git a/spec/factories/signature_fps.rb b/spec/factories/signature_fps.rb
       @@ -0,0 +1,6 @@
       +FactoryGirl.define do
       +        factory :signature_fp do
       +                
       +        end
       +
       +end
 (DIR) diff --git a/spec/factories/signatures.rb b/spec/factories/signatures.rb
       @@ -0,0 +1,26 @@
       +# == Schema Information
       +#
       +# Table name: signatures
       +#
       +#  id          :integer          not null, primary key
       +#  created_at  :datetime
       +#  updated_at  :datetime
       +#  name        :text             not null
       +#  source      :string(255)
       +#  description :text
       +#  category    :string(255)
       +#  line_type   :string(255)
       +#  risk        :integer
       +#
       +
       +FactoryGirl.define do
       +        factory :signature do
       +                name { Faker::Commerce.product_name }
       +                source { Faker::PhoneNumber.cell_phone }
       +                description { Faker::Lorem.sentence }
       +                category { Faker::Lorem.word }
       +                line_type { Faker::Lorem.word }
       +                risk { Faker::Lorem.word }
       +        end
       +
       +end
 (DIR) diff --git a/spec/factories/users.rb b/spec/factories/users.rb
       @@ -24,12 +24,12 @@
        #
        
        FactoryGirl.define do
       -  factory :user do
       -    login { Faker::Internet.user_name }
       -    password 'RandomPass'
       -    password_confirmation 'RandomPass'
       -    enabled true
       -    admin true
       -  end
       +        factory :user do
       +                login { Faker::Internet.user_name }
       +                password 'RandomPass'
       +                password_confirmation 'RandomPass'
       +                enabled true
       +                admin true
       +        end
        
        end
 (DIR) diff --git a/spec/models/call_medium_spec.rb b/spec/models/call_medium_spec.rb
       @@ -0,0 +1,26 @@
       +# == Schema Information
       +#
       +# Table name: call_media
       +#
       +#  id           :integer          not null, primary key
       +#  call_id      :integer          not null
       +#  project_id   :integer          not null
       +#  audio        :binary
       +#  mp3          :binary
       +#  png_big      :binary
       +#  png_big_dots :binary
       +#  png_big_freq :binary
       +#  png_sig      :binary
       +#  png_sig_freq :binary
       +#
       +
       +require 'rails_helper'
       +
       +RSpec.describe CallMedium, type: :model do
       +        it { should belong_to(:call) }
       +        it { should belong_to(:project) }
       +
       +        it "valid record" do
       +                expect(build(:call_medium)).to be_valid
       +        end
       +end
 (DIR) diff --git a/spec/models/call_spec.rb b/spec/models/call_spec.rb
       @@ -27,12 +27,12 @@
        require 'rails_helper'
        
        RSpec.describe Call, type: :model do
       -  it { should belong_to(:project) }
       -  it { should belong_to(:provider) }
       -  it { should belong_to(:job) }
       -  it { should have_one(:call_medium).dependent(:delete) }
       +        it { should belong_to(:project) }
       +        it { should belong_to(:provider) }
       +        it { should belong_to(:job) }
       +        it { should have_one(:call_medium).dependent(:delete) }
        
       -  it "valid record" do
       -    expect(build(:call)).to be_valid
       -  end
       +        it "valid record" do
       +                expect(build(:call)).to be_valid
       +        end
        end
 (DIR) diff --git a/spec/models/job_spec.rb b/spec/models/job_spec.rb
       @@ -0,0 +1,32 @@
       +# == Schema Information
       +#
       +# Table name: jobs
       +#
       +#  id           :integer          not null, primary key
       +#  created_at   :datetime
       +#  updated_at   :datetime
       +#  project_id   :integer          not null
       +#  locked_by    :string(255)
       +#  locked_at    :datetime
       +#  started_at   :datetime
       +#  completed_at :datetime
       +#  created_by   :string(255)
       +#  task         :string(255)      not null
       +#  args         :binary
       +#  status       :string(255)
       +#  error        :text
       +#  progress     :integer          default(0)
       +#
       +
       +require 'rails_helper'
       +
       +RSpec.describe Job, type: :model do
       +        it { should belong_to(:project) }
       +        it { should have_many(:calls) }
       +
       +        it { should validate_presence_of(:project_id) }
       +
       +        it "valid record" do
       +                expect(build(:job)).to be_valid
       +        end
       +end
 (DIR) diff --git a/spec/models/line_spec.rb b/spec/models/line_spec.rb
       @@ -0,0 +1,23 @@
       +# == Schema Information
       +#
       +# Table name: lines
       +#
       +#  id         :integer          not null, primary key
       +#  created_at :datetime
       +#  updated_at :datetime
       +#  number     :text             not null
       +#  project_id :integer          not null
       +#  line_type  :text
       +#  notes      :text
       +#
       +
       +require 'rails_helper'
       +
       +RSpec.describe Line, type: :model do
       +        it { should belong_to(:project) }
       +        it { should have_many(:line_attributes).dependent(:delete_all) }
       +
       +        it "valid record" do
       +                expect(build(:line)).to be_valid
       +        end
       +end
 (DIR) diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
       @@ -0,0 +1,30 @@
       +# == Schema Information
       +#
       +# Table name: projects
       +#
       +#  id          :integer          not null, primary key
       +#  created_at  :datetime
       +#  updated_at  :datetime
       +#  name        :text             not null
       +#  description :text
       +#  included    :text
       +#  excluded    :text
       +#  created_by  :string(255)
       +#
       +
       +require 'rails_helper'
       +
       +RSpec.describe Project, type: :model do
       +        it { should have_many(:lines).dependent(:delete_all) }
       +        it { should have_many(:line_attributes).dependent(:delete_all) }
       +        it { should have_many(:calls).dependent(:delete_all) }
       +        it { should have_many(:call_media).dependent(:delete_all) }
       +        it { should have_many(:jobs).dependent(:delete_all) }
       +
       +        it { should validate_presence_of(:name) }
       +        it { should validate_uniqueness_of(:name) }
       +
       +        it "valid record" do
       +                expect(build(:project)).to be_valid
       +        end
       +end
 (DIR) diff --git a/spec/models/provider_spec.rb b/spec/models/provider_spec.rb
       @@ -0,0 +1,36 @@
       +# == Schema Information
       +#
       +# Table name: providers
       +#
       +#  id         :integer          not null, primary key
       +#  created_at :datetime
       +#  updated_at :datetime
       +#  name       :text             not null
       +#  host       :text             not null
       +#  port       :integer          not null
       +#  user       :text
       +#  pass       :text
       +#  lines      :integer          default(1), not null
       +#  enabled    :boolean          default(TRUE)
       +#
       +
       +require 'rails_helper'
       +
       +RSpec.describe Provider, type: :model do
       +        ## TODO determine if association is unecessary
       +        # the DialResult model does not exist
       +        #it { should have_many(:dial_results) }
       +
       +        it { should validate_presence_of(:name) }
       +        it { should validate_presence_of(:host) }
       +        it { should validate_presence_of(:port) }
       +        it { should validate_presence_of(:user) }
       +        it { should validate_presence_of(:pass) }
       +        it { should validate_presence_of(:lines) }
       +        it { should validate_numericality_of(:port).is_less_than(65536).is_greater_than(0) }
       +        it { should validate_numericality_of(:lines).is_less_than(255).is_greater_than(0) }
       +
       +        it "valid record" do
       +                expect(build(:provider)).to be_valid
       +        end
       +end
 (DIR) diff --git a/spec/models/settings_spec.rb b/spec/models/settings_spec.rb
       @@ -0,0 +1,20 @@
       +# == Schema Information
       +#
       +# Table name: settings
       +#
       +#  id         :integer          not null, primary key
       +#  var        :string(255)      not null
       +#  value      :text
       +#  thing_id   :integer
       +#  thing_type :string(30)
       +#  created_at :datetime
       +#  updated_at :datetime
       +#
       +
       +require 'rails_helper'
       +
       +RSpec.describe Settings, type: :model do
       +        it "valid record" do
       +                expect(build(:setting)).to be_valid
       +        end
       +end
 (DIR) diff --git a/spec/models/signature_fp_spec.rb b/spec/models/signature_fp_spec.rb
       @@ -0,0 +1,5 @@
       +require 'rails_helper'
       +
       +RSpec.describe SignatureFp, type: :model do
       +
       +end
 (DIR) diff --git a/spec/models/signature_spec.rb b/spec/models/signature_spec.rb
       @@ -0,0 +1,26 @@
       +# == Schema Information
       +#
       +# Table name: signatures
       +#
       +#  id          :integer          not null, primary key
       +#  created_at  :datetime
       +#  updated_at  :datetime
       +#  name        :text             not null
       +#  source      :string(255)
       +#  description :text
       +#  category    :string(255)
       +#  line_type   :string(255)
       +#  risk        :integer
       +#
       +
       +require 'rails_helper'
       +
       +RSpec.describe Signature, type: :model do
       +        ## TODO association may not be needed
       +        # causes crash:  PG::UndefinedTable: ERROR:  relation "signature_fps" does not exist
       +        #it { should have_many(:signature_fps) }
       +
       +        it "valid record" do
       +                expect(build(:signature)).to be_valid
       +        end
       +end
 (DIR) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
       @@ -26,11 +26,10 @@
        require 'rails_helper'
        
        RSpec.describe User, type: :model do
       -  it { should validate_length_of(:password).is_at_least(8) }
       -  it { should validate_length_of(:password_confirmation).is_at_least(8) }
       +        it { should validate_length_of(:password).is_at_least(8) }
       +        it { should validate_length_of(:password_confirmation).is_at_least(8) }
        
       -  it 'valid record' do
       -    user = build(:user)
       -    expect(user).to be_valid
       -  end
       +        it 'valid record' do
       +                expect(build(:user)).to be_valid
       +        end
        end