unidom-common-rspec 0.6 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +22 -20
- data/ROADMAP.md +7 -0
- data/lib/unidom/common/rspec/belongs_to_shared_examples.rb +44 -18
- data/lib/unidom/common/rspec/has_one_shared_examples.rb +39 -93
- data/lib/unidom/common/rspec/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2da7a6fa1baf6889f7e39b8f4e24fece96ba6596
|
4
|
+
data.tar.gz: e93a8669818a91ed003ebfc1e5d372719e35bd1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7795d2019dd3b40cbba76146cd0b3f398730005ea23a8c0890f1f0931bd354a2eb41bc9415314e0ded693878b6775bfd965a27fe5fa3fa251a9fede13cefd29f
|
7
|
+
data.tar.gz: 013d1670898e0173062130aa12da57719cbc88c48af527f9e959a76feede563b49a025cc82c0490bb2047cd124b92864648ba7093f138a51f9d873394b79457d
|
data/CHANGELOG.md
CHANGED
@@ -19,3 +19,7 @@
|
|
19
19
|
|
20
20
|
## v0.6
|
21
21
|
1. Has One shared examples
|
22
|
+
|
23
|
+
## v0.6.1
|
24
|
+
1. Improve the Belongs To shared examples for the #build_association method, the #create_association method, & the #create_association! method
|
25
|
+
2. Improve the Has One shared examples for the #build_association method, the #create_association method, & the #create_association! method
|
data/README.md
CHANGED
@@ -35,7 +35,7 @@ Or install it yourself as:
|
|
35
35
|
|
36
36
|
## Usage
|
37
37
|
|
38
|
-
Assume we have the Person model & the
|
38
|
+
Assume we have the Person model, the Pet model, & the Identity Card model as the following:
|
39
39
|
```ruby
|
40
40
|
# person.rb
|
41
41
|
class Person < ApplicationRecord
|
@@ -130,79 +130,79 @@ describe Person, type: :model do
|
|
130
130
|
end
|
131
131
|
```
|
132
132
|
|
133
|
-
###
|
133
|
+
### Belongs To shared examples Belongs To 共享用例
|
134
134
|
|
135
|
-
The ``
|
135
|
+
The ``pet_spec.rb`` looks like the following:
|
136
136
|
```ruby
|
137
137
|
require 'rails_helper'
|
138
138
|
|
139
|
-
describe
|
139
|
+
describe Pet, type: :model do
|
140
140
|
|
141
141
|
context do
|
142
142
|
|
143
|
+
cat_attributes = { name: 'Pearl', species: 'Persian' }
|
143
144
|
tim_attributes = { name: 'Tim' }
|
144
|
-
cat_attributes = { name: 'Pearl', species: 'Persian' }
|
145
|
-
dog_attribtues = { name: 'Flower', species: 'Chihuahua' }
|
146
145
|
|
147
|
-
it_behaves_like '
|
146
|
+
it_behaves_like 'belongs_to', cat_attributes, :person, Person, tim_attributes
|
148
147
|
|
149
148
|
end
|
150
149
|
|
151
150
|
end
|
152
151
|
```
|
153
152
|
|
154
|
-
|
155
|
-
|
156
|
-
The ``person_spec.rb`` looks like the following:
|
153
|
+
The ``identity_card_spec.rb`` looks like the following:
|
157
154
|
```ruby
|
158
155
|
require 'rails_helper'
|
159
156
|
|
160
|
-
describe
|
157
|
+
describe IdentityCard, type: :model do
|
161
158
|
|
162
159
|
context do
|
163
160
|
|
164
161
|
tim_attributes = { name: 'Tim' }
|
165
162
|
tim_identity_card_attributes = { name: 'Tim', gender_code: '1', birth_date: '1980-07-01' }
|
166
163
|
|
167
|
-
it_behaves_like '
|
164
|
+
it_behaves_like 'belongs_to', tim_identity_card_attributes, :person, Person, tim_attributes
|
168
165
|
|
169
166
|
end
|
170
167
|
|
171
168
|
end
|
172
169
|
```
|
173
170
|
|
174
|
-
###
|
171
|
+
### Has Many shared examples Has Many 共享用例
|
175
172
|
|
176
|
-
The ``
|
173
|
+
The ``person_spec.rb`` looks like the following:
|
177
174
|
```ruby
|
178
175
|
require 'rails_helper'
|
179
176
|
|
180
|
-
describe
|
177
|
+
describe Person, type: :model do
|
181
178
|
|
182
179
|
context do
|
183
180
|
|
184
|
-
cat_attributes = { name: 'Pearl', species: 'Persian' }
|
185
181
|
tim_attributes = { name: 'Tim' }
|
182
|
+
cat_attributes = { name: 'Pearl', species: 'Persian' }
|
183
|
+
dog_attribtues = { name: 'Flower', species: 'Chihuahua' }
|
186
184
|
|
187
|
-
it_behaves_like '
|
185
|
+
it_behaves_like 'has_many', tim_attributes, :pets, Pet, [ cat_attributes, dog_attribtues ]
|
188
186
|
|
189
187
|
end
|
190
188
|
|
191
189
|
end
|
192
190
|
```
|
193
191
|
|
194
|
-
|
192
|
+
### Has One shared examples Has Many 共享用例
|
193
|
+
|
194
|
+
The ``person_spec.rb`` looks like the following:
|
195
195
|
```ruby
|
196
196
|
require 'rails_helper'
|
197
197
|
|
198
|
-
describe
|
198
|
+
describe Person, type: :model do
|
199
199
|
|
200
200
|
context do
|
201
201
|
|
202
202
|
tim_attributes = { name: 'Tim' }
|
203
203
|
tim_identity_card_attributes = { name: 'Tim', gender_code: '1', birth_date: '1980-07-01' }
|
204
204
|
|
205
|
-
it_behaves_like '
|
205
|
+
it_behaves_like 'has_one', tim_attributes, :identity_card, IdentityCard, tim_identity_card_attributes
|
206
206
|
|
207
207
|
end
|
208
208
|
|
@@ -228,6 +228,8 @@ describe Person, type: :model do
|
|
228
228
|
end
|
229
229
|
```
|
230
230
|
|
231
|
+
|
232
|
+
|
231
233
|
## Development
|
232
234
|
|
233
235
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/ROADMAP.md
CHANGED
@@ -19,3 +19,10 @@
|
|
19
19
|
|
20
20
|
## v0.6
|
21
21
|
1. Has One shared examples
|
22
|
+
|
23
|
+
## v0.6.1
|
24
|
+
1. Improve the Belongs To shared examples for the #build_association method, the #create_association method, & the #create_association! method
|
25
|
+
2. Improve the Has One shared examples for the #build_association method, the #create_association method, & the #create_association! method
|
26
|
+
|
27
|
+
## v0.6.2
|
28
|
+
1. Improve the Has Many shared examples for the #build_association method, the #create_association method, & the #create_association! method
|
@@ -1,3 +1,12 @@
|
|
1
|
+
##
|
2
|
+
# The ``belongs_to :associated_model`` macro uses the ActiveRecord::Associations::BelongsToAssociation.
|
3
|
+
# This association generates the following 5 methods:
|
4
|
+
# #associated_model, #associated_model=, #build_associated_model, #create_associated_model, and #create_associated_model!.
|
5
|
+
#
|
6
|
+
# The ``belongs_to :associated_model, polymorphic: true`` macro uses the ActiveRecord::Associations::BelongsToPolymorphicAssociation.
|
7
|
+
# This association generates the 2 methods: #associated_model and #associated_model=.
|
8
|
+
# It does not generate the 3 methods: #build_associated_model, #create_associated_model, and #create_associated_model!
|
9
|
+
|
1
10
|
shared_examples 'belongs_to' do |model_attributes, association_name, association_class, association_attributes|
|
2
11
|
|
3
12
|
describe "##{association_name}: #{association_class.name}" do
|
@@ -5,32 +14,49 @@ shared_examples 'belongs_to' do |model_attributes, association_name, association
|
|
5
14
|
model_instance = described_class.new model_attributes
|
6
15
|
association_instance = association_class.new association_attributes
|
7
16
|
association = model_instance.association association_name.to_sym
|
8
|
-
association_writable =
|
17
|
+
association_writable = [ ActiveRecord::Associations::BelongsToAssociation ].include? association.class
|
9
18
|
|
10
|
-
|
11
|
-
|
19
|
+
gained_methods = [ association_name.to_sym ]
|
20
|
+
gained_methods << [ :"#{association_name}=", :"build_#{association_name}", :"create_#{association_name}", :"create_#{association_name}!" ] if association_writable
|
21
|
+
gained_methods.flatten!
|
12
22
|
|
13
|
-
|
14
|
-
describe "##{method}" do
|
23
|
+
subject do described_class.new model_attributes end
|
15
24
|
|
16
|
-
|
25
|
+
gained_methods.each do |method|
|
26
|
+
it do is_expected.to respond_to(method.to_sym) end
|
27
|
+
end
|
17
28
|
|
18
|
-
|
29
|
+
describe "#{association_name}=" do
|
30
|
+
before :each do
|
31
|
+
subject.send "#{association_name}=", nil
|
32
|
+
subject.send "#{association_name}=", association_instance
|
33
|
+
end
|
34
|
+
it 'should return the assigned association' do
|
35
|
+
expect(subject.send association_name.to_sym).to eq(association_instance)
|
36
|
+
end
|
37
|
+
end
|
19
38
|
|
20
|
-
|
21
|
-
it 'assigns association successfully' do
|
22
|
-
model_instance.send "#{association_name}=".to_sym, association_instance
|
23
|
-
expect(model_instance.send association_name.to_sym).to eq(association_instance)
|
24
|
-
end
|
39
|
+
if association_writable
|
25
40
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
41
|
+
context "#build_#{association_name}" do
|
42
|
+
let :association_instance_1 do subject.send "build_#{association_name}" end
|
43
|
+
let :association_instance_2 do subject.send "build_#{association_name}" end
|
44
|
+
it "should be a #{association_class.name}" do expect(association_instance_1).to be_a(association_class) end
|
45
|
+
it 'should not be a new record' do expect(association_instance_1).to be_new_record end
|
46
|
+
it "should be a #{association_class.name}" do expect(association_instance_2).to be_a(association_class) end
|
47
|
+
it 'should not be a new record' do expect(association_instance_2).to be_new_record end
|
48
|
+
it 'should not be identical' do expect(association_instance_1).to_not be(association_instance_2) end
|
49
|
+
end
|
32
50
|
|
51
|
+
[ "create_#{association_name}", "create_#{association_name}!" ].each do |method_name|
|
52
|
+
context "##{method_name}" do
|
53
|
+
subject do described_class.create! model_attributes end
|
54
|
+
let :created_association_instance do subject.send method_name, association_attributes end
|
55
|
+
it "should be a #{association_class.name}" do expect(created_association_instance).to be_an_instance_of(association_class) end
|
56
|
+
it 'should not be a new record' do expect(created_association_instance).to_not be_new_record end
|
57
|
+
end
|
33
58
|
end
|
59
|
+
|
34
60
|
end
|
35
61
|
|
36
62
|
end
|
@@ -10,116 +10,62 @@ shared_examples 'has_one' do |model_attributes, association_name, association_cl
|
|
10
10
|
gained_methods << [ :"#{association_name}=", :"build_#{association_name}", :"create_#{association_name}", :"create_#{association_name}!" ] if association_writable
|
11
11
|
gained_methods.flatten!
|
12
12
|
|
13
|
-
|
14
|
-
#let :association_instance do association_class.new association_attributes end
|
15
|
-
#let :reflection do model_instance.association(association_name.to_sym).reflection end
|
16
|
-
#let :association_writable do reflection.class==ActiveRecord::Reflection::HasOneReflection end
|
13
|
+
subject do described_class.new model_attributes end
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
described_class.new model_attributes
|
21
|
-
end
|
15
|
+
gained_methods.each do |method|
|
16
|
+
it do is_expected.to respond_to(method.to_sym) end
|
22
17
|
end
|
23
18
|
|
24
|
-
|
25
|
-
|
26
|
-
nil
|
19
|
+
describe "#{association_name}=" do
|
20
|
+
before :each do
|
21
|
+
subject.send "#{association_name}=", nil
|
22
|
+
subject.send "#{association_name}=", association_instance
|
27
23
|
end
|
28
|
-
|
29
|
-
|
30
|
-
#describe do
|
31
|
-
gained_methods.each do |method|
|
32
|
-
it do is_expected.to respond_to(method.to_sym) end
|
24
|
+
it 'should return the assigned association' do
|
25
|
+
expect(subject.send association_name.to_sym).to eq(association_instance)
|
33
26
|
end
|
34
|
-
#end
|
35
|
-
|
36
|
-
it 'assigns association successfully' do
|
37
|
-
model_instance.send "#{association_name}=", association_instance
|
38
|
-
expect(model_instance.send association_name.to_sym).to eq(association_instance)
|
39
27
|
end
|
40
|
-
=begin
|
41
|
-
if association_writable
|
42
|
-
context do
|
43
|
-
it 'builds an association instance' do
|
44
|
-
item_1 = model_instance.send "build_#{association_name}"
|
45
|
-
expect(item_1).to be_an_instance_of(association_class)
|
46
|
-
expect(item_1).to be_new_record
|
47
|
-
item_2 = model_instance.send "build_#{association_name}"
|
48
|
-
expect(item_2).to be_an_instance_of(association_class)
|
49
|
-
expect(item_2).to be_new_record
|
50
|
-
expect(item_1).to_not be(item_2)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
context do
|
54
|
-
before :each do
|
55
|
-
puts '---- before each...'
|
56
|
-
subject do described_class.new model_attributes end
|
57
|
-
puts "----!!!! subject = #{subject.inspect}"
|
58
|
-
puts "subject.clear_text = #{subject.clear_text}"
|
59
|
-
puts "model_attributes = #{model_attributes.inspect}"
|
60
|
-
end
|
61
|
-
it 'creates an association instance' do
|
62
|
-
subject do described_class.new model_attributes end
|
63
|
-
subject.valid?
|
64
|
-
puts "---- errors = #{subject.errors.inspect}"
|
65
|
-
puts "---- **** subject = #{subject.inspect}"
|
66
28
|
|
67
|
-
|
29
|
+
if association_writable
|
68
30
|
|
69
|
-
|
70
|
-
|
71
|
-
|
31
|
+
context "#build_#{association_name}" do
|
32
|
+
let :association_instance_1 do subject.send "build_#{association_name}" end
|
33
|
+
let :association_instance_2 do subject.send "build_#{association_name}" end
|
34
|
+
it "should be a #{association_class.name}" do expect(association_instance_1).to be_a(association_class) end
|
35
|
+
it 'should not be a new record' do expect(association_instance_1).to be_new_record end
|
36
|
+
it "should be a #{association_class.name}" do expect(association_instance_2).to be_a(association_class) end
|
37
|
+
it 'should not be a new record' do expect(association_instance_2).to be_new_record end
|
38
|
+
it 'should not be identical' do expect(association_instance_1).to_not be(association_instance_2) end
|
72
39
|
end
|
40
|
+
|
41
|
+
[ "create_#{association_name}", "create_#{association_name}!" ].each do |method_name|
|
42
|
+
context "##{method_name}" do
|
43
|
+
subject do described_class.create! model_attributes end
|
44
|
+
let :created_association_instance do subject.send method_name, association_attributes end
|
45
|
+
it "should be a #{association_class.name}" do expect(created_association_instance).to be_an_instance_of(association_class) end
|
46
|
+
it 'should not be a new record' do expect(created_association_instance).to_not be_new_record end
|
47
|
+
end
|
73
48
|
end
|
74
|
-
end
|
75
|
-
=end
|
76
|
-
=begin
|
77
|
-
[ association_name, "#{association_name}=".to_sym, "build_#{association_name}".to_sym, "create_#{association_name}".to_sym ].each do |method|
|
78
|
-
association_writable = #model_instance.reflections[association_name].class==::ActiveRecord::Reflection::AssociationReflection
|
79
|
-
#model_instance._reflections[association_name].class==ActiveRecord::Reflection::AssociationReflection
|
80
|
-
model_instance.association(association_name)._reflections.class==ActiveRecord::Reflection::AssociationReflection
|
81
|
-
describe ".#{method}" do
|
82
49
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
50
|
+
# Pending
|
51
|
+
=begin
|
52
|
+
context "#create_#{association_name}" do
|
53
|
+
subject do described_class.create! model_attributes end
|
54
|
+
it 'should return false with {}' do
|
55
|
+
expect { subject.send "create_#{association_name}", {} }.to be_falsey
|
89
56
|
end
|
57
|
+
end
|
90
58
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
item_1 = model_instance.send method
|
96
|
-
expect(item_1).to be_an_instance_of(association_class)
|
97
|
-
expect(item_1).to be_new_record
|
98
|
-
item_2 = model_instance.send method
|
99
|
-
expect(item_2).to be_an_instance_of(association_class)
|
100
|
-
expect(item_2).to be_new_record
|
101
|
-
expect(item_1).to_not be(item_2)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
when "create_#{association_name}".to_sym
|
105
|
-
if association_writable
|
106
|
-
it 'creates an association instance' do
|
107
|
-
pending 'Can not create association instance.'
|
108
|
-
created_association_instance = model_instance.send method, association_attributes
|
109
|
-
expect(created_association_instance).to be_an_instance_of(association_class)
|
110
|
-
expect(created_association_instance).to_not be_new_record
|
111
|
-
end
|
112
|
-
end
|
113
|
-
when "#{association_name}=".to_sym
|
114
|
-
it 'assigns association successfully' do
|
115
|
-
model_instance.send method, association_instance
|
116
|
-
expect(model_instance.send association_name.to_sym).to eq(association_instance)
|
117
|
-
end
|
59
|
+
context "#create_#{association_name}!" do
|
60
|
+
subject do described_class.create! model_attributes end
|
61
|
+
it 'should raise error with {}' do
|
62
|
+
expect { subject.send "create_#{association_name}!", {} }.to raise_error(ActiveRecord::RecordInvalid)
|
118
63
|
end
|
119
64
|
end
|
120
|
-
end
|
121
65
|
=end
|
122
66
|
|
67
|
+
end
|
68
|
+
|
123
69
|
end
|
124
70
|
|
125
71
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unidom-common-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Topbit Du
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec-rails
|