ideal_postcodes 0.1.1 → 1.0.0

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -0
  3. data/README.md +295 -42
  4. data/Rakefile +13 -6
  5. data/ideal-postcodes-ruby.gemspec +9 -10
  6. data/lib/idealpostcodes.rb +30 -9
  7. data/lib/idealpostcodes/address.rb +31 -0
  8. data/lib/idealpostcodes/key.rb +13 -0
  9. data/lib/idealpostcodes/postcode.rb +11 -24
  10. data/lib/idealpostcodes/util.rb +2 -2
  11. data/lib/idealpostcodes/version.rb +1 -1
  12. data/spec/addresses_spec.rb +68 -0
  13. data/spec/idealpostcodes_spec.rb +56 -0
  14. data/spec/keys_spec.rb +25 -0
  15. data/spec/postcodes_spec.rb +66 -0
  16. data/spec/spec_helper.rb +65 -0
  17. data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_invalid_key.yml +42 -0
  18. data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_limit_breached.yml +42 -0
  19. data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_no_lookups_remaining.yml +42 -0
  20. data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_returns_an_address_for_a_valid_UDPRN.yml +74 -0
  21. data/spec/vcr_cassettes/IdealPostcodes_Address_lookup_returns_nil_for_an_invalid_UDPRN.yml +42 -0
  22. data/spec/vcr_cassettes/IdealPostcodes_Address_search_is_sensitive_to_limit.yml +81 -0
  23. data/spec/vcr_cassettes/IdealPostcodes_Address_search_is_sensitive_to_page.yml +369 -0
  24. data/spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_invalid_key.yml +42 -0
  25. data/spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_limit_breached.yml +42 -0
  26. data/spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_no_lookups_remaining.yml +42 -0
  27. data/spec/vcr_cassettes/IdealPostcodes_Address_search_returns_results_in_a_SearchResult_object.yml +273 -0
  28. data/spec/vcr_cassettes/IdealPostcodes_Key_lookup_details_returns_key_details.yml +62 -0
  29. data/spec/vcr_cassettes/IdealPostcodes_Key_lookup_returns_the_availability_status_of_a_key_false_key_.yml +45 -0
  30. data/spec/vcr_cassettes/IdealPostcodes_Key_lookup_returns_the_availability_status_of_a_key_true_key_.yml +45 -0
  31. data/spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_is_sensitive_to_limit_parameter.yml +52 -0
  32. data/spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_is_sensitive_to_radius_parament.yml +133 -0
  33. data/spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_returns_an_array_of_postcodes_and_locations.yml +84 -0
  34. data/spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_returns_an_empty_array_if_no_results_are_found.yml +43 -0
  35. data/spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_invalid_key.yml +42 -0
  36. data/spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_key_has_run_out_of_balance.yml +42 -0
  37. data/spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_limit_has_been_reached.yml +42 -0
  38. data/spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_returns_a_list_of_addresses_for_a_postcode.yml +268 -0
  39. data/spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_returns_an_empty_array_if_postcode_does_not_exist.yml +42 -0
  40. data/spec/vcr_cassettes/IdealPostcodes_key_available_returns_false_if_key_is_unavailable.yml +45 -0
  41. data/spec/vcr_cassettes/IdealPostcodes_key_available_returns_true_if_key_is_available.yml +45 -0
  42. data/spec/vcr_cassettes/IdealPostcodes_key_details_raises_an_exception_if_no_secret_is_provided.yml +45 -0
  43. data/spec/vcr_cassettes/IdealPostcodes_key_details_returns_key_information.yml +62 -0
  44. data/spec/vcr_cassettes/IdealPostcodes_request_generates_a_HTTP_request.yml +268 -0
  45. data/spec/vcr_cassettes/IdealPostcodes_request_raises_authentication_error_if_invalid_key_is_provided.yml +42 -0
  46. data/spec/vcr_cassettes/IdealPostcodes_request_raises_limit_reached_error_if_a_limit_has_been_breached.yml +42 -0
  47. data/spec/vcr_cassettes/IdealPostcodes_request_raises_token_exhausted_error_if_key_balance_is_depleted.yml +42 -0
  48. metadata +96 -39
  49. data/test/test_helper.rb +0 -77
  50. data/test/test_ideal_postcodes.rb +0 -78
@@ -0,0 +1,42 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://localhost:1337/v1/postcodes/ID1%20CLIP?api_key=gandhi
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - '*/*; q=0.5, application/xml'
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 402
19
+ message: Payment Required
20
+ headers:
21
+ Access-Control-Allow-Origin:
22
+ - '*'
23
+ Content-Type:
24
+ - application/json; charset=utf-8
25
+ Content-Length:
26
+ - '146'
27
+ Etag:
28
+ - '"1304241290"'
29
+ Date:
30
+ - Fri, 12 Dec 2014 17:40:27 GMT
31
+ Connection:
32
+ - keep-alive
33
+ body:
34
+ encoding: UTF-8
35
+ string: |-
36
+ {
37
+ "code": 4020,
38
+ "message": "Token balance depleted. For more information see http://ideal-postcodes.co.uk/documentation/response-codes#4020"
39
+ }
40
+ http_version:
41
+ recorded_at: Fri, 12 Dec 2014 17:40:27 GMT
42
+ recorded_with: VCR 2.9.3
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ideal_postcodes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Chris Blanchard
7
+ - Ideal Postcodes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-08 00:00:00.000000000 Z
11
+ date: 2014-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -25,96 +25,119 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
- name: multi_json
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 1.7.9
34
- type: :runtime
33
+ version: 10.1.0
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 1.7.9
40
+ version: 10.1.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: mocha
42
+ name: vcr
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 0.14.0
47
+ version: 2.9.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 0.14.0
54
+ version: 2.9.3
55
55
  - !ruby/object:Gem::Dependency
56
- name: test-unit
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '>='
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: shoulda
56
+ name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - ~>
74
60
  - !ruby/object:Gem::Version
75
- version: 3.5.0
61
+ version: 3.1.0
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - ~>
81
67
  - !ruby/object:Gem::Version
82
- version: 3.5.0
68
+ version: 3.1.0
83
69
  - !ruby/object:Gem::Dependency
84
- name: rake
70
+ name: webmock
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - '>='
73
+ - - ~>
88
74
  - !ruby/object:Gem::Version
89
- version: '0'
75
+ version: 1.20.4
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - '>='
80
+ - - ~>
95
81
  - !ruby/object:Gem::Version
96
- version: '0'
97
- description: Ideal Postcodes is a simple postcode lookup API for UK addresses. See
82
+ version: 1.20.4
83
+ description: Ideal Postcodes is a simple postcode lookup API for UK addresses. See
98
84
  https://ideal-postcodes.co.uk
99
85
  email:
100
- - cablanchard@gmail.com
86
+ - support@ideal-postcodes.co.uk
101
87
  executables: []
102
88
  extensions: []
103
89
  extra_rdoc_files: []
104
90
  files:
91
+ - .travis.yml
105
92
  - Gemfile
106
93
  - README.md
107
94
  - Rakefile
108
95
  - ideal-postcodes-ruby.gemspec
109
96
  - lib/ideal_postcodes.rb
110
97
  - lib/idealpostcodes.rb
98
+ - lib/idealpostcodes/address.rb
111
99
  - lib/idealpostcodes/errors.rb
100
+ - lib/idealpostcodes/key.rb
112
101
  - lib/idealpostcodes/postcode.rb
113
102
  - lib/idealpostcodes/util.rb
114
103
  - lib/idealpostcodes/version.rb
115
- - test/test_helper.rb
116
- - test/test_ideal_postcodes.rb
117
- homepage: https://ideal-postcodes.co.uk/documentation
104
+ - spec/addresses_spec.rb
105
+ - spec/idealpostcodes_spec.rb
106
+ - spec/keys_spec.rb
107
+ - spec/postcodes_spec.rb
108
+ - spec/spec_helper.rb
109
+ - spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_invalid_key.yml
110
+ - spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_limit_breached.yml
111
+ - spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_no_lookups_remaining.yml
112
+ - spec/vcr_cassettes/IdealPostcodes_Address_lookup_returns_an_address_for_a_valid_UDPRN.yml
113
+ - spec/vcr_cassettes/IdealPostcodes_Address_lookup_returns_nil_for_an_invalid_UDPRN.yml
114
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_is_sensitive_to_limit.yml
115
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_is_sensitive_to_page.yml
116
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_invalid_key.yml
117
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_limit_breached.yml
118
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_no_lookups_remaining.yml
119
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_returns_results_in_a_SearchResult_object.yml
120
+ - spec/vcr_cassettes/IdealPostcodes_Key_lookup_details_returns_key_details.yml
121
+ - spec/vcr_cassettes/IdealPostcodes_Key_lookup_returns_the_availability_status_of_a_key_false_key_.yml
122
+ - spec/vcr_cassettes/IdealPostcodes_Key_lookup_returns_the_availability_status_of_a_key_true_key_.yml
123
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_is_sensitive_to_limit_parameter.yml
124
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_is_sensitive_to_radius_parament.yml
125
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_returns_an_array_of_postcodes_and_locations.yml
126
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_returns_an_empty_array_if_no_results_are_found.yml
127
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_invalid_key.yml
128
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_key_has_run_out_of_balance.yml
129
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_limit_has_been_reached.yml
130
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_returns_a_list_of_addresses_for_a_postcode.yml
131
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_returns_an_empty_array_if_postcode_does_not_exist.yml
132
+ - spec/vcr_cassettes/IdealPostcodes_key_available_returns_false_if_key_is_unavailable.yml
133
+ - spec/vcr_cassettes/IdealPostcodes_key_available_returns_true_if_key_is_available.yml
134
+ - spec/vcr_cassettes/IdealPostcodes_key_details_raises_an_exception_if_no_secret_is_provided.yml
135
+ - spec/vcr_cassettes/IdealPostcodes_key_details_returns_key_information.yml
136
+ - spec/vcr_cassettes/IdealPostcodes_request_generates_a_HTTP_request.yml
137
+ - spec/vcr_cassettes/IdealPostcodes_request_raises_authentication_error_if_invalid_key_is_provided.yml
138
+ - spec/vcr_cassettes/IdealPostcodes_request_raises_limit_reached_error_if_a_limit_has_been_breached.yml
139
+ - spec/vcr_cassettes/IdealPostcodes_request_raises_token_exhausted_error_if_key_balance_is_depleted.yml
140
+ homepage: https://ideal-postcodes.co.uk/
118
141
  licenses: []
119
142
  metadata: {}
120
143
  post_install_message:
@@ -138,5 +161,39 @@ signing_key:
138
161
  specification_version: 4
139
162
  summary: Wrapper for the Ideal-Postcodes.co.uk API
140
163
  test_files:
141
- - test/test_helper.rb
142
- - test/test_ideal_postcodes.rb
164
+ - spec/addresses_spec.rb
165
+ - spec/idealpostcodes_spec.rb
166
+ - spec/keys_spec.rb
167
+ - spec/postcodes_spec.rb
168
+ - spec/spec_helper.rb
169
+ - spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_invalid_key.yml
170
+ - spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_limit_breached.yml
171
+ - spec/vcr_cassettes/IdealPostcodes_Address_lookup_raises_an_exception_if_no_lookups_remaining.yml
172
+ - spec/vcr_cassettes/IdealPostcodes_Address_lookup_returns_an_address_for_a_valid_UDPRN.yml
173
+ - spec/vcr_cassettes/IdealPostcodes_Address_lookup_returns_nil_for_an_invalid_UDPRN.yml
174
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_is_sensitive_to_limit.yml
175
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_is_sensitive_to_page.yml
176
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_invalid_key.yml
177
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_limit_breached.yml
178
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_raises_an_exception_if_no_lookups_remaining.yml
179
+ - spec/vcr_cassettes/IdealPostcodes_Address_search_returns_results_in_a_SearchResult_object.yml
180
+ - spec/vcr_cassettes/IdealPostcodes_Key_lookup_details_returns_key_details.yml
181
+ - spec/vcr_cassettes/IdealPostcodes_Key_lookup_returns_the_availability_status_of_a_key_false_key_.yml
182
+ - spec/vcr_cassettes/IdealPostcodes_Key_lookup_returns_the_availability_status_of_a_key_true_key_.yml
183
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_is_sensitive_to_limit_parameter.yml
184
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_is_sensitive_to_radius_parament.yml
185
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_returns_an_array_of_postcodes_and_locations.yml
186
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_find_by_location_returns_an_empty_array_if_no_results_are_found.yml
187
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_invalid_key.yml
188
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_key_has_run_out_of_balance.yml
189
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_raises_an_exception_if_limit_has_been_reached.yml
190
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_returns_a_list_of_addresses_for_a_postcode.yml
191
+ - spec/vcr_cassettes/IdealPostcodes_Postcode_lookup_returns_an_empty_array_if_postcode_does_not_exist.yml
192
+ - spec/vcr_cassettes/IdealPostcodes_key_available_returns_false_if_key_is_unavailable.yml
193
+ - spec/vcr_cassettes/IdealPostcodes_key_available_returns_true_if_key_is_available.yml
194
+ - spec/vcr_cassettes/IdealPostcodes_key_details_raises_an_exception_if_no_secret_is_provided.yml
195
+ - spec/vcr_cassettes/IdealPostcodes_key_details_returns_key_information.yml
196
+ - spec/vcr_cassettes/IdealPostcodes_request_generates_a_HTTP_request.yml
197
+ - spec/vcr_cassettes/IdealPostcodes_request_raises_authentication_error_if_invalid_key_is_provided.yml
198
+ - spec/vcr_cassettes/IdealPostcodes_request_raises_limit_reached_error_if_a_limit_has_been_breached.yml
199
+ - spec/vcr_cassettes/IdealPostcodes_request_raises_token_exhausted_error_if_key_balance_is_depleted.yml
data/test/test_helper.rb DELETED
@@ -1,77 +0,0 @@
1
- require 'test/unit'
2
- require 'mocha/setup'
3
- require 'ideal_postcodes'
4
- require 'shoulda'
5
-
6
- module IdealPostcodes
7
-
8
- attr_accessor :mock
9
-
10
- def self.mock=(mock)
11
- @mock = mock
12
- end
13
-
14
- def self.generate_request(options)
15
- method = options[:method]
16
- url = options[:url]
17
- @mock.execute method, url
18
- end
19
-
20
- end
21
-
22
- def test_response(body, status=200)
23
- body = MultiJson.dump(body)
24
- m = mock
25
- m.instance_variable_set('@instance_vals', {code: status, body: body})
26
- def m.body; @instance_vals[:body]; end
27
- def m.code; @instance_vals[:code]; end
28
- m
29
- end
30
-
31
- def test_postcode
32
- "ID11QD"
33
- end
34
-
35
- def valid_postcode(params={})
36
- {
37
- result: [
38
- {
39
- postcode: "ID1 1QD",
40
- post_town: "LONDON",
41
- line_1: "Kingsley Hall",
42
- line_2: "Powis Road",
43
- line_3: ""
44
- }
45
- ],
46
- message: "Success",
47
- code: 2000
48
- }
49
- end
50
-
51
- def invalid_postcode
52
- {
53
- message: "Postcode not found",
54
- code: 4040
55
- }
56
- end
57
-
58
- def invalid_token
59
- {
60
- message: "Invalid key",
61
- code: 4010
62
- }
63
- end
64
-
65
- def limit_reached
66
- {
67
- code: 4021,
68
- message: "Lookup Limit Reached"
69
- }
70
- end
71
-
72
- def token_exhausted
73
- {
74
- code: 4020,
75
- message: "Token exhausted"
76
- }
77
- end
@@ -1,78 +0,0 @@
1
- require File.expand_path('../test_helper', __FILE__)
2
-
3
- class TestIdealPostcodes < Test::Unit::TestCase
4
- include Mocha
5
-
6
- context "API" do
7
-
8
- setup do
9
- @mock = mock
10
- IdealPostcodes.mock = @mock
11
- end
12
-
13
- teardown do
14
- IdealPostcodes.mock = nil
15
- end
16
-
17
- should "raise an exception if no API key set" do
18
- IdealPostcodes.api_key = nil
19
- assert_raises IdealPostcodes::AuthenticationError do
20
- postcode = IdealPostcodes::Postcode.lookup(test_postcode)
21
- end
22
- end
23
-
24
- should "raise an exception if authentication failed" do
25
- IdealPostcodes.api_key = "BOGUS"
26
- response = test_response invalid_token
27
- assert_raises IdealPostcodes::AuthenticationError do
28
- @mock.expects(:execute).raises(RestClient::ExceptionWithResponse.new(response, 401))
29
- IdealPostcodes::Postcode.lookup(test_postcode)
30
- end
31
- end
32
-
33
- context "Valid API key" do
34
-
35
- setup do
36
- IdealPostcodes.api_key = "correctkey"
37
- end
38
-
39
- teardown do
40
- IdealPostcodes.api_key = nil
41
- end
42
-
43
- should "raise an exception if tokens exhausted" do
44
- response = test_response token_exhausted
45
- assert_raises IdealPostcodes::TokenExhaustedError do
46
- @mock.expects(:execute).raises(RestClient::ExceptionWithResponse.new(response, 402))
47
- IdealPostcodes::Postcode.lookup(test_postcode)
48
- end
49
- end
50
-
51
- should "raise an exception if limit has been breached" do
52
- response = test_response limit_reached
53
- assert_raises IdealPostcodes::LimitReachedError do
54
- @mock.expects(:execute).raises(RestClient::ExceptionWithResponse.new(response, 402))
55
- IdealPostcodes::Postcode.lookup(test_postcode)
56
- end
57
- end
58
-
59
- should "return postcode object with addresses for valid postcode" do
60
- response = test_response valid_postcode
61
- @mock.expects(:execute).returns(response)
62
- postcode = IdealPostcodes::Postcode.lookup(test_postcode)
63
- assert_equal postcode.empty?, false
64
- assert_equal postcode.addresses, valid_postcode[:result]
65
- end
66
-
67
- should "return postcode object with empty array for non-existent postcode" do
68
- response = test_response invalid_postcode
69
- @mock.expects(:execute).raises(RestClient::ExceptionWithResponse.new(response, 404))
70
- postcode = IdealPostcodes::Postcode.lookup(test_postcode)
71
- assert_equal postcode.empty?, true
72
- end
73
-
74
- end
75
-
76
- end
77
-
78
- end