checkr-canada 0.1.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.
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Criminal Records" do
6
+ let(:client) { Checkr::Canada::Client.new("test_api_key") }
7
+
8
+ describe "#create" do
9
+ let(:answer) do
10
+ File.read("./spec/fixtures/criminal_record.json")
11
+ end
12
+
13
+ let(:params) do
14
+ {
15
+ candidate_id: 'abc123xyz',
16
+ offence: "Pissing in the street",
17
+ sentence_date: Time.new(2001, 3, 21, 14, 0, 0),
18
+ location: "Moscow"
19
+ }
20
+ end
21
+
22
+ subject(:doc) { client.criminal_records.create(**params) }
23
+
24
+ before do
25
+ stub_request(:post, /candidates\/abc123xyz\/criminal_records/)
26
+ .to_return(
27
+ body: answer,
28
+ status: 201
29
+ )
30
+ end
31
+
32
+ it "makes request" do
33
+ subject
34
+
35
+ expect(
36
+ a_request(:post, "https://api.checkr.com/ca/v1/candidates/abc123xyz/criminal_records")
37
+ ).to have_been_made
38
+ end
39
+
40
+ it "returns a record", :aggregate_failures do
41
+ expect(doc.sentence_date).to eq "2001-03-21"
42
+ expect(doc.created_at).to be_a(DateTime)
43
+ end
44
+
45
+ it "raises when missing params" do
46
+ params.delete(:offence)
47
+
48
+ expect { subject }.to raise_error(ArgumentError)
49
+ end
50
+
51
+ it "raises when missing candidate_id" do
52
+ params.delete(:candidate_id)
53
+
54
+ expect { subject }.to raise_error(ArgumentError)
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Documents" do
6
+ let(:client) { Checkr::Canada::Client.new("test_api_key") }
7
+
8
+ describe "#upload" do
9
+ let(:answer) do
10
+ File.read("./spec/fixtures/document.json")
11
+ end
12
+
13
+ let(:params) do
14
+ {
15
+ candidate_id: 'abc123xyz',
16
+ type: "identification",
17
+ url: "http://example.com/image.png",
18
+ filename: "test.png"
19
+ }
20
+ end
21
+
22
+ subject(:doc) { client.documents.upload(**params) }
23
+
24
+ before do
25
+ stub_request(:post, /candidates\/abc123xyz\/documents/)
26
+ .to_return(
27
+ body: answer,
28
+ status: 201
29
+ )
30
+ end
31
+
32
+ it "makes request" do
33
+ subject
34
+
35
+ expect(
36
+ a_request(:post, "https://api.checkr.com/ca/v1/candidates/abc123xyz/documents")
37
+ ).to have_been_made
38
+ end
39
+
40
+ it "returns a document", :aggregate_failures do
41
+ expect(doc.filename).to eq "test.png"
42
+ expect(doc.created_at).to be_a(DateTime)
43
+ end
44
+
45
+ it "raises when missing params" do
46
+ params.delete(:type)
47
+
48
+ expect { subject }.to raise_error(ArgumentError)
49
+ end
50
+
51
+ it "raises when unknown type" do
52
+ params[:type] = "image"
53
+
54
+ expect { subject }.to raise_error(TypeError)
55
+ end
56
+
57
+ it "raises when missing candidate_id" do
58
+ params.delete(:candidate_id)
59
+
60
+ expect { subject }.to raise_error(ArgumentError)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,150 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Reports" do
6
+ let(:client) { Checkr::Canada::Client.new("test_api_key") }
7
+
8
+ describe "#all" do
9
+ let(:answer) { { data: [], object: "list", count: 0 }.to_json }
10
+ let(:options) { {} }
11
+
12
+ subject { client.reports.all(**options) }
13
+
14
+ before do
15
+ stub_request(:get, /reports/)
16
+ .to_return(
17
+ body: answer
18
+ )
19
+ end
20
+
21
+ it "builds response", :aggregate_failures do
22
+ expect(subject.count).to eq 0
23
+ expect(subject.object).to eq 'list'
24
+ expect(subject.next_href).to be_nil
25
+ expect(subject.previous_href).to be_nil
26
+ expect(subject.data.size).to eq 0
27
+ end
28
+
29
+ context "with params" do
30
+ let(:options) { { per_page: 1, page: 2, foo: "bar" } }
31
+
32
+ it "recognizes only valid params" do
33
+ subject
34
+
35
+ expect(
36
+ a_request(:get, "https://api.checkr.com/ca/v1/reports")
37
+ .with(query: { per_page: 1, page: 2 })
38
+ ).to have_been_made
39
+ end
40
+ end
41
+
42
+ context "with data" do
43
+ let(:answer) do
44
+ File.read("./spec/fixtures/reports.json")
45
+ end
46
+
47
+ it "builds report", :aggregate_failures do
48
+ expect(subject.data.size).to eq 1
49
+
50
+ report = subject.data.first
51
+
52
+ expect(report.package).to eq "criminal"
53
+ expect(report.created_at).to be_a(DateTime)
54
+ expect(report.created_at.to_date).to eq Date.new(2017, 5, 2)
55
+ expect(report.candidate_id).to eq "7f23225f47ee143389595481"
56
+ end
57
+ end
58
+ end
59
+
60
+ describe "#get" do
61
+ let(:answer) do
62
+ File.read("./spec/fixtures/report.json")
63
+ end
64
+
65
+ subject(:report) { client.reports.get('123abc') }
66
+
67
+ before do
68
+ stub_request(:get, /reports\/123/)
69
+ .to_return(
70
+ body: answer
71
+ )
72
+ end
73
+
74
+ it "makes request" do
75
+ subject
76
+
77
+ expect(
78
+ a_request(:get, "https://api.checkr.com/ca/v1/reports/123abc")
79
+ ).to have_been_made
80
+ end
81
+
82
+ it "builds report", :aggregate_failures do
83
+ expect(report.package).to eq "criminal"
84
+ expect(report.created_at).to be_a(DateTime)
85
+ expect(report.created_at.to_date).to eq Date.new(2017, 5, 2)
86
+ expect(report.candidate_id).to eq "7f23225f47ee143389595481"
87
+ end
88
+
89
+ context "not found" do
90
+ before do
91
+ stub_request(:get, /reports\/123/)
92
+ .to_return(
93
+ body: { message: 'Not found' }.to_json,
94
+ status: 404
95
+ )
96
+ end
97
+
98
+ it "raises error" do
99
+ expect { subject }.to raise_error(Evil::Client::Operation::ResponseError)
100
+ end
101
+ end
102
+ end
103
+
104
+ describe "#create" do
105
+ let(:answer) do
106
+ File.read("./spec/fixtures/report.json")
107
+ end
108
+
109
+ let(:params) do
110
+ {
111
+ candidate_id: "abc123",
112
+ package: "criminal"
113
+ }
114
+ end
115
+
116
+ subject(:report) { client.reports.create(params) }
117
+
118
+ before do
119
+ stub_request(:post, /reports/)
120
+ .to_return(
121
+ body: answer,
122
+ status: 201
123
+ )
124
+ end
125
+
126
+ it "makes request" do
127
+ subject
128
+
129
+ expect(
130
+ a_request(:post, "https://api.checkr.com/ca/v1/candidates/abc123/reports")
131
+ ).to have_been_made
132
+ end
133
+
134
+ it "returns a report", :aggregate_failures do
135
+ expect(report.package).to eq "criminal"
136
+ end
137
+
138
+ it "raises when unknown package" do
139
+ params[:package] = "test"
140
+
141
+ expect { subject }.to raise_error(Dry::Types::ConstraintError)
142
+ end
143
+
144
+ it "raises when missing candidate_id" do
145
+ params.delete(:candidate_id)
146
+
147
+ expect { subject }.to raise_error(ArgumentError)
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe Checkr::Canada::Types do
6
+ describe "Status" do
7
+ subject { described_class::Status }
8
+
9
+ it "accepts", :aggregate_failures do
10
+ expect(subject["clear"]).to eq "clear"
11
+ expect(subject["pending"]).to eq "pending"
12
+ expect(subject["consider"]).to eq "consider"
13
+ expect(subject["suspended"]).to eq "suspended"
14
+ end
15
+
16
+ it "rejects" do
17
+ expect { subject["foobar"] }.to raise_error(Dry::Types::ConstraintError)
18
+ end
19
+ end
20
+
21
+ describe "Date" do
22
+ subject { described_class::Date }
23
+
24
+ it "accepts valid string" do
25
+ expect(subject["1989-07-01"]).to eq "1989-07-01"
26
+ end
27
+
28
+ it "accepts Date" do
29
+ expect(subject[Date.new(1988, 2, 12)]).to eq "1988-02-12"
30
+ end
31
+
32
+ it "accepts Time" do
33
+ expect(subject[Time.new(1990, 12, 31, 12, 0, 0)]).to eq "1990-12-31"
34
+ end
35
+
36
+ it "rejects invalid string" do
37
+ expect { subject["today"] }.to raise_error(Dry::Types::ConstraintError)
38
+ end
39
+ end
40
+
41
+ describe "Gender" do
42
+ subject { described_class::Gender }
43
+
44
+ it "accepts", :aggregate_failures do
45
+ expect(subject["M"]).to eq "M"
46
+ expect(subject["F"]).to eq "F"
47
+ end
48
+
49
+ it "rejects" do
50
+ expect { subject["Any"] }.to raise_error(Dry::Types::ConstraintError)
51
+ end
52
+ end
53
+
54
+ describe "Package" do
55
+ subject { described_class::Package }
56
+
57
+ it "accepts", :aggregate_failures do
58
+ expect(subject["mvr"]).to eq "mvr"
59
+ expect(subject["criminal"]).to eq "criminal"
60
+ expect(subject["criminal_mvr"]).to eq "criminal_mvr"
61
+ end
62
+
63
+ it "rejects" do
64
+ expect { subject["stupid"] }.to raise_error(Dry::Types::ConstraintError)
65
+ end
66
+ end
67
+
68
+ describe "DocumentType" do
69
+ subject { described_class::DocumentType }
70
+
71
+ it "accepts", :aggregate_failures do
72
+ expect(subject["identification"]).to eq "identification"
73
+ expect(subject["consent"]).to eq "consent"
74
+ end
75
+
76
+ it "rejects" do
77
+ expect { subject["image"] }.to raise_error(Dry::Types::ConstraintError)
78
+ end
79
+ end
80
+
81
+ describe "Province" do
82
+ subject { described_class::Province }
83
+
84
+ it "accepts", :aggregate_failures do
85
+ # rubocop: disable Style/WordArray
86
+ [
87
+ 'AB',
88
+ 'BC',
89
+ 'MB',
90
+ 'NB',
91
+ 'NL',
92
+ 'NT',
93
+ 'NS',
94
+ 'NU',
95
+ 'ON',
96
+ 'PE',
97
+ 'QC',
98
+ 'SK',
99
+ 'YT'
100
+ ].each do |province|
101
+ expect(subject[province]).to eq province
102
+ end
103
+ end
104
+
105
+ it "rejects" do
106
+ expect { subject["New York"] }.to raise_error(Dry::Types::ConstraintError)
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe Checkr::Canada do
6
+ it "has a version number" do
7
+ expect(Checkr::Canada::VERSION).not_to be nil
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ {
2
+ "id": "123123zya",
3
+ "object": "address",
4
+ "uri": "/ca/v1/addresses/123123zya",
5
+ "created_at": "2017-03-23T03:02:52Z",
6
+ "updated_at": "2017-03-23T03:02:52Z",
7
+ "street1": "Mission st",
8
+ "street2": "4-2",
9
+ "city": "San Francisco",
10
+ "region": "BC",
11
+ "country": "CA",
12
+ "postal_code": "BC341",
13
+ "start_date": "2017-01-02"
14
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "ca1b9ca32fc52fd902a57487",
3
+ "custom_id": null,
4
+ "birth_country": "CA",
5
+ "birth_place": "Toronto",
6
+ "dob": "1975-03-19",
7
+ "driver_license_number": null,
8
+ "driver_license_province": null,
9
+ "email": "testonboard@test.com",
10
+ "entry_date": null,
11
+ "first_name": "Test",
12
+ "gender": "M",
13
+ "last_name": "Candidate",
14
+ "middle_name": "",
15
+ "mother_maiden_name": null,
16
+ "nationality": null,
17
+ "object": "test_candidate",
18
+ "phone": "000-000-0002",
19
+ "province": null,
20
+ "uri": "/ca/v1/candidates/ca1b9ca32fc52fd902a57487",
21
+ "created_at": "2017-03-23T03:02:52Z",
22
+ "address_ids": [],
23
+ "disclosed_criminal_record_ids": []
24
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "object": "list",
3
+ "count": 1,
4
+ "data": [
5
+ {
6
+ "id": "ca1b9ca32fc52fd902a57487",
7
+ "custom_id": null,
8
+ "birth_country": "CA",
9
+ "birth_place": "Toronto",
10
+ "dob": "1975-03-19",
11
+ "driver_license_number": null,
12
+ "driver_license_province": null,
13
+ "email": "testonboard@test.com",
14
+ "entry_date": null,
15
+ "first_name": "Test",
16
+ "gender": "M",
17
+ "last_name": "Candidate",
18
+ "middle_name": "",
19
+ "mother_maiden_name": null,
20
+ "nationality": null,
21
+ "object": "test_candidate",
22
+ "phone": "000-000-0002",
23
+ "province": null,
24
+ "uri": "/ca/v1/candidates/ca1b9ca32fc52fd902a57487",
25
+ "created_at": "2017-03-23T03:02:52Z",
26
+ "address_ids": [],
27
+ "disclosed_criminal_record_ids": []
28
+ }
29
+ ]
30
+ }