ideal_postcodes 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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