neverbounce-api 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 (108) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +8 -0
  3. data/.gitignore +21 -0
  4. data/.rspec +4 -0
  5. data/.rubocop.yml +1161 -0
  6. data/.travis.yml +27 -0
  7. data/.yardopts +2 -0
  8. data/Gemfile +17 -0
  9. data/Gemfile.lock +48 -0
  10. data/LICENSE +9 -0
  11. data/README.md +235 -0
  12. data/lib/never_bounce/api/client.rb +259 -0
  13. data/lib/never_bounce/api/error.rb +21 -0
  14. data/lib/never_bounce/api/feature/basic_initialize.rb +20 -0
  15. data/lib/never_bounce/api/feature/eigencache.rb +48 -0
  16. data/lib/never_bounce/api/feature/igetset.rb +41 -0
  17. data/lib/never_bounce/api/feature/oattrs.rb +100 -0
  18. data/lib/never_bounce/api/feature/require_attr.rb +27 -0
  19. data/lib/never_bounce/api/request/account_info.rb +29 -0
  20. data/lib/never_bounce/api/request/base.rb +102 -0
  21. data/lib/never_bounce/api/request/jobs_create.rb +90 -0
  22. data/lib/never_bounce/api/request/jobs_delete.rb +34 -0
  23. data/lib/never_bounce/api/request/jobs_download.rb +34 -0
  24. data/lib/never_bounce/api/request/jobs_parse.rb +55 -0
  25. data/lib/never_bounce/api/request/jobs_results.rb +53 -0
  26. data/lib/never_bounce/api/request/jobs_search.rb +57 -0
  27. data/lib/never_bounce/api/request/jobs_start.rb +47 -0
  28. data/lib/never_bounce/api/request/jobs_status.rb +37 -0
  29. data/lib/never_bounce/api/request/single_check.rb +67 -0
  30. data/lib/never_bounce/api/response/account_info.rb +39 -0
  31. data/lib/never_bounce/api/response/account_info/job_counts.rb +26 -0
  32. data/lib/never_bounce/api/response/address_info.rb +43 -0
  33. data/lib/never_bounce/api/response/base.rb +15 -0
  34. data/lib/never_bounce/api/response/container.rb +126 -0
  35. data/lib/never_bounce/api/response/credits_info/base.rb +30 -0
  36. data/lib/never_bounce/api/response/credits_info/monthly.rb +16 -0
  37. data/lib/never_bounce/api/response/credits_info/paid.rb +20 -0
  38. data/lib/never_bounce/api/response/error_message.rb +17 -0
  39. data/lib/never_bounce/api/response/feature/job_status_fields.rb +68 -0
  40. data/lib/never_bounce/api/response/feature/job_status_fields/total.rb +46 -0
  41. data/lib/never_bounce/api/response/jobs_create.rb +10 -0
  42. data/lib/never_bounce/api/response/jobs_delete.rb +8 -0
  43. data/lib/never_bounce/api/response/jobs_download.rb +19 -0
  44. data/lib/never_bounce/api/response/jobs_parse.rb +10 -0
  45. data/lib/never_bounce/api/response/jobs_results.rb +34 -0
  46. data/lib/never_bounce/api/response/jobs_results/item.rb +65 -0
  47. data/lib/never_bounce/api/response/jobs_results/query.rb +20 -0
  48. data/lib/never_bounce/api/response/jobs_search.rb +33 -0
  49. data/lib/never_bounce/api/response/jobs_search/query.rb +16 -0
  50. data/lib/never_bounce/api/response/jobs_search/result.rb +13 -0
  51. data/lib/never_bounce/api/response/jobs_start.rb +10 -0
  52. data/lib/never_bounce/api/response/jobs_status.rb +11 -0
  53. data/lib/never_bounce/api/response/message.rb +32 -0
  54. data/lib/never_bounce/api/response/single_check.rb +68 -0
  55. data/lib/never_bounce/api/response/status_message.rb +17 -0
  56. data/lib/never_bounce/api/response/success_message.rb +12 -0
  57. data/lib/never_bounce/api/session.rb +141 -0
  58. data/lib/never_bounce/api/version.rb +4 -0
  59. data/lib/neverbounce-api.rb +4 -0
  60. data/lib/neverbounce.rb +3 -0
  61. data/neverbounce-api.gemspec +20 -0
  62. data/spec/lib/never_bounce/api/client_spec.rb +199 -0
  63. data/spec/lib/never_bounce/api/feature/basic_initialize_spec.rb +25 -0
  64. data/spec/lib/never_bounce/api/feature/eigencache_spec.rb +28 -0
  65. data/spec/lib/never_bounce/api/feature/igetset_spec.rb +45 -0
  66. data/spec/lib/never_bounce/api/feature/oattrs_spec.rb +72 -0
  67. data/spec/lib/never_bounce/api/feature/require_attr_spec.rb +25 -0
  68. data/spec/lib/never_bounce/api/request/account_info_spec.rb +29 -0
  69. data/spec/lib/never_bounce/api/request/base_spec.rb +6 -0
  70. data/spec/lib/never_bounce/api/request/jobs_create_spec.rb +89 -0
  71. data/spec/lib/never_bounce/api/request/jobs_delete_spec.rb +31 -0
  72. data/spec/lib/never_bounce/api/request/jobs_download_spec.rb +31 -0
  73. data/spec/lib/never_bounce/api/request/jobs_parse_spec.rb +44 -0
  74. data/spec/lib/never_bounce/api/request/jobs_results_spec.rb +42 -0
  75. data/spec/lib/never_bounce/api/request/jobs_search_spec.rb +40 -0
  76. data/spec/lib/never_bounce/api/request/jobs_start_spec.rb +44 -0
  77. data/spec/lib/never_bounce/api/request/jobs_status_spec.rb +31 -0
  78. data/spec/lib/never_bounce/api/request/single_check_spec.rb +44 -0
  79. data/spec/lib/never_bounce/api/response/account_info/job_counts_spec.rb +7 -0
  80. data/spec/lib/never_bounce/api/response/account_info_spec.rb +9 -0
  81. data/spec/lib/never_bounce/api/response/address_info_spec.rb +7 -0
  82. data/spec/lib/never_bounce/api/response/base_spec.rb +6 -0
  83. data/spec/lib/never_bounce/api/response/container_spec.rb +142 -0
  84. data/spec/lib/never_bounce/api/response/credits_info/base_spec.rb +31 -0
  85. data/spec/lib/never_bounce/api/response/credits_info/monthly_spec.rb +11 -0
  86. data/spec/lib/never_bounce/api/response/credits_info/paid_spec.rb +11 -0
  87. data/spec/lib/never_bounce/api/response/feature/job_status_fields/total_spec.rb +7 -0
  88. data/spec/lib/never_bounce/api/response/feature/job_status_fields_spec.rb +42 -0
  89. data/spec/lib/never_bounce/api/response/jobs_create_spec.rb +7 -0
  90. data/spec/lib/never_bounce/api/response/jobs_delete_spec.rb +7 -0
  91. data/spec/lib/never_bounce/api/response/jobs_download_spec.rb +7 -0
  92. data/spec/lib/never_bounce/api/response/jobs_parse_spec.rb +7 -0
  93. data/spec/lib/never_bounce/api/response/jobs_results/jobs_results_item_spec.rb +7 -0
  94. data/spec/lib/never_bounce/api/response/jobs_results/jobs_results_query_spec.rb +7 -0
  95. data/spec/lib/never_bounce/api/response/jobs_results_spec.rb +7 -0
  96. data/spec/lib/never_bounce/api/response/jobs_search/jobs_search_query_spec.rb +7 -0
  97. data/spec/lib/never_bounce/api/response/jobs_search/jobs_search_result_spec.rb +7 -0
  98. data/spec/lib/never_bounce/api/response/jobs_search_spec.rb +7 -0
  99. data/spec/lib/never_bounce/api/response/jobs_start_spec.rb +7 -0
  100. data/spec/lib/never_bounce/api/response/jobs_status_spec.rb +7 -0
  101. data/spec/lib/never_bounce/api/response/single_check_spec.rb +7 -0
  102. data/spec/lib/never_bounce/api/response/spec_helper.rb +8 -0
  103. data/spec/lib/never_bounce/api/session_spec.rb +140 -0
  104. data/spec/lib/never_bounce/api_spec.rb +8 -0
  105. data/spec/spec_helper.rb +49 -0
  106. data/spec/spec_support/include_dir_context.rb +22 -0
  107. data/spec/spec_support/simplecov.rb +18 -0
  108. metadata +210 -0
@@ -0,0 +1,6 @@
1
+
2
+ describe NeverBounce::API::Request::Base do
3
+ include_dir_context __dir__
4
+
5
+ it_behaves_like "instantiatable"
6
+ end
@@ -0,0 +1,89 @@
1
+
2
+ module NeverBounce; module API; module Request
3
+ describe JobsCreate do
4
+ include_dir_context __dir__
5
+
6
+ it_behaves_like "instantiatable"
7
+
8
+ describe "#mode_h" do
9
+ it "generally works" do
10
+ r = newo()
11
+ expect(r.mode_h).to eq({})
12
+ r = newo(auto_start: nil, auto_parse: nil, run_sample: nil)
13
+ expect(r.mode_h).to eq({})
14
+ r = newo(auto_start: false, auto_parse: false, run_sample: false)
15
+ expect(r.mode_h).to eq({auto_start: false, auto_parse: false, run_sample: false})
16
+ r = newo(auto_start: true, auto_parse: true, run_sample: true)
17
+ expect(r.mode_h).to eq({auto_start: true, auto_parse: true, run_sample: true})
18
+ end
19
+ end
20
+
21
+ describe ".response_klass" do
22
+ it { expect(described_class.response_klass).to eq API::Response::JobsCreate }
23
+ end
24
+
25
+ describe "#to_h" do
26
+ let(:m) { :to_h }
27
+ context "for input specification" do
28
+ def goodo(attrs = {})
29
+ newo({
30
+ api_key: "api_key",
31
+ filename: "filename",
32
+ }.merge(attrs))
33
+ end
34
+
35
+ it "generally works" do
36
+ # NOTE: Logical order: type, then value.
37
+ r = goodo(input_location: "unk", input: "input")
38
+ expect { r.send(m) }.to raise_error(AttributeError, 'Unknown `input_location`: "unk"')
39
+
40
+ r = goodo(input_location: "remote_url", input: "input")
41
+ expect(h = r.send(m)).to be_a Hash
42
+ expect(h).to include(input_location: "remote_url", input: "input")
43
+
44
+ r = goodo(input_location: "supplied", input: "plain")
45
+ expect { r.send(m) }.to raise_error(AttributeError, 'Invalid `input` for `input_location` == "supplied": "plain"')
46
+
47
+ r = goodo(input_location: "supplied", input: ["a", "b"])
48
+ expect { r.send(m) }.to raise_error(AttributeError, 'Invalid `input` element: "a"')
49
+
50
+ r = goodo(input_location: "supplied", input: [["a"], ["b"]])
51
+ expect { r.send(m) }.to raise_error(AttributeError, 'Invalid `input` element: ["a"]')
52
+
53
+ r = goodo(input_location: "supplied", input: [["alice@isp.com", "Alice Roberts"], ["b"]])
54
+ expect { r.send(m) }.to raise_error(AttributeError, 'Invalid `input` element: ["b"]')
55
+
56
+ r = goodo(input_location: "supplied", input: [["alice@isp.com", "Alice Roberts"], ["b", "bb", "bbb"]])
57
+ expect { r.send(m) }.to raise_error(AttributeError, 'Invalid `input` element: ["b", "bb", "bbb"]')
58
+
59
+ r = goodo(input_location: "supplied", input: [["alice@isp.com", "Alice Roberts"], ["bob.smith@gmail.com", "Bob Smith"]])
60
+ expect(h = r.send(m)).to be_a Hash
61
+ expect(h).to include(input: [["alice@isp.com", "Alice Roberts"], ["bob.smith@gmail.com", "Bob Smith"]])
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "#to_httparty" do
67
+ it "generally works" do
68
+ r = newo
69
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: input")
70
+ r.input = "input"
71
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: input_location")
72
+ r.input_location = "remote_url"
73
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: filename")
74
+ r.filename = "filename"
75
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: api_key")
76
+ r.api_key = "api_key"
77
+
78
+ res = r.to_httparty
79
+ expect(res).to be_a Array
80
+ method, url, data = res
81
+ expect(method).to eq :post
82
+ expect(url).to eq "https://api.neverbounce.com/v4/jobs/create"
83
+ expect(data).to include(:body, :headers)
84
+ expect(data.fetch(:body)).to eq "{\"input\":\"input\",\"input_location\":\"remote_url\",\"filename\":\"filename\",\"key\":\"api_key\"}"
85
+ expect(data.fetch(:headers)).to include("Content-Type", "User-Agent")
86
+ end
87
+ end
88
+ end
89
+ end; end; end
@@ -0,0 +1,31 @@
1
+
2
+ module NeverBounce; module API; module Request
3
+ describe JobsDelete do
4
+ include_dir_context __dir__
5
+
6
+ it_behaves_like "instantiatable"
7
+
8
+ describe ".response_klass" do
9
+ it { expect(described_class.response_klass).to eq Response::JobsDelete }
10
+ end
11
+
12
+ describe "#to_httparty" do
13
+ it "generally works" do
14
+ r = newo
15
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: job_id")
16
+ r.job_id = "123"
17
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: api_key")
18
+ r.api_key = "api_key"
19
+
20
+ res = r.to_httparty
21
+ expect(res).to be_a Array
22
+ method, url, data = res
23
+ expect(method).to eq :post
24
+ expect(url).to eq "https://api.neverbounce.com/v4/jobs/delete"
25
+ expect(data).to include(:body, :headers)
26
+ expect(data.fetch(:body)).to eq("{\"job_id\":\"123\",\"key\":\"api_key\"}")
27
+ expect(data.fetch(:headers)).to include("Content-Type", "User-Agent")
28
+ end
29
+ end
30
+ end
31
+ end; end; end
@@ -0,0 +1,31 @@
1
+
2
+ module NeverBounce; module API; module Request
3
+ describe JobsDownload do
4
+ include_dir_context __dir__
5
+
6
+ it_behaves_like "instantiatable"
7
+
8
+ describe ".response_klass" do
9
+ it { expect(described_class.response_klass).to eq Response::JobsDownload }
10
+ end
11
+
12
+ describe "#to_httparty" do
13
+ it "generally works" do
14
+ r = newo
15
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: job_id")
16
+ r.job_id = "123"
17
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: api_key")
18
+ r.api_key = "api_key"
19
+
20
+ res = r.to_httparty
21
+ expect(res).to be_a Array
22
+ method, url, data = res
23
+ expect(method).to eq :get
24
+ expect(url).to eq "https://api.neverbounce.com/v4/jobs/download"
25
+ expect(data).to include(:body, :headers)
26
+ expect(data.fetch(:body)).to eq("{\"job_id\":\"123\",\"key\":\"api_key\"}")
27
+ expect(data.fetch(:headers)).to include("Content-Type", "User-Agent")
28
+ end
29
+ end
30
+ end
31
+ end; end; end
@@ -0,0 +1,44 @@
1
+
2
+ module NeverBounce; module API; module Request
3
+ describe JobsParse do
4
+ include_dir_context __dir__
5
+
6
+ it_behaves_like "instantiatable"
7
+
8
+ describe "#mode_h" do
9
+ it "generally works" do
10
+ r = newo()
11
+ expect(r.mode_h).to eq({})
12
+ r = newo(auto_start: nil)
13
+ expect(r.mode_h).to eq({})
14
+ r = newo(auto_start: false)
15
+ expect(r.mode_h).to eq({auto_start: false})
16
+ r = newo(auto_start: true)
17
+ expect(r.mode_h).to eq({auto_start: true})
18
+ end
19
+ end
20
+
21
+ describe ".response_klass" do
22
+ it { expect(described_class.response_klass).to eq Response::JobsParse }
23
+ end
24
+
25
+ describe "#to_httparty" do
26
+ it "generally works" do
27
+ r = newo
28
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: job_id")
29
+ r.job_id = "123"
30
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: api_key")
31
+ r.api_key = "api_key"
32
+
33
+ res = r.to_httparty
34
+ expect(res).to be_a Array
35
+ method, url, data = res
36
+ expect(method).to eq :post
37
+ expect(url).to eq "https://api.neverbounce.com/v4/jobs/parse"
38
+ expect(data).to include(:body, :headers)
39
+ expect(data.fetch(:body)).to eq("{\"job_id\":\"123\",\"key\":\"api_key\"}")
40
+ expect(data.fetch(:headers)).to include("Content-Type", "User-Agent")
41
+ end
42
+ end
43
+ end
44
+ end; end; end
@@ -0,0 +1,42 @@
1
+
2
+ module NeverBounce; module API; module Request
3
+ describe JobsResults do
4
+ include_dir_context __dir__
5
+
6
+ it_behaves_like "instantiatable"
7
+
8
+ describe "#mode_h" do
9
+ it "generally works" do
10
+ r = newo()
11
+ expect(r.mode_h).to eq({})
12
+ r = newo(page: nil, per_page: nil)
13
+ expect(r.mode_h).to eq({})
14
+ r = newo(page: 12, per_page: 34)
15
+ expect(r.mode_h).to eq({page: 12, items_per_page: 34})
16
+ end
17
+ end
18
+
19
+ describe ".response_klass" do
20
+ it { expect(described_class.response_klass).to eq API::Response::JobsResults }
21
+ end
22
+
23
+ describe "#to_httparty" do
24
+ it "generally works" do
25
+ r = newo
26
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: job_id")
27
+ r.job_id = "123"
28
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: api_key")
29
+ r.api_key = "api_key"
30
+
31
+ res = r.to_httparty
32
+ expect(res).to be_a Array
33
+ method, url, data = res
34
+ expect(method).to eq :get
35
+ expect(url).to eq "https://api.neverbounce.com/v4/jobs/results"
36
+ expect(data).to include(:body, :headers)
37
+ expect(data.fetch(:body)).to eq "{\"job_id\":\"123\",\"key\":\"api_key\"}"
38
+ expect(data.fetch(:headers)).to include("Content-Type", "User-Agent")
39
+ end
40
+ end
41
+ end
42
+ end; end; end
@@ -0,0 +1,40 @@
1
+
2
+ module NeverBounce; module API; module Request
3
+ describe JobsSearch do
4
+ include_dir_context __dir__
5
+
6
+ it_behaves_like "instantiatable"
7
+
8
+ describe "#mode_h" do
9
+ it "generally works" do
10
+ r = newo()
11
+ expect(r.mode_h).to eq({})
12
+ r = newo(job_id: nil, page: nil, per_page: nil)
13
+ expect(r.mode_h).to eq({})
14
+ r = newo(job_id: "abc", page: 12, per_page: 34)
15
+ expect(r.mode_h).to eq({job_id: "abc", page: 12, items_per_page: 34})
16
+ end
17
+ end
18
+
19
+ describe ".response_klass" do
20
+ it { expect(described_class.response_klass).to eq API::Response::JobsSearch }
21
+ end
22
+
23
+ describe "#to_httparty" do
24
+ it "generally works" do
25
+ r = newo(job_id: "abc", page: 12, per_page: 34)
26
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: api_key")
27
+ r.api_key = "api_key"
28
+
29
+ res = r.to_httparty
30
+ expect(res).to be_a Array
31
+ method, url, data = res
32
+ expect(method).to eq :get
33
+ expect(url).to eq "https://api.neverbounce.com/v4/jobs/search"
34
+ expect(data).to include(:body, :headers)
35
+ expect(data.fetch(:body)).to eq "{\"key\":\"api_key\",\"job_id\":\"abc\",\"page\":12,\"items_per_page\":34}"
36
+ expect(data.fetch(:headers)).to include("Content-Type", "User-Agent")
37
+ end
38
+ end
39
+ end
40
+ end; end; end
@@ -0,0 +1,44 @@
1
+
2
+ module NeverBounce; module API; module Request
3
+ describe JobsStart do
4
+ include_dir_context __dir__
5
+
6
+ it_behaves_like "instantiatable"
7
+
8
+ describe "#mode_h" do
9
+ it "generally works" do
10
+ r = newo()
11
+ expect(r.mode_h).to eq({})
12
+ r = newo(run_sample: nil)
13
+ expect(r.mode_h).to eq({})
14
+ r = newo(run_sample: false)
15
+ expect(r.mode_h).to eq({run_sample: false})
16
+ r = newo(run_sample: true)
17
+ expect(r.mode_h).to eq({run_sample: true})
18
+ end
19
+ end
20
+
21
+ describe ".response_klass" do
22
+ it { expect(described_class.response_klass).to eq Response::JobsStart }
23
+ end
24
+
25
+ describe "#to_httparty" do
26
+ it "generally works" do
27
+ r = newo
28
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: job_id")
29
+ r.job_id = "123"
30
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: api_key")
31
+ r.api_key = "api_key"
32
+
33
+ res = r.to_httparty
34
+ expect(res).to be_a Array
35
+ method, url, data = res
36
+ expect(method).to eq :post
37
+ expect(url).to eq "https://api.neverbounce.com/v4/jobs/start"
38
+ expect(data).to include(:body, :headers)
39
+ expect(data.fetch(:body)).to eq("{\"job_id\":\"123\",\"key\":\"api_key\"}")
40
+ expect(data.fetch(:headers)).to include("Content-Type", "User-Agent")
41
+ end
42
+ end
43
+ end
44
+ end; end; end
@@ -0,0 +1,31 @@
1
+
2
+ module NeverBounce; module API; module Request
3
+ describe JobsStatus do
4
+ include_dir_context __dir__
5
+
6
+ it_behaves_like "instantiatable"
7
+
8
+ describe ".response_klass" do
9
+ it { expect(described_class.response_klass).to eq API::Response::JobsStatus }
10
+ end
11
+
12
+ describe "#to_httparty" do
13
+ it "generally works" do
14
+ r = newo
15
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: job_id")
16
+ r.job_id = "123"
17
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: api_key")
18
+ r.api_key = "api_key"
19
+
20
+ res = r.to_httparty
21
+ expect(res).to be_a Array
22
+ method, url, data = res
23
+ expect(method).to eq :get
24
+ expect(url).to eq "https://api.neverbounce.com/v4/jobs/status"
25
+ expect(data).to include(:body, :headers)
26
+ expect(data.fetch(:body)).to eq "{\"job_id\":\"123\",\"key\":\"api_key\"}"
27
+ expect(data.fetch(:headers)).to include("Content-Type", "User-Agent")
28
+ end
29
+ end
30
+ end
31
+ end; end; end
@@ -0,0 +1,44 @@
1
+
2
+ module NeverBounce; module API; module Request
3
+ describe SingleCheck do
4
+ include_dir_context __dir__
5
+
6
+ it_behaves_like "instantiatable"
7
+
8
+ describe "#mode_h" do
9
+ it "generally works" do
10
+ r = newo()
11
+ expect(r.mode_h).to eq({})
12
+ r = newo(address_info: nil, credits_info: nil, timeout: nil)
13
+ expect(r.mode_h).to eq({})
14
+ r = newo(address_info: false, credits_info: false)
15
+ expect(r.mode_h).to eq({address_info: false, credits_info: false})
16
+ r = newo(address_info: true, credits_info: true, timeout: 12)
17
+ expect(r.mode_h).to eq({address_info: true, credits_info: true, timeout: 12})
18
+ end
19
+ end
20
+
21
+ describe ".response_klass" do
22
+ it { expect(described_class.response_klass).to eq Response::SingleCheck }
23
+ end
24
+
25
+ describe "#to_httparty" do
26
+ it "generally works" do
27
+ r = newo(address_info: true, credits_info: true, timeout: 12)
28
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: email")
29
+ r.email = "email"
30
+ expect { r.to_httparty }.to raise_error(AttributeError, "Attribute must be set: api_key")
31
+ r.api_key = "api_key"
32
+
33
+ res = r.to_httparty
34
+ expect(res).to be_a Array
35
+ method, url, data = res
36
+ expect(method).to eq :get
37
+ expect(url).to eq "https://api.neverbounce.com/v4/single/check"
38
+ expect(data).to include(:body, :headers)
39
+ expect(data.fetch(:body)).to eq "{\"email\":\"email\",\"key\":\"api_key\",\"address_info\":true,\"credits_info\":true,\"timeout\":12}"
40
+ expect(data.fetch(:headers)).to include("Content-Type", "User-Agent")
41
+ end
42
+ end
43
+ end
44
+ end; end; end
@@ -0,0 +1,7 @@
1
+
2
+ describe NeverBounce::API::Response::AccountInfo::JobCounts do
3
+ include_dir_context __dir__
4
+
5
+ it_behaves_like "instantiatable"
6
+ it_behaves_like "properly inherited"
7
+ end
@@ -0,0 +1,9 @@
1
+
2
+ describe NeverBounce::API::Response::AccountInfo do
3
+ include_dir_context __dir__
4
+
5
+ it_behaves_like "instantiatable"
6
+ it_behaves_like "properly inherited"
7
+
8
+ # OPTIMIZE: Feed real data here some day.
9
+ end
@@ -0,0 +1,7 @@
1
+
2
+ describe NeverBounce::API::Response::AddressInfo do
3
+ include_dir_context __dir__
4
+
5
+ it_behaves_like "instantiatable"
6
+ it_behaves_like "properly inherited"
7
+ end
@@ -0,0 +1,6 @@
1
+
2
+ describe NeverBounce::API::Response::Base do
3
+ include_dir_context __dir__
4
+
5
+ it_behaves_like "instantiatable"
6
+ end