onfido 0.14.0 → 1.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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -0
  3. data/.travis.yml +3 -7
  4. data/CHANGELOG.md +21 -0
  5. data/LICENSE +2 -1
  6. data/README.md +59 -73
  7. data/lib/onfido.rb +1 -1
  8. data/lib/onfido/api.rb +4 -4
  9. data/lib/onfido/configuration.rb +4 -4
  10. data/lib/onfido/resource.rb +3 -6
  11. data/lib/onfido/resources/address.rb +1 -4
  12. data/lib/onfido/resources/applicant.rb +6 -6
  13. data/lib/onfido/resources/check.rb +10 -14
  14. data/lib/onfido/resources/document.rb +11 -11
  15. data/lib/onfido/resources/extraction.rb +9 -0
  16. data/lib/onfido/resources/live_photo.rb +9 -14
  17. data/lib/onfido/resources/live_video.rb +5 -8
  18. data/lib/onfido/resources/report.rb +8 -9
  19. data/lib/onfido/resources/sdk_token.rb +3 -5
  20. data/lib/onfido/resources/webhook.rb +11 -9
  21. data/lib/onfido/version.rb +1 -1
  22. data/onfido.gemspec +6 -7
  23. data/spec/integrations/address_spec.rb +1 -0
  24. data/spec/integrations/applicant_spec.rb +21 -37
  25. data/spec/integrations/check_spec.rb +13 -23
  26. data/spec/integrations/document_spec.rb +16 -17
  27. data/spec/integrations/exceptions_spec.rb +12 -14
  28. data/spec/integrations/extraction_spec.rb +19 -0
  29. data/spec/integrations/live_photo_spec.rb +12 -13
  30. data/spec/integrations/live_video_spec.rb +7 -10
  31. data/spec/integrations/report_spec.rb +11 -13
  32. data/spec/integrations/sdk_token_spec.rb +5 -5
  33. data/spec/integrations/webhook_spec.rb +35 -20
  34. data/spec/onfido/resource_spec.rb +10 -14
  35. data/spec/onfido_spec.rb +9 -10
  36. data/spec/support/fake_onfido_api.rb +53 -78
  37. data/spec/support/fixtures/applicant.json +21 -42
  38. data/spec/support/fixtures/check.json +4 -4
  39. data/spec/support/fixtures/checks.json +4 -4
  40. data/spec/support/fixtures/document.json +2 -2
  41. data/spec/support/fixtures/documents.json +8 -8
  42. data/spec/support/fixtures/extraction.json +23 -0
  43. data/spec/support/fixtures/live_photo.json +3 -3
  44. data/spec/support/fixtures/live_photos.json +6 -6
  45. data/spec/support/fixtures/live_video.json +3 -3
  46. data/spec/support/fixtures/live_videos.json +4 -4
  47. data/spec/support/fixtures/not_scheduled_for_deletion_error.json +7 -0
  48. data/spec/support/fixtures/report.json +4 -4
  49. data/spec/support/fixtures/reports.json +8 -8
  50. data/spec/support/fixtures/webhook.json +6 -5
  51. data/spec/support/fixtures/webhooks.json +17 -12
  52. metadata +19 -40
  53. data/lib/onfido/resources/report_type_group.rb +0 -11
  54. data/spec/integrations/report_type_group_spec.rb +0 -19
  55. data/spec/support/fixtures/check_with_expanded_reports.json +0 -30
  56. data/spec/support/fixtures/checks_with_expanded_reports.json +0 -34
  57. data/spec/support/fixtures/report_type_group.json +0 -25
  58. data/spec/support/fixtures/report_type_groups.json +0 -30
@@ -6,15 +6,15 @@ describe Onfido::Document do
6
6
  describe '#create' do
7
7
  let(:params) do
8
8
  {
9
- type: 'passport',
10
- side: 'back',
11
- file: file
9
+ applicant_id: '1030303-123123-123123',
10
+ type: 'driving_licence',
11
+ file: file,
12
+ side: 'front'
12
13
  }
13
14
  end
14
- let(:applicant_id) { '1030303-123123-123123' }
15
15
 
16
16
  context 'with a File-like object to upload' do
17
- let(:file) { Tempfile.new(['passport', '.jpg']) }
17
+ let(:file) { Tempfile.new(['driving_licence', '.jpg']) }
18
18
 
19
19
  after do
20
20
  file.close
@@ -22,7 +22,8 @@ describe Onfido::Document do
22
22
  end
23
23
 
24
24
  it 'creates a new document' do
25
- response = document.create('foobar', params)
25
+ response = document.create(**params)
26
+
26
27
  expect(response['id']).not_to be_nil
27
28
  end
28
29
  end
@@ -31,37 +32,35 @@ describe Onfido::Document do
31
32
  let(:file) { 'https://onfido.com/images/logo.png' }
32
33
 
33
34
  it 'raises an ArgumentError' do
34
- expect { document.create('foobar', params) }.
35
+ expect { document.create(**params) }.
35
36
  to raise_error(ArgumentError, /must be a `File`-like object/)
36
37
  end
37
38
  end
38
39
  end
39
40
 
40
41
  describe '#find' do
41
- let(:applicant_id) { '1030303-123123-123123' }
42
- let(:document_id) { '7568415-123123-123123' }
43
-
44
42
  it 'returns the expected document' do
45
- response = document.find(applicant_id, document_id)
43
+ document_id = '7568415-123123-123123'
44
+ response = document.find(document_id)
45
+
46
46
  expect(response['id']).to eq(document_id)
47
47
  end
48
48
  end
49
49
 
50
50
  describe '#all' do
51
- let(:applicant_id) { '1030303-123123-123123' }
52
-
53
51
  it 'returns list of documents' do
52
+ applicant_id = '1030303-123123-123123'
54
53
  response = document.all(applicant_id)
54
+
55
55
  expect(response['documents']).not_to be_empty
56
56
  end
57
57
  end
58
58
 
59
59
  describe '#download' do
60
- let(:applicant_id) { '1030303-123123-123123' }
61
- let(:document_id) { '1212121-123123-123123' }
62
-
63
60
  it 'returns the file data' do
64
- response = document.download(applicant_id, document_id)
61
+ document_id = '1212121-123123-123123'
62
+ response = document.download(document_id)
63
+
65
64
  expect(response).not_to be_nil
66
65
  end
67
66
  end
@@ -1,34 +1,32 @@
1
1
  describe Onfido::Resource do
2
2
  let(:resource) { described_class.new }
3
- let(:url) { Onfido.endpoint + path }
4
3
  let(:api_key) { 'some_key' }
5
- let(:payload) { { postcode: 'SE1 4NG' } }
6
4
 
7
5
  before { allow(Onfido).to receive(:api_key).and_return(api_key) }
8
6
 
9
7
  context '4xx response' do
10
- let(:path) { '4xx_response' }
11
-
12
8
  it 'raises a custom error' do
13
- expect { resource.get(url: url, payload: payload) }.
9
+ path = '4xx_response'
10
+
11
+ expect { resource.get(path: path) }.
14
12
  to raise_error(Onfido::RequestError, 'Something went wrong')
15
13
  end
16
14
  end
17
15
 
18
16
  context 'unexpected error format' do
19
- let(:path) { 'unexpected_error_format' }
20
-
21
17
  it 'raises a custom error' do
22
- expect { resource.get(url: url, payload: payload) }.
18
+ path = 'unexpected_error_format'
19
+
20
+ expect { resource.get(path: path) }.
23
21
  to raise_error(Onfido::RequestError, /response code was 400/)
24
22
  end
25
23
  end
26
24
 
27
25
  context 'unparseable JSON 5xx' do
28
- let(:path) { 'unparseable_response' }
29
-
30
26
  it 'raises a server error' do
31
- expect { resource.get(url: url, payload: payload) }.
27
+ path = 'unparseable_response'
28
+
29
+ expect { resource.get(path: path) }.
32
30
  to raise_error(Onfido::ServerError, /response code was 504/)
33
31
  end
34
32
  end
@@ -41,7 +39,7 @@ describe Onfido::Resource do
41
39
  end
42
40
 
43
41
  it 'raises a ConnectionError' do
44
- expect { resource.get(url: Onfido.endpoint, payload: payload) }.
42
+ expect { resource.get(path: Onfido.endpoint) }.
45
43
  to raise_error(Onfido::ConnectionError, /Could not connect/)
46
44
  end
47
45
  end
@@ -54,7 +52,7 @@ describe Onfido::Resource do
54
52
  end
55
53
 
56
54
  it 'raises a ConnectionError' do
57
- expect { resource.get(url: Onfido.endpoint, payload: payload) }.
55
+ expect { resource.get(path: Onfido.endpoint) }.
58
56
  to raise_error(Onfido::ConnectionError, /connection to the server/)
59
57
  end
60
58
  end
@@ -67,7 +65,7 @@ describe Onfido::Resource do
67
65
  end
68
66
 
69
67
  it 'raises a ConnectionError' do
70
- expect { resource.get(url: Onfido.endpoint, payload: payload) }.
68
+ expect { resource.get(path: Onfido.endpoint) }.
71
69
  to raise_error(Onfido::ConnectionError, /SSL certificate/)
72
70
  end
73
71
  end
@@ -0,0 +1,19 @@
1
+ require 'tempfile'
2
+
3
+ describe Onfido::Extraction do
4
+ subject(:extraction) { described_class.new }
5
+
6
+ describe '#create' do
7
+ let(:params) do
8
+ {
9
+ document_id: '7568415-123123-123123'
10
+ }
11
+ end
12
+
13
+ it 'creates a new extraction' do
14
+ response = extraction.create(params)
15
+
16
+ expect(response['document_id']).to eq('7568415-123123-123123')
17
+ end
18
+ end
19
+ end
@@ -4,7 +4,7 @@ describe Onfido::LivePhoto do
4
4
  subject(:live_photo) { described_class.new }
5
5
 
6
6
  describe '#create' do
7
- let(:params) { { file: file } }
7
+ let(:params) { { applicant_id: '123456', file: file } }
8
8
 
9
9
  context 'with a File-like object to upload' do
10
10
  let(:file) { Tempfile.new(['passport', '.jpg']) }
@@ -15,7 +15,8 @@ describe Onfido::LivePhoto do
15
15
  end
16
16
 
17
17
  it 'creates a new photo' do
18
- response = live_photo.create('foobar', params)
18
+ response = live_photo.create(**params)
19
+
19
20
  expect(response['id']).not_to be_nil
20
21
  end
21
22
  end
@@ -24,37 +25,35 @@ describe Onfido::LivePhoto do
24
25
  let(:file) { 'https://onfido.com/images/photo.jpg' }
25
26
 
26
27
  it 'raises an ArgumentError' do
27
- expect { live_photo.create('foobar', params) }.
28
+ expect { live_photo.create(**params) }.
28
29
  to raise_error(ArgumentError, /must be a `File`-like object/)
29
30
  end
30
31
  end
31
32
  end
32
33
 
33
34
  describe '#find' do
34
- let(:applicant_id) { '1030303-123123-123123' }
35
- let(:live_photo_id) { '3538c8f6-fdce-4745-9d34-fc246bc05aa1' }
36
-
37
35
  it 'returns the expected live photo' do
38
- response = live_photo.find(applicant_id, live_photo_id)
36
+ live_photo_id = '3538c8f6-fdce-4745-9d34-fc246bc05aa1'
37
+ response = live_photo.find(live_photo_id)
38
+
39
39
  expect(response['id']).to eq(live_photo_id)
40
40
  end
41
41
  end
42
42
 
43
43
  describe '#all' do
44
- let(:applicant_id) { '1030303-123123-123123' }
45
-
46
44
  it 'returns list of documents' do
45
+ applicant_id = '1030303-123123-123123'
47
46
  response = live_photo.all(applicant_id)
47
+
48
48
  expect(response['live_photos']).not_to be_empty
49
49
  end
50
50
  end
51
51
 
52
52
  describe '#download' do
53
- let(:applicant_id) { '1030303-123123-123123' }
54
- let(:live_photo_id) { '3538c8f6-fdce-4745-9d34-fc246bc05aa1' }
55
-
56
53
  it 'returns the file data' do
57
- response = live_photo.download(applicant_id, live_photo_id)
54
+ live_photo_id = '3538c8f6-fdce-4745-9d34-fc246bc05aa1'
55
+ response = live_photo.download(live_photo_id)
56
+
58
57
  expect(response).not_to be_nil
59
58
  end
60
59
  end
@@ -2,32 +2,29 @@ require 'tempfile'
2
2
 
3
3
  describe Onfido::LiveVideo do
4
4
  subject(:live_video) { described_class.new }
5
+ let(:live_video_id) { 'c9701e9b-83aa-442f-995b-20320ee8fb01' }
5
6
 
6
7
  describe '#find' do
7
- let(:applicant_id) { '1030303-123123-123123' }
8
- let(:live_video_id) { 'c9701e9b-83aa-442f-995b-20320ee8fb01' }
9
-
10
8
  it 'returns the expected live photo' do
11
- response = live_video.find(applicant_id, live_video_id)
9
+ response = live_video.find(live_video_id)
10
+
12
11
  expect(response['id']).to eq(live_video_id)
13
12
  end
14
13
  end
15
14
 
16
15
  describe '#all' do
17
- let(:applicant_id) { '1030303-123123-123123' }
18
-
19
16
  it 'returns list of documents' do
17
+ applicant_id = '1030303-123123-123123'
20
18
  response = live_video.all(applicant_id)
19
+
21
20
  expect(response['live_videos']).not_to be_empty
22
21
  end
23
22
  end
24
23
 
25
24
  describe '#download' do
26
- let(:applicant_id) { '1030303-123123-123123' }
27
- let(:live_video_id) { 'c9701e9b-83aa-442f-995b-20320ee8fb01' }
28
-
29
25
  it 'returns the file data' do
30
- response = live_video.download(applicant_id, live_video_id)
26
+ response = live_video.download(live_video_id)
27
+
31
28
  expect(response).not_to be_nil
32
29
  end
33
30
  end
@@ -1,38 +1,36 @@
1
1
  describe Onfido::Report do
2
2
  subject(:report) { described_class.new }
3
- let(:check_id) { '8546921-123123-123123' }
4
-
5
3
  describe '#find' do
6
- let(:report_id) { '6951786-123123-422221' }
7
-
8
4
  it 'returns a report for an existing check' do
9
- response = report.find(check_id, report_id)
5
+ report_id = '6951786-123123-422221'
6
+ response = report.find(report_id)
7
+
10
8
  expect(response['id']).to eq(report_id)
11
9
  end
12
10
  end
13
11
 
14
12
  describe '#all' do
15
13
  it 'lists all reports for an existing check' do
14
+ check_id = '8546921-123123-123123'
16
15
  response = report.all(check_id)
16
+
17
17
  expect(response['reports'].count).to eq(2)
18
18
  end
19
19
  end
20
20
 
21
21
  describe '#resume' do
22
- let(:report_id) { '6951786-123123-422221' }
23
- let(:check_id) { '1212121-123123-422221' }
24
-
25
22
  it 'returns a success response' do
26
- expect { report.resume(check_id, report_id) }.not_to raise_error
23
+ report_id = '6951786-123123-422221'
24
+
25
+ expect { report.resume(report_id) }.not_to raise_error
27
26
  end
28
27
  end
29
28
 
30
29
  describe '#cancel' do
31
- let(:report_id) { '6951786-123123-422221' }
32
- let(:check_id) { '1212121-123123-422221' }
33
-
34
30
  it 'returns a success response' do
35
- expect { report.cancel(check_id, report_id) }.not_to raise_error
31
+ report_id = '6951786-123123-422221'
32
+
33
+ expect { report.cancel(report_id) }.not_to raise_error
36
34
  end
37
35
  end
38
36
  end
@@ -1,13 +1,13 @@
1
1
  describe Onfido::SdkToken do
2
2
  subject(:sdk_token) { described_class.new }
3
- let(:applicant_id) { '61f659cb-c90b-4067-808a-6136b5c01351' }
4
- let(:referrer) { 'http://*.mywebsite.com/*' }
5
3
 
6
4
  describe '#create' do
7
- let(:params) { { applicant_id: applicant_id, referrer: referrer } }
8
-
9
5
  it 'creates a new SDK token for the applicant' do
10
- response = sdk_token.create(params)
6
+ applicant_id = '61f659cb-c90b-4067-808a-6136b5c01351'
7
+ referrer = 'http://*.mywebsite.com/*'
8
+
9
+ response = sdk_token.create(applicant_id: applicant_id, referrer: referrer)
10
+
11
11
  expect(response['token']).not_to be_nil
12
12
  end
13
13
  end
@@ -1,47 +1,58 @@
1
1
  describe Onfido::Webhook do
2
2
  subject(:webhook) { described_class.new }
3
- let(:params) do
4
- {
5
- "url" => "https://webhookendpoint.url",
6
- "enabled" => true,
7
- "events" => [
8
- "report completion",
9
- "report withdrawal",
10
- "check completion",
11
- "check in progress"
12
- ]
13
- }
14
- end
15
3
 
16
4
  describe "#create" do
17
- it "cretes the webhook" do
18
- response = webhook.create(params)
5
+ let(:params) do
6
+ {
7
+ url: "https://webhookendpoint.url",
8
+ enabled: true,
9
+ events: [
10
+ "report.completed",
11
+ "check.completed"
12
+ ]
13
+ }
14
+ end
15
+
16
+ it "creates the webhook" do
17
+ response = webhook.create(**params)
18
+
19
19
  expect(response['id']).to_not be_nil
20
20
  end
21
21
 
22
22
  it "responds with the right url" do
23
- response = webhook.create(params)
24
- expect(response["url"]).to eq params["url"]
23
+ response = webhook.create(**params)
24
+
25
+ expect(response["url"]).to eq params[:url]
25
26
  end
26
27
  end
27
28
 
28
29
  describe '#find' do
29
- let(:webhook_id) { 'fcb73186-0733-4f6f-9c57-d9d5ef979443' }
30
-
31
30
  it 'returns the webhook' do
31
+ webhook_id = 'fcb73186-0733-4f6f-9c57-d9d5ef979443'
32
+
32
33
  response = webhook.find(webhook_id)
34
+
33
35
  expect(response['id']).to eq(webhook_id)
34
36
  end
35
37
  end
36
38
 
39
+ describe "#destroy" do
40
+ it "removes the webhook" do
41
+ webhook_id = 'fcb73186-0733-4f6f-9c57-d9d5ef979443'
42
+ expect { webhook.destroy(webhook_id) }.not_to raise_error
43
+ end
44
+ end
45
+
37
46
  describe "#all" do
38
47
  it "returns all the registered webhooks" do
39
48
  response = webhook.all
49
+
40
50
  expect(response["webhooks"].count).to eq 2
41
51
  end
42
52
 
43
53
  it "returns with id" do
44
54
  response = webhook.all
55
+
45
56
  expect(response["webhooks"][0]["id"]).to_not be_nil
46
57
  expect(response["webhooks"][1]["id"]).to_not be_nil
47
58
  end
@@ -53,13 +64,17 @@ describe Onfido::Webhook do
53
64
  end
54
65
 
55
66
  let(:request_body) { '{"foo":"bar"}' }
56
- let(:request_signature) { 'fdab9db604d33297741b43b9fc9536028d09dca3' }
67
+ let(:request_signature) do
68
+ '89e60408fec20bfb26bb0f993d5e88307818982f50f23b361a00d679bae8b1dc'
69
+ end
57
70
  let(:token) { 'very_secret_token' }
58
71
 
59
72
  it { is_expected.to be(true) }
60
73
 
61
74
  context "with an invalid signature" do
62
- let(:request_signature) { '2f3d7727ff9a32a7c87072ce514df1f6d3228bec' }
75
+ let(:request_signature) do
76
+ 's21fd54ew2w1f5d15642132f3d7727ff9a32a7c87072ce514df1f6d3228bec'
77
+ end
63
78
  it { is_expected.to be(false) }
64
79
  end
65
80
 
@@ -3,7 +3,7 @@ require 'onfido/errors/connection_error'
3
3
  describe Onfido::Resource do
4
4
  subject(:resource) { described_class.new }
5
5
 
6
- let(:endpoint) { 'https://api.onfido.com/v2/' }
6
+ let(:endpoint) { 'https://api.onfido.com/v3/' }
7
7
  let(:path) { 'addresses/pick' }
8
8
  let(:url) { endpoint + path }
9
9
  let(:payload) { { postcode: 'SE1 4NG' } }
@@ -25,18 +25,12 @@ describe Onfido::Resource do
25
25
  before { allow(Onfido).to receive(:endpoint).and_return(endpoint) }
26
26
  before { allow(Onfido).to receive(:api_key).and_return(api_key) }
27
27
 
28
- describe '#url_for' do
29
- it 'composes the full api url' do
30
- expect(resource.url_for(path)).to eq(endpoint + path)
31
- end
32
- end
33
-
34
28
  describe '#method_missing' do
35
29
  %i(patch).each do |method|
36
30
  context "for unsupported HTTP method: #{method}" do
37
31
  it 'raises an error' do
38
32
  expect do
39
- resource.public_send(method, url: endpoint)
33
+ resource.public_send(method, path: endpoint)
40
34
  end.to raise_error(NoMethodError)
41
35
  end
42
36
  end
@@ -64,12 +58,13 @@ describe Onfido::Resource do
64
58
  let(:specific_api_key) { "specific_key" }
65
59
 
66
60
  it "uses that key when making the request" do
67
- resource.get(url: url, payload: payload)
61
+ resource.get(path: path, payload: payload)
68
62
 
69
63
  expect(WebMock).to have_requested(:get, url).with(
70
64
  headers: {
71
65
  'Authorization' => "Token token=#{specific_api_key}",
72
- 'Accept' => "application/json"
66
+ 'Accept' => "application/json",
67
+ 'User-Agent' => "onfido-ruby/#{Onfido::VERSION}"
73
68
  }
74
69
  )
75
70
  end
@@ -79,12 +74,13 @@ describe Onfido::Resource do
79
74
  let(:specific_api_key) { nil }
80
75
 
81
76
  it "uses the general config key when making the request" do
82
- resource.get(url: url, payload: payload)
77
+ resource.get(path: path, payload: payload)
83
78
 
84
79
  expect(WebMock).to have_requested(:get, url).with(
85
80
  headers: {
86
81
  'Authorization' => "Token token=#{api_key}",
87
- 'Accept' => "application/json"
82
+ 'Accept' => "application/json",
83
+ 'User-Agent' => "onfido-ruby/#{Onfido::VERSION}"
88
84
  }
89
85
  )
90
86
  end
@@ -113,7 +109,7 @@ describe Onfido::Resource do
113
109
  end
114
110
 
115
111
  it 'makes a request to an endpoint' do
116
- expect(resource.public_send(method, url: url, payload: payload)).
112
+ expect(resource.public_send(method, path: path, payload: payload)).
117
113
  to eq(response)
118
114
  end
119
115
  end
@@ -127,7 +123,7 @@ describe Onfido::Resource do
127
123
  end
128
124
 
129
125
  it "raises a ConnectionError" do
130
- expect { resource.public_send(method, url: url, payload: payload) }.
126
+ expect { resource.public_send(method, path: path, payload: payload) }.
131
127
  to raise_error(Onfido::ConnectionError)
132
128
  end
133
129
  end