address_concern 2.0.0 → 2.1.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.
@@ -1,32 +1,185 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Address do
4
+ def klass
5
+ described_class
6
+ end
7
+
8
+ describe AddressWithNameOnly do
9
+ it 'using attribute alias' do
10
+ expect(klass.state_name_attribute).to eq :state
11
+ expect(klass.country_name_attribute).to eq :country
12
+
13
+ address = klass.new(country_code: 'AE')
14
+ expect(address.country_code).to eq 'AE'
15
+ expect(address.country ).to eq 'United Arab Emirates'
16
+
17
+ address = klass.new(country_name: 'Iceland')
18
+ expect(address.country_name).to eq 'Iceland'
19
+ expect(address.country ).to eq 'Iceland'
20
+
21
+ address = klass.new(country: 'United States', state_code: 'ID')
22
+ expect(address.state_code).to eq 'ID'
23
+ expect(address.state ).to eq 'Idaho'
24
+
25
+ address = klass.new(country: 'United States', state_name: 'Idaho')
26
+ expect(address.state_name).to eq 'Idaho'
27
+ expect(address.state ).to eq 'Idaho'
28
+ end
29
+ end
30
+
31
+ describe AddressWithCodeOnly do
32
+ it 'using attribute alias' do
33
+ expect(klass.state_code_attribute).to eq :state
34
+ expect(klass.country_code_attribute).to eq :country
35
+
36
+ address = klass.new(country_code: 'AE')
37
+ expect(address.country_code).to eq 'AE'
38
+ expect(address.country ).to eq 'AE'
39
+
40
+ address = klass.new(country_name: 'Iceland')
41
+ expect(address.country_name).to eq 'Iceland'
42
+ expect(address.country ).to eq 'IS'
43
+
44
+ address = klass.new(country: 'US', state_code: 'ID')
45
+ expect(address.state_code).to eq 'ID'
46
+ expect(address.state ).to eq 'ID'
47
+
48
+ address = klass.new(country: 'US', state_name: 'Idaho')
49
+ address.state_name = 'Idaho'
50
+ expect(address.state_name).to eq 'Idaho'
51
+ expect(address.state ).to eq 'ID'
52
+ end
53
+ end
54
+
55
+ #═════════════════════════════════════════════════════════════════════════════════════════════════
56
+ describe 'setting to invalid values' do
57
+ let(:address) { klass.new }
58
+
59
+ # Even if it's an unrecognized country/state code/name, we need to write the value to the
60
+ # attribute (in memory only), so that it can be validated and shown in the form if it
61
+ # re-rendered. To prevent invalid values from being persisted, you should add validations.
62
+ it do
63
+ address = Address.new
64
+ address.country = 'Fireland'
65
+ expect(address.country_name).to eq('Fireland')
66
+ expect(address.country_code).to eq(nil)
67
+
68
+ address = Address.new
69
+ address.country_code = 'FL'
70
+ expect(address.country_name).to eq(nil)
71
+ expect(address.country_code).to eq('FL')
72
+
73
+ address = Address.new(country: 'United States')
74
+ address.state = 'New Zork'
75
+ expect(address.state_name).to eq('New Zork')
76
+ expect(address.state_code).to eq(nil)
77
+
78
+ address = Address.new(country: 'United States')
79
+ address.state_code = 'NZ'
80
+ expect(address.state_name).to eq(nil)
81
+ expect(address.state_code).to eq('NZ')
82
+ end
83
+
84
+ describe AddressWithCodeOnly do
85
+ it do
86
+ address = klass.new
87
+ address.country = 'Fireland'
88
+ expect(address.country_name).to eq(nil)
89
+ expect(address.country_code).to eq('Fireland')
90
+
91
+ address = klass.new
92
+ address.country_name = 'Fireland'
93
+ expect(address.country_name).to eq(nil) # No attribute to store it in
94
+ expect(address.country_code).to eq(nil)
95
+
96
+ address = klass.new
97
+ address.country_code = 'FL'
98
+ expect(address.country_name).to eq(nil)
99
+ expect(address.country_code).to eq('FL')
100
+
101
+ address = klass.new(country: 'United States')
102
+ address.state = 'New Zork'
103
+ expect(address.state_name).to eq(nil)
104
+ expect(address.state_code).to eq('New Zork')
105
+
106
+ address = klass.new(country: 'United States')
107
+ address.state_name = 'New Zork'
108
+ expect(address.state_name).to eq(nil) # No attribute to store it in
109
+ expect(address.state_code).to eq(nil)
110
+
111
+ address = klass.new(country: 'United States')
112
+ address.state_code = 'NZ'
113
+ expect(address.state_name).to eq(nil)
114
+ expect(address.state_code).to eq('NZ')
115
+ end
116
+ end
117
+
118
+ describe AddressWithNameOnly do
119
+ it do
120
+ address = klass.new
121
+ address.country = 'Fireland'
122
+ expect(address.country_name).to eq('Fireland')
123
+ expect(address.country_code).to eq(nil)
124
+
125
+ address = klass.new
126
+ address.country_name = 'Fireland'
127
+ expect(address.country_name).to eq('Fireland')
128
+ expect(address.country_code).to eq(nil)
129
+
130
+ address = klass.new
131
+ address.country_code = 'FL'
132
+ expect(address.country_name).to eq(nil)
133
+ expect(address.country_code).to eq(nil) # No attribute to store it in
134
+
135
+ address = klass.new(country: 'United States')
136
+ address.state = 'New Zork'
137
+ expect(address.state_name).to eq('New Zork')
138
+ expect(address.state_code).to eq(nil)
139
+
140
+ address = klass.new(country: 'United States')
141
+ address.state_name = 'New Zork'
142
+ expect(address.state_name).to eq('New Zork')
143
+ expect(address.state_code).to eq(nil)
144
+
145
+ address = klass.new(country: 'United States')
146
+ address.state_code = 'NZ'
147
+ expect(address.state_name).to eq(nil)
148
+ expect(address.state_code).to eq(nil) # No attribute to store it in
149
+ end
150
+ end
151
+ end
152
+
153
+ #═════════════════════════════════════════════════════════════════════════════════════════════════
154
+
4
155
  describe 'setting country by name' do
5
156
  let(:address) { Address.new }
6
157
  specify 'setting to known country' do
7
158
  address.country = 'Iceland'
8
- address.country_name.should == 'Iceland'
9
- address.country_code.should == 'IS'
159
+ expect(address.country_name).to eq('Iceland')
160
+ expect(address.country_code).to eq('IS')
10
161
  end
11
162
 
12
- specify 'setting to unknown country' do
13
- # Set it to a known country first to show that it actually *clears* these fields if they were previously set
14
- address.country = 'Iceland'
163
+ context "setting to name instead of code" do
164
+ subject { Address.new(country_name: 'US') }
165
+ # Unlike state_name=, country_name does not use find_carmen_country. Usually with country
166
+ # you'll know very well ahead of time whether you're dealing with names or codes. Less likely
167
+ # with states.
168
+ it { expect(subject.country_name).to eq('US') }
169
+ end
15
170
 
16
- #expect { expect {
171
+ specify 'setting to unknown country' do
17
172
  address.country = 'Fireland'
18
- #}.to change(address, :country_name).to(nil)
19
- #}.to change(address, :country_code).to(nil)
20
- address.country_name.should eq nil
21
- address.country_code.should eq nil
173
+ expect(address.country_name).to eq 'Fireland'
174
+ expect(address.country_code).to eq nil
22
175
 
23
176
  address.country = 'Northern Ireland'
24
- address.country_name.should eq nil
25
- address.country_code.should eq nil
177
+ expect(address.country_name).to eq 'Northern Ireland'
178
+ expect(address.country_code).to eq nil
26
179
 
27
- address.country = 'USA'
28
- address.country_name.should eq nil
29
- address.country_code.should eq nil
180
+ address.country = 'Estados Unidos'
181
+ expect(address.country_name).to eq 'Estados Unidos'
182
+ expect(address.country_code).to eq nil
30
183
  end
31
184
  end
32
185
 
@@ -34,24 +187,14 @@ describe Address do
34
187
  let(:address) { Address.new }
35
188
  specify 'setting to known country' do
36
189
  address.country_code = 'IS'
37
- address.country_name.should == 'Iceland'
38
- address.country_code.should == 'IS'
190
+ expect(address.country_name).to eq('Iceland')
191
+ expect(address.country_code).to eq('IS')
39
192
  end
40
193
 
41
194
  specify 'setting to unknown country' do
42
- # Set it to a known country first to show that it actually *clears* these fields if they were previously set
43
- address.country_code = 'IS'
44
-
45
- #expect { expect {
46
195
  address.country = 'FL'
47
- #}.to change(address, :country_name).to(nil)
48
- #}.to change(address, :country_code).to(nil)
49
- address.country_name.should eq nil
50
- address.country_code.should eq nil
51
- end
52
-
53
- specify 'setting to a country that is part of another country (weird)' do
54
- # Not currently possible using country_code=
196
+ expect(address.country_name).to eq 'FL'
197
+ expect(address.country_code).to eq nil
55
198
  end
56
199
  end
57
200
 
@@ -59,31 +202,108 @@ describe Address do
59
202
  let(:address) { Address.new }
60
203
  ['The Democratic Republic of the Congo', 'Democratic Republic of the Congo'].each do |_| specify _ do
61
204
  address.country = _
62
- address.country_name.should == 'Congo, The Democratic Republic of the'
63
- address.country_name_from_code.should == 'Congo, The Democratic Republic of the'
205
+ expect(address.country_name).to eq('Congo, The Democratic Republic of the')
206
+ expect(address.country_name_from_code).to eq('Congo, The Democratic Republic of the')
64
207
  end; end
208
+ it do
209
+ address.country = 'USA'
210
+ expect(address.country_name).to eq('United States')
211
+ end
65
212
  end
66
213
 
67
- describe 'started_filling_out?' do
214
+ #═════════════════════════════════════════════════════════════════════════════════════════════════
215
+
216
+ describe 'setting state by name' do
217
+ context "simple" do
218
+ subject { Address.new(state: 'FL', country_name: 'United States') }
219
+ it { expect(subject.state_code).to eq('FL') }
220
+ end
221
+
222
+ context "setting to name instead of code" do
223
+ subject { Address.new(state: 'Florida', country_name: 'United States') }
224
+ # Uses find_carmen_state, which finds by name, falling back to finding by code.
225
+ it { expect(subject.state_code).to eq('FL') }
226
+ end
227
+ end
228
+
229
+ #═════════════════════════════════════════════════════════════════════════════════════════════════
230
+
231
+ describe 'present?' do
232
+ let(:address) { Address.new }
68
233
  [:address, :city, :state, :postal_code].each do |attr_name|
69
234
  it "should be true when #{attr_name} (and only #{attr_name}) is present" do
70
- Address.new(attr_name => 'something').should be_started_filling_out
235
+ address.write_attribute attr_name, 'something'
236
+ expect(address).to be_present
71
237
  end
72
238
  end
73
239
  it "should be true when country (and only country) is present" do
74
- Address.new(:country => 'Latvia').should be_started_filling_out
240
+ expect(Address.new(country: 'Latvia')).to be_present
75
241
  end
76
242
  end
77
243
 
78
- describe 'normalization' do
79
- describe 'address' do
80
- it { should normalize_attribute(:address).from(" Line 1 \n Line 2 \n ").to("Line 1\nLine 2")}
81
- [:name, :city, :state, :postal_code, :country].each do |attr_name|
82
- it { should normalize_attribute(attr_name) }
244
+ #describe 'normalization' do
245
+ # describe 'address' do
246
+ # it { is_expected.to normalize_attribute(:address).from(" Line 1 \n Line 2 \n ").to("Line 1\nLine 2")}
247
+ # [:city, :state, :postal_code, :country].each do |attr_name|
248
+ # it { is_expected.to normalize_attribute(attr_name) }
249
+ # end
250
+ # end
251
+ #end
252
+
253
+ #═════════════════════════════════════════════════════════════════════════════════════════════════
254
+ describe 'address, address_lines' do
255
+ describe Address do
256
+ it do
257
+ expect(klass.multi_line_address?).to eq true
258
+
259
+ address = klass.new(address: str = 'Line 1')
260
+ expect(address.address).to eq str
261
+
262
+ address = klass.new(address: str = "Line 1\nLine 2\nLine 3")
263
+ expect(address.address).to eq str
264
+ expect(address.address_lines).to eq [
265
+ 'Line 1',
266
+ 'Line 2',
267
+ 'Line 3',
268
+ ]
269
+ end
270
+ end
271
+
272
+ describe AddressWithSeparateAddressColumns do
273
+ it do
274
+ expect(klass.multi_line_address?).to eq false
275
+
276
+ address = klass.new(
277
+ address_1: 'Line 1',
278
+ address_2: 'Line 2',
279
+ address_3: 'Line 3',
280
+ )
281
+ expect(address.address_1).to eq 'Line 1'
282
+ expect(address.address_2).to eq 'Line 2'
283
+ expect(address.address_3).to eq 'Line 3'
284
+ expect(address.address_lines).to eq [
285
+ 'Line 1',
286
+ 'Line 2',
287
+ 'Line 3',
288
+ ]
83
289
  end
84
290
  end
85
291
  end
86
292
 
293
+ #═════════════════════════════════════════════════════════════════════════════════════════════════
294
+ describe '#inspect' do
295
+ it do
296
+ address = Address.new(
297
+ address: '10 Some Road',
298
+ city: 'Watford', state: 'HRT', postal_code: 'WD25 9JZ',
299
+ country: 'United Kingdom'
300
+ )
301
+ expect(address.inspect).to eq \
302
+ "<Address new: address: 10 Some Road, city: Watford, state: Hertfordshire, state_code: HRT, postal_code: WD25 9JZ, country: United Kingdom, country_code: GB>"
303
+ end
304
+ end
305
+
306
+ #═════════════════════════════════════════════════════════════════════════════════════════════════
87
307
  describe 'parts and lines' do
88
308
  it do
89
309
  address = Address.new(
@@ -91,20 +311,20 @@ describe Address do
91
311
  city: 'Watford', state: 'HRT', postal_code: 'WD25 9JZ',
92
312
  country: 'United Kingdom'
93
313
  )
94
- address.parts.should == [
314
+ expect(address.parts).to eq([
95
315
  '10 Some Road',
96
316
  'Watford',
97
317
  'Hertfordshire',
98
318
  'WD25 9JZ',
99
319
  'United Kingdom'
100
- ]
101
- address.lines.should == [
320
+ ])
321
+ expect(address.lines).to eq([
102
322
  '10 Some Road',
103
323
  'Watford WD25 9JZ',
104
324
  'United Kingdom'
105
- ]
106
- address.city_line.should == 'Watford WD25 9JZ'
107
- address.city_state_name.should == 'Watford, Hertfordshire'
325
+ ])
326
+ expect(address.city_line).to eq('Watford WD25 9JZ')
327
+ expect(address.city_state_name).to eq('Watford, Hertfordshire')
108
328
  end
109
329
  end
110
330
 
@@ -112,131 +332,139 @@ describe Address do
112
332
  context "when address doesn't have a state" do
113
333
  let(:user) { User.create }
114
334
  subject { user.build_physical_address(address: '123', city: 'Stockholm', country_name: 'Sweden') }
115
- it { subject.city_state_code.should == 'Stockholm' }
116
- it { subject.city_state_name.should == 'Stockholm' }
117
- it { subject.city_state_country.should == 'Stockholm, Sweden' }
335
+ it { expect(subject.city_state_code).to eq('Stockholm') }
336
+ it { expect(subject.city_state_name).to eq('Stockholm') }
337
+ it { expect(subject.city_state_country).to eq('Stockholm, Sweden') }
118
338
  end
119
339
  context "when address has a state abbrevitation in :state field" do
120
340
  let(:user) { User.create }
121
341
  subject { user.build_physical_address(address: '123', city: 'Nelspruit', state: 'MP', country_name: 'South Africa') }
122
- it { subject.city_state_code.should == 'Nelspruit, MP' }
123
- it { subject.city_state_name.should == 'Nelspruit, Mpumalanga' }
124
- it { subject.city_state_country.should == 'Nelspruit, Mpumalanga, South Africa' }
342
+ it { expect(subject.state_code).to eq('MP') }
343
+ it { expect(subject.city_state_code).to eq('Nelspruit, MP') }
344
+ it { expect(subject.city_state_name).to eq('Nelspruit, Mpumalanga') }
345
+ it { expect(subject.city_state_country).to eq('Nelspruit, Mpumalanga, South Africa') }
125
346
  end
126
347
  context "when address has a state abbrevitation in :state field (Denmark)" do
127
348
  let(:user) { User.create }
128
349
  subject { user.build_physical_address(address: '123', city: 'Copenhagen', state: '84', country_name: 'Denmark') }
129
- it { subject.city_state_name.should == 'Copenhagen, Hovedstaden' }
130
- it { subject.state_name.should == 'Hovedstaden' }
350
+ it { expect(subject.city_state_name).to eq('Copenhagen, Hovedstaden') }
351
+ it { expect(subject.state_name).to eq('Hovedstaden') }
131
352
  end
132
353
 
133
354
  # United States
134
355
  context "when address has a state name entered for :state instead of an abbreviation" do
135
356
  let(:user) { User.create }
136
357
  subject { user.build_physical_address(address: '123', city: 'Ocala', state: 'Florida', country_name: 'United States') }
137
- it { subject.city_state_code.should == 'Ocala, Florida' }
138
- it { subject.city_state_name.should == 'Ocala, Florida' }
139
- it { subject.city_state_country.should == 'Ocala, Florida, United States' }
358
+ it { expect(subject.city_state_code).to eq('Ocala, FL') }
359
+ it { expect(subject.city_state_name).to eq('Ocala, Florida') }
360
+ it { expect(subject.city_state_country).to eq('Ocala, Florida, United States') }
140
361
  end
141
362
  context "when address has a state abbrevitation in :state field" do
142
363
  let(:user) { User.create }
143
364
  subject { user.build_physical_address(address: '123', city: 'Ocala', state: 'FL', country_name: 'United States') }
144
- it { subject.city_state_code.should == 'Ocala, FL' }
145
- it { subject.city_state_name.should == 'Ocala, Florida' }
146
- it { subject.city_state_country.should == 'Ocala, Florida, United States' }
365
+ it { expect(subject.city_state_code).to eq('Ocala, FL') }
366
+ it { expect(subject.city_state_name).to eq('Ocala, Florida') }
367
+ it { expect(subject.city_state_country).to eq('Ocala, Florida, United States') }
147
368
  end
148
- context "when address has a state name entered for :state instead of an abbreviation, but state is for different country" do
369
+ context "when address has a state name instead of code entered for state_name, and state is for different country" do
149
370
  let(:user) { User.create }
150
- subject { user.build_physical_address(address: '123', city: 'Ocala', state: 'FL', country_name: 'Denmark') }
151
- it { subject.city_state_code.should == 'Ocala, FL' }
152
- it { subject.city_state_name.should == 'Ocala, FL' }
153
- it { subject.city_state_country.should == 'Ocala, FL, Denmark' }
371
+ subject { user.build_physical_address(address: '123', city: 'Ocala', state_code: 'FL', country_name: 'Denmark') }
372
+ it do
373
+ expect(subject.state_code). to eq('FL')
374
+ expect(subject.state_name). to eq(nil)
375
+ expect(subject.city_state_code). to eq('Ocala, FL')
376
+ expect(subject.city_state_name). to eq('Ocala')
377
+ expect(subject.city_state_country). to eq('Ocala, Denmark')
378
+ end
154
379
  end
155
380
  end
156
381
 
157
382
  describe 'same_as?' do
158
383
  it 'should be true when country is only present attribute and it matches' do
159
- Address.new(country: 'United States').should be_same_as(
384
+ expect(Address.new(country: 'United States')).to be_same_as(
160
385
  Address.new(country: 'United States'))
161
386
  end
162
387
  it 'should be true when country and state are only present attributes and they match' do
163
- Address.new(state: 'Washington', country: 'United States').should be_same_as(
388
+ expect(Address.new(state: 'Washington', country: 'United States')).to be_same_as(
164
389
  Address.new(state: 'Washington', country: 'United States'))
165
390
  end
166
391
  it "not should be true when address attribute doesn't match" do
167
- Address.new(address: '123 C St.', state: 'Washington', country: 'United States').should_not be_same_as(
392
+ expect(Address.new(address: '123 C St.', state: 'Washington', country: 'United States')).not_to be_same_as(
168
393
  Address.new(address: '444 Z St.', state: 'Washington', country: 'United States'))
169
394
  end
170
395
  end
171
396
 
397
+ #═════════════════════════════════════════════════════════════════════════════════════════════════
172
398
  describe '#carmen_country' do
173
- it { Address.new(country: 'South Africa').carmen_country.should be_a Carmen::Country }
399
+ it { expect(Address.new(country: 'South Africa').carmen_country).to be_a Carmen::Country }
174
400
  end
175
401
  describe '#carmen_state' do
176
- it { Address.new(country: 'United States', state: 'OH!').carmen_state.should be_nil }
177
- it { Address.new(country: 'United States', state: 'OH').carmen_state.should be_a Carmen::Region }
178
- it { Address.new(country: 'United States', state: 'AA').carmen_state.should be_a Carmen::Region }
179
- it { Address.new(country: 'South Africa', state: 'MP').carmen_state.should be_a Carmen::Region }
402
+ it { expect(Address.new(country: 'United States', state: 'OH!').carmen_state).to be_nil }
403
+ it { expect(Address.new(country: 'United States', state: 'OH').carmen_state).to be_a Carmen::Region }
404
+ it { expect(Address.new(country: 'United States', state: 'AA').carmen_state).to be_a Carmen::Region }
405
+ it { expect(Address.new(country: 'South Africa', state: 'MP').carmen_state).to be_a Carmen::Region }
180
406
  end
181
407
 
182
408
  describe '#states_for_country, etc.' do
183
- it { Address.new(country: 'United States').states_for_country.map(&:code).should include 'AA' }
184
- it { Address.new(country: 'United States').states_for_country.map(&:name).should include 'Ohio' }
185
- it { Address.new(country: 'United States').states_for_country.map(&:name).should include 'District of Columbia' }
186
- it { Address.new(country: 'United States').states_for_country.map(&:name).should include 'Puerto Rico' }
187
- it { Address.new(country: 'South Africa').states_for_country.map(&:name).should include 'Mpumalanga' }
188
- it { Address.new(country: 'Kenya').states_for_country.typed('province').should be_empty }
409
+ it { expect(Address.new(country: 'United States').states_for_country.map(&:code)).to include 'AA' }
410
+ it { expect(Address.new(country: 'United States').states_for_country.map(&:name)).to include 'Ohio' }
411
+ it { expect(Address.new(country: 'United States').states_for_country.map(&:name)).to include 'District of Columbia' }
412
+ it { expect(Address.new(country: 'United States').states_for_country.map(&:name)).to include 'Puerto Rico' }
413
+ it { expect(Address.new(country: 'South Africa').states_for_country.map(&:name)).to include 'Mpumalanga' }
414
+ it { expect(Address.new(country: 'Kenya').states_for_country.typed('province')).to be_empty }
189
415
  # At the time of this writing, it doesn't look like Carmen has been updated to
190
416
  # include the 47 counties listed under https://en.wikipedia.org/wiki/ISO_3166-2:KE.
191
417
  #it { Address.new(country: 'Kenya').states_for_country.map(&:name).should include 'Nyeri' }
192
- it { Address.new(country: 'Denmark').state_options.should be_many }
193
- it { Address.new(country: 'Denmark').state_options.map(&:name).should include 'Sjælland' }
194
- it { Address.new(country: 'Denmark').state_possibly_included_in_postal_address?.should eq false }
418
+ it { expect(Address.new(country: 'Denmark').state_options).to be_many }
419
+ it { expect(Address.new(country: 'Denmark').state_options.map(&:name)).to include 'Sjælland' }
420
+ it { expect(Address.new(country: 'Denmark').state_possibly_included_in_postal_address?).to eq false }
195
421
 
196
422
  # Auckland (AUK) is a subregion of the North Island (N) subregion
197
- it { Address.new(country: 'New Zealand').state_options.map(&:code).should include 'AUK' }
198
- it { Address.new(country: 'New Zealand').state_options.map(&:code).should_not include 'N' }
423
+ it { expect(Address.new(country: 'New Zealand').state_options.map(&:code)).to include 'AUK' }
424
+ it { expect(Address.new(country: 'New Zealand').state_options.map(&:code)).not_to include 'N' }
199
425
  # Chatham Islands Territory (CIT) is a top-level region
200
- it { Address.new(country: 'New Zealand').state_options.map(&:code).should include 'CIT' }
426
+ it { expect(Address.new(country: 'New Zealand').state_options.map(&:code)).to include 'CIT' }
201
427
 
202
428
  # Abra (ABR) is a subregion of the Cordillera Administrative Region (CAR) (15) subregion
203
- it { Address.new(country: 'Philippines').state_options.map(&:code).should include 'ABR' }
204
- it { Address.new(country: 'Philippines').state_options.map(&:code).should_not include '15' }
429
+ it { expect(Address.new(country: 'Philippines').state_options.map(&:code)).to include 'ABR' }
430
+ it { expect(Address.new(country: 'Philippines').state_options.map(&:code)).not_to include '15' }
205
431
  # National Capital Region (00) is a top-level region
206
- it { Address.new(country: 'Philippines').state_options.map(&:code).should include '00' }
432
+ it { expect(Address.new(country: 'Philippines').state_options.map(&:code)).to include '00' }
207
433
 
208
434
  # https://en.wikipedia.org/wiki/Provinces_of_Indonesia
209
435
  # The provinces are officially grouped into seven geographical units
210
436
  # Jawa Barat (JB) is a subregion of the Jawa (JW) subregion
211
- it { Address.new(country: 'Indonesia').state_options.map(&:code).should include 'JB' }
212
- it { Address.new(country: 'Indonesia').state_options.map(&:code).should_not include 'JW' }
437
+ it { expect(Address.new(country: 'Indonesia').state_options.map(&:code)).to include 'JB' }
438
+ it { expect(Address.new(country: 'Indonesia').state_options.map(&:code)).not_to include 'JW' }
213
439
  # The province is not called "Jakarta Raya" according to
214
440
  # https://en.wikipedia.org/wiki/ISO_3166-2:ID and https://en.wikipedia.org/wiki/Jakarta — it's
215
441
  # called 'DKI Jakarta', which is short for 'Daerah Khusus Ibukota Jakarta' ('Special Capital
216
442
  # City District of Jakarta'),
217
- it { Address.new(country: 'Indonesia').state_options.map(&:name).should include 'DKI Jakarta' }
443
+ it { expect(Address.new(country: 'Indonesia').state_options.map(&:name)).to include 'DKI Jakarta' }
218
444
 
219
445
  # At the time of this writing, it doesn't look like Carmen has been updated to reflect the new 18
220
446
  # regions of France.
221
- it { Address.new(country: 'France').state_options.size.should eq 0 }
447
+ it { expect(Address.new(country: 'France').state_options.size).to eq 26 }
448
+ it { expect(Address.new(country_name: 'France').state_options.map(&:name)).to include 'Auvergne-Rhône-Alpes' }
222
449
  #it { Address.new(country: 'France').state_options.size.should eq 18 }
223
450
  #it { Address.new(country: 'France').state_options.map(&:name).should include 'Auvergne-Rhône-Alpes' }
224
451
  end
225
452
 
453
+ #═════════════════════════════════════════════════════════════════════════════════════════════════
226
454
  describe 'associations' do
227
455
  # To do (or maybe not even necessary—seems to work with only the has_one side of the association):
228
456
  #describe 'when we have a polymorphic belongs_to :addressable in Address' do
229
- #belongs_to :addressable, :polymorphic => true
457
+ #belongs_to :addressable, polymorphic: true
230
458
 
231
459
  describe 'Company has_one :address' do
232
460
  let(:company) { Company.create }
233
461
 
234
462
  it do
235
- company.address.should == nil
463
+ expect(company.address).to eq(nil)
236
464
  address = company.build_address(address: '1')
237
465
  company.save!
238
- company.reload.address.should == address
239
- address.addressable.should == company
466
+ expect(company.reload.address).to eq(address)
467
+ expect(address.addressable).to eq(company)
240
468
  end
241
469
 
242
470
  end
@@ -245,26 +473,26 @@ describe Address do
245
473
  let(:user) { User.create }
246
474
 
247
475
  it do
248
- user.addresses.should == []
476
+ expect(user.addresses).to eq([])
249
477
  address_1 = user.addresses.build(address: '1')
250
478
  address_2 = user.addresses.build(address: '2')
251
479
  user.save!; user.reload
252
- user.addresses.should == [address_1, address_2]
480
+ expect(user.addresses).to eq([address_1, address_2])
253
481
  end
254
482
 
255
483
  specify 'should able to set and retrieve a specific address by type (shipping or billing)' do
256
484
  physical_address = user.build_physical_address(address: 'Physical')
257
485
  shipping_address = user.build_shipping_address(address: 'Shipping')
258
486
  billing_address = user.build_billing_address( address: 'Billing')
259
- vacation_address = user.addresses.build(address: 'Vacation', :address_type => 'Vacation')
487
+ vacation_address = user.addresses.build(address: 'Vacation', address_type: 'Vacation')
260
488
  user.save!; user.reload
261
- user.physical_address.should == physical_address
262
- user.shipping_address.should == shipping_address
263
- user.billing_address. should == billing_address
264
- user.addresses.to_set.should == [physical_address, shipping_address, billing_address, vacation_address].to_set
265
- physical_address.addressable.should == user
266
- shipping_address.addressable.should == user
267
- billing_address .addressable.should == user
489
+ expect(user.physical_address).to eq(physical_address)
490
+ expect(user.shipping_address).to eq(shipping_address)
491
+ expect(user.billing_address). to eq(billing_address)
492
+ expect(user.addresses.to_set).to eq([physical_address, shipping_address, billing_address, vacation_address].to_set)
493
+ expect(physical_address.addressable).to eq(user)
494
+ expect(shipping_address.addressable).to eq(user)
495
+ expect(billing_address .addressable).to eq(user)
268
496
  end
269
497
  end
270
498
 
@@ -272,15 +500,15 @@ describe Address do
272
500
  subject!(:employee) { Employee.create! }
273
501
 
274
502
  it do
275
- employee.home_address.should == nil
276
- employee.work_address.should == nil
503
+ expect(employee.home_address).to eq(nil)
504
+ expect(employee.work_address).to eq(nil)
277
505
  home_address = employee.build_home_address(address: '1')
278
506
  work_address = employee.build_work_address(address: '2')
279
507
  employee.save!
280
- employee.reload.home_address.should == home_address
281
- employee.reload.work_address.should == work_address
282
- home_address.employee_home.should == employee
283
- work_address.employee_work.should == employee
508
+ expect(employee.reload.home_address).to eq(home_address)
509
+ expect(employee.reload.work_address).to eq(work_address)
510
+ expect(home_address.employee_home).to eq(employee)
511
+ expect(work_address.employee_work).to eq(employee)
284
512
  end
285
513
  end
286
514
 
@@ -288,15 +516,15 @@ describe Address do
288
516
  subject!(:child) { Child.create! }
289
517
 
290
518
  it do
291
- child.address. should == nil
292
- child.secret_hideout.should == nil
519
+ expect(child.address). to eq(nil)
520
+ expect(child.secret_hideout).to eq(nil)
293
521
  address = child.build_address(address: '2')
294
522
  secret_hideout = child.build_secret_hideout(address: '1')
295
523
  child.save!
296
- child.reload.address. should == address
297
- child.reload.secret_hideout.should == secret_hideout
298
- address. child. should == child
299
- secret_hideout.child_for_secret_hideout.should == child
524
+ expect(child.reload.address). to eq(address)
525
+ expect(child.reload.secret_hideout).to eq(secret_hideout)
526
+ expect(address. child). to eq(child)
527
+ expect(secret_hideout.child_for_secret_hideout).to eq(child)
300
528
  end
301
529
  end
302
530
  end