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