rdstation-ruby-client 1.2.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,31 +11,38 @@ RSpec.describe RDStation::Contacts do
11
11
  let(:endpoint_with_valid_email) { "https://api.rd.services/platform/contacts/email:#{valid_email}" }
12
12
  let(:endpoint_with_invalid_email) { "https://api.rd.services/platform/contacts/email:#{invalid_email}" }
13
13
 
14
- let(:valid_auth_token) { 'valid_auth_token' }
15
- let(:invalid_auth_token) { 'invalid_auth_token' }
16
- let(:expired_auth_token) { 'expired_auth_token' }
14
+ let(:valid_access_token) { 'valid_access_token' }
15
+ let(:invalid_access_token) { 'invalid_access_token' }
16
+ let(:expired_access_token) { 'expired_access_token' }
17
+
18
+ let(:contact_with_valid_token) do
19
+ described_class.new(authorization_header: RDStation::AuthorizationHeader.new(access_token: valid_access_token))
20
+ end
21
+ let(:contact_with_expired_token) do
22
+ described_class.new(authorization_header: RDStation::AuthorizationHeader.new(access_token: expired_access_token))
23
+ end
24
+ let(:contact_with_invalid_token) do
25
+ described_class.new(authorization_header: RDStation::AuthorizationHeader.new(access_token: invalid_access_token))
26
+ end
17
27
 
18
- let(:contact_with_valid_token) { described_class.new(valid_auth_token) }
19
- let(:contact_with_expired_token) { described_class.new(expired_auth_token) }
20
- let(:contact_with_invalid_token) { described_class.new(invalid_auth_token) }
21
28
 
22
29
  let(:valid_headers) do
23
30
  {
24
- 'Authorization' => "Bearer #{valid_auth_token}",
31
+ 'Authorization' => "Bearer #{valid_access_token}",
25
32
  'Content-Type' => 'application/json'
26
33
  }
27
34
  end
28
35
 
29
36
  let(:invalid_token_headers) do
30
37
  {
31
- 'Authorization' => "Bearer #{invalid_auth_token}",
38
+ 'Authorization' => "Bearer #{invalid_access_token}",
32
39
  'Content-Type' => 'application/json'
33
40
  }
34
41
  end
35
42
 
36
43
  let(:expired_token_headers) do
37
44
  {
38
- 'Authorization' => "Bearer #{expired_auth_token}",
45
+ 'Authorization' => "Bearer #{expired_access_token}",
39
46
  'Content-Type' => 'application/json'
40
47
  }
41
48
  end
@@ -130,7 +137,7 @@ RSpec.describe RDStation::Contacts do
130
137
  it 'raises a not found error' do
131
138
  expect do
132
139
  contact_with_valid_token.by_uuid(invalid_uuid)
133
- end.to raise_error(RDStation::Error::ResourceNotFound)
140
+ end.to raise_error(RDStation::Error::NotFound)
134
141
  end
135
142
  end
136
143
  end
@@ -193,7 +200,7 @@ RSpec.describe RDStation::Contacts do
193
200
  it 'raises a not found error' do
194
201
  expect do
195
202
  contact_with_valid_token.by_email(invalid_email)
196
- end.to raise_error(RDStation::Error::ResourceNotFound)
203
+ end.to raise_error(RDStation::Error::NotFound)
197
204
  end
198
205
  end
199
206
  end
@@ -228,11 +235,11 @@ RSpec.describe RDStation::Contacts do
228
235
  end
229
236
 
230
237
  describe '#update' do
231
- context 'with a valid auth_token' do
232
- let(:valid_auth_token) { 'valid_auth_token' }
238
+ context 'with a valid access_token' do
239
+ let(:valid_access_token) { 'valid_access_token' }
233
240
  let(:headers) do
234
241
  {
235
- 'Authorization' => "Bearer #{valid_auth_token}",
242
+ 'Authorization' => "Bearer #{valid_access_token}",
236
243
  'Content-Type' => 'application/json'
237
244
  }
238
245
  end
@@ -264,16 +271,16 @@ RSpec.describe RDStation::Contacts do
264
271
  it 'raises a not found error' do
265
272
  expect do
266
273
  contact_with_valid_token.update(invalid_uuid, {})
267
- end.to raise_error(RDStation::Error::ResourceNotFound)
274
+ end.to raise_error(RDStation::Error::NotFound)
268
275
  end
269
276
  end
270
277
  end
271
278
 
272
279
  context 'with an invalid auth token' do
273
- let(:invalid_auth_token) { 'invalid_auth_token' }
280
+ let(:invalid_access_token) { 'invalid_access_token' }
274
281
  let(:headers) do
275
282
  {
276
- 'Authorization' => "Bearer #{invalid_auth_token}",
283
+ 'Authorization' => "Bearer #{invalid_access_token}",
277
284
  'Content-Type' => 'application/json'
278
285
  }
279
286
  end
@@ -292,10 +299,10 @@ RSpec.describe RDStation::Contacts do
292
299
  end
293
300
 
294
301
  context 'with an expired auth token' do
295
- let(:expired_auth_token) { 'expired_auth_token' }
302
+ let(:expired_access_token) { 'expired_access_token' }
296
303
  let(:headers) do
297
304
  {
298
- 'Authorization' => "Bearer #{expired_auth_token}",
305
+ 'Authorization' => "Bearer #{expired_access_token}",
299
306
  'Content-Type' => 'application/json'
300
307
  }
301
308
  end
@@ -315,12 +322,12 @@ RSpec.describe RDStation::Contacts do
315
322
  end
316
323
 
317
324
  describe '#upsert' do
318
- context 'with a valid auth_token' do
319
- let(:valid_auth_token) { 'valid_auth_token' }
325
+ context 'with a valid access_token' do
326
+ let(:valid_access_token) { 'valid_access_token' }
320
327
 
321
328
  let(:headers) do
322
329
  {
323
- 'Authorization' => "Bearer #{valid_auth_token}",
330
+ 'Authorization' => "Bearer #{valid_access_token}",
324
331
  'Content-Type' => 'application/json'
325
332
  }
326
333
  end
@@ -352,7 +359,7 @@ RSpec.describe RDStation::Contacts do
352
359
  it 'raises a not found error' do
353
360
  expect do
354
361
  contact_with_valid_token.upsert('email', invalid_email, {})
355
- end.to raise_error(RDStation::Error::ResourceNotFound)
362
+ end.to raise_error(RDStation::Error::NotFound)
356
363
  end
357
364
  end
358
365
 
@@ -371,27 +378,13 @@ RSpec.describe RDStation::Contacts do
371
378
  end.to raise_error(RDStation::Error::ConflictingField)
372
379
  end
373
380
  end
374
-
375
- context 'when an unrecognized error occurs' do
376
- before do
377
- stub_request(:patch, endpoint_with_valid_email)
378
- .with(headers: headers)
379
- .to_return(unrecognized_error)
380
- end
381
-
382
- it 'raises an default error' do
383
- expect do
384
- contact_with_valid_token.upsert('email', valid_email, {})
385
- end.to raise_error(RDStation::Error::Default)
386
- end
387
- end
388
381
  end
389
382
 
390
383
  context 'with an invalid auth token' do
391
- let(:invalid_auth_token) { 'invalid_auth_token' }
384
+ let(:invalid_access_token) { 'invalid_access_token' }
392
385
  let(:headers) do
393
386
  {
394
- 'Authorization' => "Bearer #{invalid_auth_token}",
387
+ 'Authorization' => "Bearer #{invalid_access_token}",
395
388
  'Content-Type' => 'application/json'
396
389
  }
397
390
  end
@@ -410,10 +403,10 @@ RSpec.describe RDStation::Contacts do
410
403
  end
411
404
 
412
405
  context 'with an expired auth token' do
413
- let(:expired_auth_token) { 'expired_auth_token' }
406
+ let(:expired_access_token) { 'expired_access_token' }
414
407
  let(:headers) do
415
408
  {
416
- 'Authorization' => "Bearer #{expired_auth_token}",
409
+ 'Authorization' => "Bearer #{expired_access_token}",
417
410
  'Content-Type' => 'application/json'
418
411
  }
419
412
  end
@@ -21,34 +21,5 @@ RSpec.describe RDStation::ErrorHandler::Unauthorized do
21
21
  end.to raise_error(RDStation::Error::Unauthorized, 'Error Message')
22
22
  end
23
23
  end
24
-
25
- context 'when none of the errors are unauthorized errors' do
26
- let(:errors) do
27
- [
28
- {
29
- 'error_message' => 'Error Message',
30
- 'error_type' => 'RANDOM_ERROR_TYPE'
31
- },
32
- {
33
- 'error_message' => 'Another Error Message',
34
- 'error_type' => 'ANOTHER_RANDOM_ERROR_TYPE'
35
- }
36
- ]
37
- end
38
-
39
- it 'does not raise an Unauthorized error' do
40
- result = unauthorized_error.raise_error
41
- expect(result).to be_nil
42
- end
43
- end
44
-
45
- context 'when there are no errors' do
46
- let(:errors) { [] }
47
-
48
- it 'does not raise an Unauthorized error' do
49
- result = unauthorized_error.raise_error
50
- expect(result).to be_nil
51
- end
52
- end
53
24
  end
54
25
  end
@@ -4,45 +4,158 @@ RSpec.describe RDStation::ErrorHandler do
4
4
  describe '#raise_errors' do
5
5
  subject(:error_handler) { described_class.new(error_response) }
6
6
 
7
- context 'when the error type is recognized' do
8
- let(:error_response) do
9
- OpenStruct.new(
10
- code: 400,
11
- body: {
7
+ let(:array_of_errors) do
8
+ [
9
+ {
10
+ 'error_type' => 'ERROR_TYPE',
11
+ 'error_message' => 'Error Message',
12
+ 'headers' => { 'error' => 'header' },
13
+ 'http_status' => http_status,
14
+ 'body' => {
12
15
  'errors' => {
13
- 'error_type' => 'CONFLICTING_FIELD',
16
+ 'error_type' => 'ERROR_TYPE',
14
17
  'error_message' => 'Error Message'
15
18
  }
16
- }.to_json
17
- )
19
+ }
20
+ }
21
+ ]
22
+ end
23
+
24
+ let(:error_response) do
25
+ OpenStruct.new(
26
+ code: http_status,
27
+ headers: { 'error' => 'header' },
28
+ body: {
29
+ 'errors' => {
30
+ 'error_type' => 'ERROR_TYPE',
31
+ 'error_message' => 'Error Message'
32
+ }
33
+ }.to_json
34
+ )
35
+ end
36
+
37
+ context 'with an error 400' do
38
+ let(:http_status) { 400 }
39
+
40
+ let(:bad_request_handler) { instance_double(RDStation::ErrorHandler::BadRequest, raise_error: 'raised error') }
41
+
42
+ before do
43
+ allow(RDStation::ErrorHandler::BadRequest).to receive(:new).with(array_of_errors).and_return(bad_request_handler)
18
44
  end
19
45
 
20
- it 'raises the corresponding error class' do
21
- expect { error_handler.raise_errors }.to raise_error(RDStation::Error::ConflictingField, 'Error Message')
46
+ it 'calls the bad request error handler' do
47
+ error_handler.raise_error
48
+ expect(bad_request_handler).to have_received(:raise_error)
22
49
  end
23
50
  end
24
51
 
25
- context 'when the error type is not recognized' do
26
- let(:error_response) do
27
- OpenStruct.new(
28
- code: 400,
29
- headers: { 'Content-Type' => 'application/json' },
30
- body: {
31
- 'errors' => {
32
- 'error_type' => 'UNRECOGNIZED_ERROR_TYPE',
33
- 'error_message' => 'Error Message'
34
- }
35
- }.to_json
36
- )
52
+ context 'with an error 401' do
53
+ let(:http_status) { 401 }
54
+
55
+ let(:unauthorized_handler) { instance_double(RDStation::ErrorHandler::Unauthorized, raise_error: 'raised error') }
56
+
57
+ before do
58
+ allow(RDStation::ErrorHandler::Unauthorized).to receive(:new).with(array_of_errors).and_return(unauthorized_handler)
59
+ end
60
+
61
+ it 'calls the unauthorized error handler' do
62
+ error_handler.raise_error
63
+ expect(unauthorized_handler).to have_received(:raise_error)
64
+ end
65
+ end
66
+
67
+ context 'with an error 403' do
68
+ let(:http_status) { 403 }
69
+
70
+ it 'raises a forbidden error' do
71
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::Forbidden, 'Error Message')
72
+ end
73
+ end
74
+
75
+ context 'with an error 404' do
76
+ let(:http_status) { 404 }
77
+
78
+ it 'raises a not found error' do
79
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::NotFound, 'Error Message')
80
+ end
81
+ end
82
+
83
+ context 'with an error 405' do
84
+ let(:http_status) { 405 }
85
+
86
+ it 'raises a method not allowed error' do
87
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::MethodNotAllowed, 'Error Message')
88
+ end
89
+ end
90
+
91
+ context 'with an error 406' do
92
+ let(:http_status) { 406 }
93
+
94
+ it 'raises a not acceptable error' do
95
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::NotAcceptable, 'Error Message')
37
96
  end
97
+ end
98
+
99
+ context 'with an error 409' do
100
+ let(:http_status) { 409 }
101
+
102
+ it 'raises a conflict error' do
103
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::Conflict, 'Error Message')
104
+ end
105
+ end
106
+
107
+ context 'with an error 415' do
108
+ let(:http_status) { 415 }
109
+
110
+ it 'raises an unsupported media type error' do
111
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::UnsupportedMediaType, 'Error Message')
112
+ end
113
+ end
114
+
115
+ context 'with an error 422' do
116
+ let(:http_status) { 422 }
117
+
118
+ it 'raises an unprocessable entity error' do
119
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::UnprocessableEntity, 'Error Message')
120
+ end
121
+ end
122
+
123
+ context 'with an error 500' do
124
+ let(:http_status) { 500 }
125
+
126
+ it 'raises an internal server error' do
127
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::InternalServerError, 'Error Message')
128
+ end
129
+ end
130
+
131
+ context 'with an error 501' do
132
+ let(:http_status) { 501 }
133
+
134
+ it 'raises a not implemented error' do
135
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::NotImplemented, 'Error Message')
136
+ end
137
+ end
138
+
139
+ context 'with an error 502' do
140
+ let(:http_status) { 502 }
141
+
142
+ it 'raises a bad gateway error' do
143
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::BadGateway, 'Error Message')
144
+ end
145
+ end
146
+
147
+ context 'with an error 503' do
148
+ let(:http_status) { 503 }
149
+
150
+ it 'raises a service unavailable error' do
151
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::ServiceUnavailable, 'Error Message')
152
+ end
153
+ end
154
+ context 'with 5xx error' do
155
+ let(:http_status) { 505 }
38
156
 
39
- it 'raises the Default error' do
40
- expect { error_handler.raise_errors }.to raise_error(RDStation::Error::Default, 'Error Message') do |error|
41
- expect(error.details).to be
42
- expect(error.headers).to be
43
- expect(error.body).to be
44
- expect(error.http_status).to be
45
- end
157
+ it 'raises a server error' do
158
+ expect { error_handler.raise_error }.to raise_error(RDStation::Error::ServerError, 'Error Message')
46
159
  end
47
160
  end
48
161
  end
@@ -1,13 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe RDStation::Events do
4
- let(:valid_auth_token) { 'valid_auth_token' }
5
- let(:invalid_auth_token) { 'invalid_auth_token' }
6
- let(:expired_auth_token) { 'expired_auth_token' }
4
+ let(:valid_access_token) { 'valid_access_token' }
5
+ let(:invalid_access_token) { 'invalid_access_token' }
6
+ let(:expired_access_token) { 'expired_access_token' }
7
7
 
8
- let(:event_with_valid_token) { described_class.new(valid_auth_token) }
9
- let(:event_with_expired_token) { described_class.new(expired_auth_token) }
10
- let(:event_with_invalid_token) { described_class.new(invalid_auth_token) }
8
+ let(:event_with_valid_token) do
9
+ described_class.new(authorization_header: RDStation::AuthorizationHeader.new(access_token: valid_access_token))
10
+ end
11
+ let(:event_with_expired_token) do
12
+ described_class.new(authorization_header: RDStation::AuthorizationHeader.new(access_token: expired_access_token))
13
+ end
14
+ let(:event_with_invalid_token) do
15
+ described_class.new(authorization_header: RDStation::AuthorizationHeader.new(access_token: invalid_access_token))
16
+ end
11
17
 
12
18
  let(:events_endpoint) { 'https://api.rd.services/platform/events' }
13
19
 
@@ -45,21 +51,21 @@ RSpec.describe RDStation::Events do
45
51
 
46
52
  let(:valid_headers) do
47
53
  {
48
- 'Authorization' => "Bearer #{valid_auth_token}",
54
+ 'Authorization' => "Bearer #{valid_access_token}",
49
55
  'Content-Type' => 'application/json'
50
56
  }
51
57
  end
52
58
 
53
59
  let(:invalid_token_headers) do
54
60
  {
55
- 'Authorization' => "Bearer #{invalid_auth_token}",
61
+ 'Authorization' => "Bearer #{invalid_access_token}",
56
62
  'Content-Type' => 'application/json'
57
63
  }
58
64
  end
59
65
 
60
66
  let(:expired_token_headers) do
61
67
  {
62
- 'Authorization' => "Bearer #{expired_auth_token}",
68
+ 'Authorization' => "Bearer #{expired_access_token}",
63
69
  'Content-Type' => 'application/json'
64
70
  }
65
71
  end