remockable 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +2 -3
  5. data/CHANGELOG.md +6 -0
  6. data/README.markdown +18 -4
  7. data/lib/remockable/active_model/allow_values_for.rb +14 -13
  8. data/lib/remockable/active_model/helpers.rb +7 -6
  9. data/lib/remockable/active_model/validate_acceptance_of.rb +9 -11
  10. data/lib/remockable/active_model/validate_confirmation_of.rb +9 -11
  11. data/lib/remockable/active_model/validate_exclusion_of.rb +9 -11
  12. data/lib/remockable/active_model/validate_format_of.rb +9 -11
  13. data/lib/remockable/active_model/validate_inclusion_of.rb +9 -11
  14. data/lib/remockable/active_model/validate_length_of.rb +32 -19
  15. data/lib/remockable/active_model/validate_numericality_of.rb +23 -12
  16. data/lib/remockable/active_model/validate_presence_of.rb +9 -11
  17. data/lib/remockable/active_record/accept_nested_attributes_for.rb +10 -13
  18. data/lib/remockable/active_record/belong_to.rb +21 -13
  19. data/lib/remockable/active_record/have_and_belong_to_many.rb +16 -13
  20. data/lib/remockable/active_record/have_column.rb +14 -11
  21. data/lib/remockable/active_record/have_default_scope.rb +38 -20
  22. data/lib/remockable/active_record/have_index.rb +12 -13
  23. data/lib/remockable/active_record/have_many.rb +22 -13
  24. data/lib/remockable/active_record/have_one.rb +21 -13
  25. data/lib/remockable/active_record/have_scope.rb +40 -25
  26. data/lib/remockable/active_record/helpers.rb +3 -0
  27. data/lib/remockable/active_record/validate_associated.rb +9 -11
  28. data/lib/remockable/active_record/validate_uniqueness_of.rb +19 -11
  29. data/lib/remockable/helpers.rb +58 -6
  30. data/lib/remockable/version.rb +1 -1
  31. data/remockable.gemspec +3 -3
  32. data/spec/active_model/allow_values_for_spec.rb +19 -13
  33. data/spec/active_model/validate_acceptance_of_spec.rb +0 -2
  34. data/spec/active_model/validate_confirmation_of_spec.rb +0 -2
  35. data/spec/active_model/validate_exclusion_of_spec.rb +7 -9
  36. data/spec/active_model/validate_format_of_spec.rb +9 -11
  37. data/spec/active_model/validate_inclusion_of_spec.rb +7 -9
  38. data/spec/active_model/validate_length_of_spec.rb +16 -18
  39. data/spec/active_model/validate_numericality_of_spec.rb +14 -16
  40. data/spec/active_model/validate_presence_of_spec.rb +0 -2
  41. data/spec/active_record/accept_nested_attributes_for_spec.rb +22 -18
  42. data/spec/active_record/belong_to_spec.rb +26 -26
  43. data/spec/active_record/have_and_belong_to_many_spec.rb +22 -20
  44. data/spec/active_record/have_column_spec.rb +32 -35
  45. data/spec/active_record/have_default_scope_spec.rb +54 -55
  46. data/spec/active_record/have_index_spec.rb +24 -27
  47. data/spec/active_record/have_many_spec.rb +10 -11
  48. data/spec/active_record/have_one_spec.rb +26 -25
  49. data/spec/active_record/have_scope_spec.rb +75 -75
  50. data/spec/active_record/validate_associated_spec.rb +11 -11
  51. data/spec/active_record/validate_uniqueness_of_spec.rb +11 -13
  52. data/spec/spec_helper.rb +2 -4
  53. data/spec/support/active_record_example_group.rb +3 -4
  54. data/spec/support/class_builder.rb +15 -11
  55. data/spec/support/shared/a_validation_matcher.rb +25 -25
  56. data/spec/support/shared/an_active_record_matcher.rb +14 -12
  57. metadata +60 -84
@@ -1,168 +1,167 @@
1
- require 'spec_helper'
2
-
3
1
  describe :have_default_scope do
4
2
  let(:options) { :one }
5
3
 
6
4
  it_behaves_like 'an Active Record matcher' do
7
5
  let(:model) { build_class(:User, ActiveRecord::Base) }
8
6
 
7
+ subject(:instance) { model.new }
8
+
9
9
  before do
10
- create_table(:users) { |table| table.string(:one) }
10
+ create_table :users do |table|
11
+ table.string :one
12
+ end
11
13
  end
12
14
 
13
- subject { model.new }
14
-
15
15
  context 'description' do
16
16
  let(:matcher) { send(matcher_name, *options) }
17
17
 
18
18
  it 'has a custom description' do
19
- name = matcher.instance_variable_get(:@name).to_s.gsub(/_/, ' ')
20
- with = " with #{matcher.expected}" if matcher.expected.any?
19
+ with = " with #{matcher.options}" if matcher.options.any?
21
20
 
22
- matcher.description.should == "have a default scope#{with}"
21
+ expect(matcher.description).to eq "have a default scope#{with}"
23
22
  end
24
23
  end
25
24
 
26
25
  context 'without arguments' do
27
26
  it 'matches if a default scope exists' do
28
- model.instance_eval { default_scope(-> { order(:id) }) }
29
- model.should have_default_scope
27
+ model.instance_eval { default_scope -> { order :id } }
28
+ expect(model).to have_default_scope
30
29
  end
31
30
 
32
31
  it 'does not match if a default scope does not exist' do
33
- model.should_not have_default_scope
32
+ expect(model).to_not have_default_scope
34
33
  end
35
34
  end
36
35
 
37
36
  context 'with a from value' do
38
37
  it 'matches if the scope exists and the query matches' do
39
- model.instance_eval { default_scope(-> { from('users') }) }
40
- model.should have_default_scope.from('users')
38
+ model.instance_eval { default_scope-> { from 'users' } }
39
+ expect(model).to have_default_scope.from 'users'
41
40
  end
42
41
 
43
42
  it 'does not match if the query does not match' do
44
- model.instance_eval { default_scope(-> { from('users') }) }
45
- model.should_not have_default_scope.from('friends')
43
+ model.instance_eval { default_scope -> { from 'users' } }
44
+ expect(model).to_not have_default_scope.from 'friends'
46
45
  end
47
46
  end
48
47
 
49
48
  context 'with a group value' do
50
49
  it 'matches if the scope exists and the query matches' do
51
- model.instance_eval { default_scope(-> { group('one') }) }
52
- model.should have_default_scope.group('one')
50
+ model.instance_eval { default_scope -> { group 'one' } }
51
+ expect(model).to have_default_scope.group 'one'
53
52
  end
54
53
 
55
54
  it 'does not match if the query does not match' do
56
- model.instance_eval { default_scope(-> { group('one') }) }
57
- model.should_not have_default_scope.group('two')
55
+ model.instance_eval { default_scope -> { group 'one' } }
56
+ expect(model).to_not have_default_scope.group 'two'
58
57
  end
59
58
  end
60
59
 
61
60
  context 'with a having value' do
62
61
  it 'matches if the scope exists and the query matches' do
63
- model.instance_eval { default_scope(-> { having('COUNT(*) > 1') }) }
64
- model.should have_default_scope.having('COUNT(*) > 1')
62
+ model.instance_eval { default_scope -> { having 'COUNT(*) > 1' } }
63
+ expect(model).to have_default_scope.having('COUNT(*) > 1')
65
64
  end
66
65
 
67
66
  it 'does not match if the query does not match' do
68
- model.instance_eval { default_scope(-> { having('COUNT(*) > 1') }) }
69
- model.should_not have_default_scope.having('COUNT(*) > 2')
67
+ model.instance_eval { default_scope -> { having 'COUNT(*) > 1' } }
68
+ expect(model).to_not have_default_scope.having 'COUNT(*) > 2'
70
69
  end
71
70
  end
72
71
 
73
72
  context 'with a having value' do
74
73
  it 'matches if the scope exists and the query matches' do
75
- model.instance_eval { default_scope(-> { having('COUNT(*) > 1') }) }
76
- model.should have_default_scope.having('COUNT(*) > 1')
74
+ model.instance_eval { default_scope -> { having 'COUNT(*) > 1' } }
75
+ expect(model).to have_default_scope.having 'COUNT(*) > 1'
77
76
  end
78
77
 
79
78
  it 'does not match if the query does not match' do
80
- model.instance_eval { default_scope(-> { having('COUNT(*) > 1') }) }
81
- model.should_not have_default_scope.having('COUNT(*) > 2')
79
+ model.instance_eval { default_scope -> { having 'COUNT(*) > 1' } }
80
+ expect(model).to_not have_default_scope.having 'COUNT(*) > 2'
82
81
  end
83
82
  end
84
83
 
85
84
  context 'with a joins value' do
86
85
  it 'matches if the scope exists and the query matches' do
87
- model.instance_eval { default_scope(-> { joins('INNER JOIN friends') }) }
88
- model.should have_default_scope.joins('INNER JOIN friends')
86
+ model.instance_eval { default_scope -> { joins 'INNER JOIN friends' } }
87
+ expect(model).to have_default_scope.joins 'INNER JOIN friends'
89
88
  end
90
89
 
91
90
  it 'does not match if the query does not match' do
92
- model.instance_eval { default_scope(-> { joins('INNER JOIN friends') }) }
93
- model.should_not have_default_scope.joins('INNER JOIN enemies')
91
+ model.instance_eval { default_scope -> { joins 'INNER JOIN friends' } }
92
+ expect(model).to_not have_default_scope.joins 'INNER JOIN enemies'
94
93
  end
95
94
  end
96
95
 
97
96
  context 'with a limit value' do
98
97
  it 'matches if the scope exists and the query matches' do
99
- model.instance_eval { default_scope(-> { limit(10) }) }
100
- model.should have_default_scope.limit(10)
98
+ model.instance_eval { default_scope -> { limit 10 } }
99
+ expect(model).to have_default_scope.limit 10
101
100
  end
102
101
 
103
102
  it 'does not match if the query does not match' do
104
- model.instance_eval { default_scope(-> { limit(10) }) }
105
- model.should_not have_default_scope.limit(15)
103
+ model.instance_eval { default_scope -> { limit 10 } }
104
+ expect(model).to_not have_default_scope.limit 15
106
105
  end
107
106
  end
108
107
 
109
108
  context 'with an offset value' do
110
109
  it 'matches if the scope exists and the query matches' do
111
- model.instance_eval { default_scope(-> { offset(10) }) }
112
- model.should have_default_scope.offset(10)
110
+ model.instance_eval { default_scope -> { offset 10 } }
111
+ expect(model).to have_default_scope.offset 10
113
112
  end
114
113
 
115
114
  it 'does not match if the query does not match' do
116
- model.instance_eval { default_scope(-> { offset(10) }) }
117
- model.should_not have_default_scope.offset(15)
115
+ model.instance_eval { default_scope -> { offset 10 } }
116
+ expect(model).to_not have_default_scope.offset 15
118
117
  end
119
118
  end
120
119
 
121
120
  context 'with an order value' do
122
121
  it 'matches if the scope exists and the query matches' do
123
- model.instance_eval { default_scope(-> { order('one') }) }
124
- model.should have_default_scope.order('one')
122
+ model.instance_eval { default_scope -> { order 'one' } }
123
+ expect(model).to have_default_scope.order 'one'
125
124
  end
126
125
 
127
126
  it 'does not match if the query does not match' do
128
- model.instance_eval { default_scope(-> { order('one') }) }
129
- model.should_not have_default_scope.order('id')
127
+ model.instance_eval { default_scope -> { order 'one' } }
128
+ expect(model).to_not have_default_scope.order 'id'
130
129
  end
131
130
  end
132
131
 
133
132
  context 'with a reorder value' do
134
133
  it 'matches if the scope exists and the query matches' do
135
- model.instance_eval { default_scope(-> { reorder('one') }) }
136
- model.should have_default_scope.reorder('one')
134
+ model.instance_eval { default_scope -> { reorder 'one' } }
135
+ expect(model).to have_default_scope.reorder 'one'
137
136
  end
138
137
 
139
138
  it 'does not match if the query does not match' do
140
- model.instance_eval { default_scope(-> { reorder('one') }) }
141
- model.should_not have_default_scope.reorder('id')
139
+ model.instance_eval { default_scope -> { reorder 'one' } }
140
+ expect(model).to_not have_default_scope.reorder 'id'
142
141
  end
143
142
  end
144
143
 
145
144
  context 'with a select value' do
146
145
  it 'matches if the scope exists and the query matches' do
147
- model.instance_eval { default_scope(-> { select('one') }) }
148
- model.should have_default_scope.select('one')
146
+ model.instance_eval { default_scope -> { select 'one' } }
147
+ expect(model).to have_default_scope.select 'one'
149
148
  end
150
149
 
151
150
  it 'does not match if the query does not match' do
152
- model.instance_eval { default_scope(-> { select('one') }) }
153
- model.should_not have_default_scope.select('id')
151
+ model.instance_eval { default_scope -> { select 'one' } }
152
+ expect(model).to_not have_default_scope.select 'id'
154
153
  end
155
154
  end
156
155
 
157
156
  context 'with a where value' do
158
157
  it 'matches if the scope exists and the query matches' do
159
- model.instance_eval { default_scope(-> { where(:one => nil) }) }
160
- model.should have_default_scope.where(:one => nil)
158
+ model.instance_eval { default_scope -> { where one: nil } }
159
+ expect(model).to have_default_scope.where one: nil
161
160
  end
162
161
 
163
162
  it 'does not match if the query does not match' do
164
- model.instance_eval { default_scope(-> { where(:one => nil) }) }
165
- model.should_not have_default_scope.where(:one => 1)
163
+ model.instance_eval { default_scope -> { where one: nil } }
164
+ expect(model).to_not have_default_scope.where one: 1
166
165
  end
167
166
  end
168
167
  end
@@ -1,88 +1,85 @@
1
- require 'spec_helper'
2
-
3
1
  describe :have_index do
4
2
  let(:options) { :one }
5
3
 
6
4
  it_behaves_like 'an Active Record matcher' do
7
5
  let(:model) { build_class(:User, ActiveRecord::Base) }
8
6
 
7
+ subject(:instance) { model.new }
8
+
9
9
  before do
10
- create_table(:users) do |table|
11
- table.string(:one)
12
- table.string(:two)
10
+ create_table :users do |table|
11
+ table.string :one
12
+ table.string :two
13
13
  end
14
14
  end
15
15
 
16
- subject { model.new }
17
-
18
16
  context 'description' do
19
17
  let(:matcher) { send(matcher_name, *options) }
20
18
 
21
19
  it 'has a custom description' do
22
- name = matcher.instance_variable_get(:@name).to_s.gsub(/_/, ' ')
23
- with = " with #{matcher.expected}" if matcher.expected.any?
20
+ with = " with #{matcher.options}" if matcher.options.any?
24
21
 
25
- matcher.description.should == "#{name} on #{options}#{with}"
22
+ expect(matcher.description).to eq "have index on #{options}#{with}"
26
23
  end
27
24
  end
28
25
 
29
26
  context 'with a single column' do
30
27
  it 'matches if the index exists' do
31
- ActiveRecord::Base.connection.add_index(:users, :one)
32
- model.should have_index(:one)
28
+ ActiveRecord::Base.connection.add_index :users, :one
29
+ expect(model).to have_index :one
33
30
  end
34
31
 
35
32
  it 'does not match if the index does not exist' do
36
- model.should_not have_index(:one)
33
+ expect(model).to_not have_index :one
37
34
  end
38
35
  end
39
36
 
40
37
  context 'with multiple columns' do
41
38
  it 'matches if the index exists' do
42
- ActiveRecord::Base.connection.add_index(:users, [:one, :two])
43
- model.should have_index([:one, :two])
39
+ ActiveRecord::Base.connection.add_index :users, [:one, :two]
40
+ expect(model).to have_index [:one, :two]
44
41
  end
45
42
 
46
43
  it 'does not match if the index does not exist' do
47
- model.should_not have_index([:one, :two])
44
+ expect(model).to_not have_index [:one, :two]
48
45
  end
49
46
  end
50
47
 
51
48
  context 'with option :unique' do
52
49
  it 'matches if the index exists' do
53
- ActiveRecord::Base.connection.add_index(:users, :one, :unique => true)
54
- model.should have_index(:one, :unique => true)
50
+ ActiveRecord::Base.connection.add_index :users, :one, unique: true
51
+ expect(model).to have_index :one, unique: true
55
52
  end
56
53
 
57
54
  it 'does not match if the index is not unique' do
58
- ActiveRecord::Base.connection.add_index(:users, :one)
59
- model.should_not have_index(:one, :unique => true)
55
+ ActiveRecord::Base.connection.add_index :users, :one
56
+ expect(model).to_not have_index :one, unique: true
60
57
  end
61
58
 
62
59
  it 'does not match if the index does not exist' do
63
- model.should_not have_index(:one, :unique => true)
60
+ expect(model).to_not have_index :one, unique: true
64
61
  end
65
62
  end
66
63
 
67
64
  context 'with option :name' do
68
65
  it 'matches if the index exists' do
69
- ActiveRecord::Base.connection.add_index(:users, :one, :name => :oneness)
70
- model.should have_index(:one, :name => :oneness)
66
+ ActiveRecord::Base.connection.add_index :users, :one, name: :oneness
67
+ expect(model).to have_index :one, name: :oneness
71
68
  end
72
69
 
73
70
  it 'does not match if the index does not exist' do
74
- model.should_not have_index(:one, :name => :oneness)
71
+ expect(model).to_not have_index :one, name: :oneness
75
72
  end
76
73
  end
77
74
 
78
75
  context 'with option :name and without :one' do
79
76
  it 'matches if the index exists' do
80
- ActiveRecord::Base.connection.add_index(:users, :one, :name => :oneness)
81
- model.should have_index(:name => :oneness)
77
+ ActiveRecord::Base.connection.add_index :users, :one, name: :oneness
78
+ expect(model).to have_index name: :oneness
82
79
  end
83
80
 
84
81
  it 'does not match if the index does not exist' do
85
- model.should_not have_index(:name => :oneness)
82
+ expect(model).to_not have_index name: :oneness
86
83
  end
87
84
  end
88
85
  end
@@ -1,25 +1,24 @@
1
- require 'spec_helper'
2
-
3
1
  describe :have_many do
4
2
  let(:macro) { :has_many }
5
- let(:options) { [:posts, { :dependent => :destroy }] }
3
+ let(:options) { [:posts, { dependent: :destroy }] }
6
4
 
7
5
  it_behaves_like 'an Active Record matcher' do
8
6
  let(:model) { build_class(:User, ActiveRecord::Base) }
9
7
 
8
+ subject(:instance) { model.new }
9
+
10
10
  before do
11
11
  create_table(:users) { |table| table.string(:name) }
12
12
  end
13
13
 
14
- subject { model.new }
15
-
16
14
  context 'description' do
17
15
  let(:matcher) { send(matcher_name, *options) }
18
16
 
19
17
  it 'has a custom description' do
20
- association = matcher.instance_variable_get(:@association)
21
- with = " with #{matcher.expected.inspect}" if matcher.expected.any?
22
- matcher.description.should == "have many #{association}#{with}"
18
+ association = matcher.attribute
19
+ with = " with #{matcher.options.inspect}" if matcher.options.any?
20
+
21
+ expect(matcher.description).to eq "have many #{association}#{with}"
23
22
  end
24
23
  end
25
24
 
@@ -28,16 +27,16 @@ describe :have_many do
28
27
 
29
28
  it 'matches if the association exists' do
30
29
  model.has_many(*options)
31
- model.should have_many(*options)
30
+ expect(model).to have_many(*options)
32
31
  end
33
32
 
34
33
  it 'does not match if the association does not exist' do
35
- model.should_not have_many(*options)
34
+ expect(model).to_not have_many(*options)
36
35
  end
37
36
 
38
37
  it 'does not match if the association is of the wrong type' do
39
38
  model.belongs_to(*options)
40
- model.should_not have_many(*options)
39
+ expect(model).to_not have_many(*options)
41
40
  end
42
41
  end
43
42
 
@@ -1,25 +1,26 @@
1
- require 'spec_helper'
2
-
3
1
  describe :have_one do
4
2
  let(:macro) { :has_one }
5
- let(:options) { [:address, { :dependent => :destroy }] }
3
+ let(:options) { [:address, { dependent: :destroy }] }
6
4
 
7
5
  it_behaves_like 'an Active Record matcher' do
8
6
  let(:model) { build_class(:User, ActiveRecord::Base) }
9
7
 
8
+ subject(:instance) { model.new }
9
+
10
10
  before do
11
- create_table(:users) { |table| table.string(:name) }
11
+ create_table :users do |table|
12
+ table.string :name
13
+ end
12
14
  end
13
15
 
14
- subject { model.new }
15
-
16
16
  context 'description' do
17
17
  let(:matcher) { send(matcher_name, *options) }
18
18
 
19
19
  it 'has a custom description' do
20
- association = matcher.instance_variable_get(:@association)
21
- with = " with #{matcher.expected.inspect}" if matcher.expected.any?
22
- matcher.description.should == "have a #{association}#{with}"
20
+ association = matcher.attribute
21
+ with = " with #{matcher.options.inspect}" if matcher.options.any?
22
+
23
+ expect(matcher.description).to eq "have a #{association}#{with}"
23
24
  end
24
25
  end
25
26
 
@@ -27,30 +28,30 @@ describe :have_one do
27
28
  let(:options) { :address }
28
29
 
29
30
  it 'matches if the association exists' do
30
- model.has_one(*options)
31
- model.should have_one(*options)
31
+ model.has_one *options
32
+ expect(model).to have_one *options
32
33
  end
33
34
 
34
35
  it 'does not match if the association does not exist' do
35
- model.should_not have_one(*options)
36
+ expect(model).to_not have_one *options
36
37
  end
37
38
 
38
39
  it 'does not match if the association is of the wrong type' do
39
- model.has_many(*options)
40
- model.should_not have_one(*options)
40
+ model.has_many *options
41
+ expect(model).to_not have_one *options
41
42
  end
42
43
  end
43
44
 
44
- with_option(:class_name, 'Address', 'Location')
45
- with_option(:dependent, :destroy, :nullify)
46
- with_option(:foreign_key, :address_id, :location_id)
47
- with_option(:primary_key, :id, :address_id)
48
- with_option(:as, :addressable, :locatable)
49
- with_option(:through, :offices, :locations)
50
- with_option(:source, :addressable, :contactable, through: :offices)
51
- with_option(:source_type, 'Company', 'Organization', through: :offices)
52
- with_option(:validate, true, false)
53
- with_option(:autosave, true, false)
54
- with_option(:inverse_of, :user, :employee)
45
+ with_option :class_name, 'Address', 'Location'
46
+ with_option :dependent, :destroy, :nullify
47
+ with_option :foreign_key, :address_id, :location_id
48
+ with_option :primary_key, :id, :address_id
49
+ with_option :as, :addressable, :locatable
50
+ with_option :through, :offices, :locations
51
+ with_option :source, :addressable, :contactable, through: :offices
52
+ with_option :source_type, 'Company', 'Organization', through: :offices
53
+ with_option :validate, true, false
54
+ with_option :autosave, true, false
55
+ with_option :inverse_of, :user, :employee
55
56
  end
56
57
  end