unidom-common-rspec 0.5 → 0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f07873cd5ac82d966f96d653a6c9de1a89d7793
4
- data.tar.gz: 27ad32bd93d045653bd0885bd2d5af69c9dcc74a
3
+ metadata.gz: 9bc9d62357cf28e32abbdbcdac81fe842e6ba045
4
+ data.tar.gz: 65338e314cbb0633f8a586856472bcc27f7bbf07
5
5
  SHA512:
6
- metadata.gz: 5c3f631a5688b8785d74b0c5a0b7f13da43d9e8129ff8534f8a43b2fc2580f4050eec36fb7caec1d2c21603540f58f6f85226de44db31f508c9b81bb981498ca
7
- data.tar.gz: 065ff70944668b6de3d7237c20c1eb68a1d525527a300eac879b8ee5b5f3e6af39b77d3fe2abc40ecbb979a1b1c9dfecb2a5381eb4ce84d26a1829a17a8876b6
6
+ metadata.gz: 439f897d6c939e3943ffc90e68808b8d2f0f571b50caa000590019e7ab4d8d727f629cec941e43567f424c0faf4561d5874c588313d6c9a96578f6434224c738
7
+ data.tar.gz: 0c54ac2b809fe7d97bab55a7e67fc004afa8b1687548c46dc46741da00923d4572fecde4de55437f0e7e9d4b6228005d9eaf13ba5d3ee96f6b5cf14171738141
data/CHANGELOG.md CHANGED
@@ -14,5 +14,8 @@
14
14
 
15
15
  ## v0.5
16
16
  1. Belongs To shared examples
17
- 2. Improve the Model Extension shared examples for the validates behaviours of the #grade attribute & the #priority attribute
17
+ 2. Improve the Model Extension shared examples for the validates behaviors of the #grade attribute & the #priority attribute
18
18
  3. Improve the Model Extension shared examples for the scope behaviours of the #priority attribute
19
+
20
+ ## v0.6
21
+ 1. Has One shared examples
data/README.md CHANGED
@@ -35,9 +35,40 @@ Or install it yourself as:
35
35
 
36
36
  ## Usage
37
37
 
38
+ Assume we have the Person model & the Pet model as the following:
39
+ ```ruby
40
+ # person.rb
41
+ class Person < ApplicationRecord
42
+
43
+ include Unidom::Common::Concerns::ModelExtension
44
+
45
+ has_many :pets
46
+ has_one :identity_card
47
+
48
+ end
49
+
50
+ # pet.rb
51
+ class Pet < ApplicationRecord
52
+
53
+ include Unidom::Common::Concerns::ModelExtension
54
+
55
+ belongs_to :person
56
+
57
+ end
58
+
59
+ # identity_card.rb
60
+ class IdentityCard < ApplicationRecord
61
+
62
+ include Unidom::Common::Concerns::ModelExtension
63
+
64
+ belongs_to :person
65
+
66
+ end
67
+ ```
68
+
38
69
  ### Scope shared examples Scope 共享用例
39
70
 
40
- Assume the model class is ``Person``, the ``person_spec.rb`` looks like the following:
71
+ The ``person_spec.rb`` looks like the following:
41
72
  If the ``count_diff`` is set to 'E', an error was expected to be raised.
42
73
  ```ruby
43
74
  require 'rails_helper'
@@ -74,7 +105,7 @@ end
74
105
 
75
106
  ### Validates shared examples Validates 共享用例
76
107
 
77
- Assume the model class is ``Person``, the ``person_spec.rb`` looks like the following:
108
+ The ``person_spec.rb`` looks like the following:
78
109
  ```ruby
79
110
  require 'rails_helper'
80
111
 
@@ -99,9 +130,9 @@ describe Person, type: :model do
99
130
  end
100
131
  ```
101
132
 
102
- ### Model Extension shared examples Model Extension 共享用例
133
+ ### Has Many shared examples Has Many 共享用例
103
134
 
104
- Assume the model class is ``Person``, and the model alread extend the ``Unidom::Common::Concerns::ModelExtension``, the ``person_spec.rb`` looks like the following:
135
+ The ``person_spec.rb`` looks like the following:
105
136
  ```ruby
106
137
  require 'rails_helper'
107
138
 
@@ -110,17 +141,19 @@ describe Person, type: :model do
110
141
  context do
111
142
 
112
143
  tim_attributes = { name: 'Tim' }
144
+ cat_attributes = { name: 'Pearl', species: 'Persian' }
145
+ dog_attribtues = { name: 'Flower', species: 'Chihuahua' }
113
146
 
114
- it_behaves_like 'Unidom::Common::Concerns::ModelExtension', tim_attributes
147
+ it_behaves_like 'has_many', tim_attributes, :pets, Pet, [ cat_attributes, dog_attribtues ]
115
148
 
116
149
  end
117
150
 
118
151
  end
119
152
  ```
120
153
 
121
- ### Has Many shared examples Has Many 共享用例
154
+ ### Has One shared examples Has Many 共享用例
122
155
 
123
- Assume the model class is ``Person``, and the model already defined the ``has_many :pets``, the ``person_spec.rb`` looks like the following:
156
+ The ``person_spec.rb`` looks like the following:
124
157
  ```ruby
125
158
  require 'rails_helper'
126
159
 
@@ -129,10 +162,9 @@ describe Person, type: :model do
129
162
  context do
130
163
 
131
164
  tim_attributes = { name: 'Tim' }
132
- cat_attributes = { name: 'Pearl', species: 'Persian' }
133
- dog_attribtues = { name: 'Flower', species: 'Chihuahua' }
165
+ tim_identity_card_attributes = { name: 'Tim', gender_code: '1', birth_date: '1980-07-01' }
134
166
 
135
- it_behaves_like 'has_many', tim_attributes, :pets, 'Pet', [ cat_attributes, dog_attribtues ]
167
+ it_behaves_like 'has_one', tim_attributes, :identity_card, IdentityCard, tim_identity_card_attributes
136
168
 
137
169
  end
138
170
 
@@ -141,7 +173,7 @@ end
141
173
 
142
174
  ### Belongs To shared examples Belongs To 共享用例
143
175
 
144
- Assume the model class is ``Pet``, and the model already defined the ``belongs_to :person``, the ``pet_spec.rb`` looks like the following:
176
+ The ``pet_spec.rb`` looks like the following:
145
177
  ```ruby
146
178
  require 'rails_helper'
147
179
 
@@ -159,6 +191,43 @@ describe Pet, type: :model do
159
191
  end
160
192
  ```
161
193
 
194
+ The ``identity_card_spec.rb`` looks like the following:
195
+ ```ruby
196
+ require 'rails_helper'
197
+
198
+ describe IdentityCard, type: :model do
199
+
200
+ context do
201
+
202
+ tim_attributes = { name: 'Tim' }
203
+ tim_identity_card_attributes = { name: 'Tim', gender_code: '1', birth_date: '1980-07-01' }
204
+
205
+ it_behaves_like 'belongs_to', tim_identity_card_attributes, :person, Person, tim_attributes
206
+
207
+ end
208
+
209
+ end
210
+ ```
211
+
212
+ ### Model Extension shared examples Model Extension 共享用例
213
+
214
+ The ``person_spec.rb`` looks like the following:
215
+ ```ruby
216
+ require 'rails_helper'
217
+
218
+ describe Person, type: :model do
219
+
220
+ context do
221
+
222
+ tim_attributes = { name: 'Tim' }
223
+
224
+ it_behaves_like 'Unidom::Common::Concerns::ModelExtension', tim_attributes
225
+
226
+ end
227
+
228
+ end
229
+ ```
230
+
162
231
  ## Development
163
232
 
164
233
  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
@@ -14,5 +14,8 @@
14
14
 
15
15
  ## v0.5
16
16
  1. Belongs To shared examples
17
- 2. Improve the Model Extension shared examples for the validates behaviours of the #grade attribute & the #priority attribute
17
+ 2. Improve the Model Extension shared examples for the validates behaviors of the #grade attribute & the #priority attribute
18
18
  3. Improve the Model Extension shared examples for the scope behaviours of the #priority attribute
19
+
20
+ ## v0.6
21
+ 1. Has One shared examples
@@ -2,10 +2,12 @@ require "unidom/common/rspec/version"
2
2
 
3
3
  require 'unidom/common/rspec/scope_shared_examples'
4
4
  require 'unidom/common/rspec/validates_shared_examples'
5
- require 'unidom/common/rspec/model_extension_shared_examples'
6
5
 
7
- require 'unidom/common/rspec/has_many_shared_examples'
8
6
  require 'unidom/common/rspec/belongs_to_shared_examples'
7
+ require 'unidom/common/rspec/has_many_shared_examples'
8
+ require 'unidom/common/rspec/has_one_shared_examples'
9
+
10
+ require 'unidom/common/rspec/model_extension_shared_examples'
9
11
 
10
12
  module Unidom
11
13
  module Common
@@ -0,0 +1,125 @@
1
+ shared_examples 'has_one' do |model_attributes, association_name, association_class, association_attributes|
2
+
3
+ describe "##{association_name}" do
4
+
5
+ model_instance = described_class.new model_attributes
6
+ association_instance = association_class.new association_attributes
7
+ reflection = model_instance.association(association_name.to_sym).reflection
8
+ association_writable = reflection.class==ActiveRecord::Reflection::HasOneReflection
9
+ gained_methods = [ association_name.to_sym ]
10
+ gained_methods << [ :"#{association_name}=", :"build_#{association_name}", :"create_#{association_name}", :"create_#{association_name}!" ] if association_writable
11
+ gained_methods.flatten!
12
+
13
+ #subject :model_instance do described_class.new model_attributes end
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
17
+
18
+ before :each do
19
+ subject do
20
+ described_class.new model_attributes
21
+ end
22
+ end
23
+
24
+ after :each do
25
+ subject do
26
+ nil
27
+ end
28
+ end
29
+
30
+ #describe do
31
+ gained_methods.each do |method|
32
+ it do is_expected.to respond_to(method.to_sym) end
33
+ 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
+ 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
+
67
+ expect(subject.save).to be_truthy
68
+
69
+ created_association_instance = subject.send "create_#{association_name}", association_attributes
70
+ expect(created_association_instance).to be_an_instance_of(association_class)
71
+ expect(created_association_instance).to_not be_new_record
72
+ end
73
+ 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
+
83
+ if association_writable
84
+ it 'is responded to' do expect(model_instance).to respond_to(method.to_sym) end
85
+ else
86
+ unless [ "build_#{association_name}".to_sym, "create_#{association_name}".to_sym ].include? method
87
+ it 'is responded to' do expect(model_instance).to respond_to(method.to_sym) end
88
+ end
89
+ end
90
+
91
+ case method
92
+ when "build_#{association_name}".to_sym
93
+ if association_writable
94
+ it 'builds an association instance' do
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
118
+ end
119
+ end
120
+ end
121
+ =end
122
+
123
+ end
124
+
125
+ end
@@ -1,7 +1,7 @@
1
1
  module Unidom
2
2
  module Common
3
3
  module RSpec
4
- VERSION = '0.5'
4
+ VERSION = '0.6'
5
5
  end
6
6
  end
7
7
  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: '0.5'
4
+ version: '0.6'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Topbit Du
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-31 00:00:00.000000000 Z
11
+ date: 2017-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-rails
@@ -89,6 +89,7 @@ files:
89
89
  - lib/unidom/common/rspec.rb
90
90
  - lib/unidom/common/rspec/belongs_to_shared_examples.rb
91
91
  - lib/unidom/common/rspec/has_many_shared_examples.rb
92
+ - lib/unidom/common/rspec/has_one_shared_examples.rb
92
93
  - lib/unidom/common/rspec/model_extension_shared_examples.rb
93
94
  - lib/unidom/common/rspec/scope_shared_examples.rb
94
95
  - lib/unidom/common/rspec/validates_shared_examples.rb