patch_ruby 1.1.0 → 1.3.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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +52 -1
  3. data/Gemfile +1 -0
  4. data/Gemfile.lock +18 -2
  5. data/Makefile +10 -0
  6. data/README.md +48 -9
  7. data/lib/patch_ruby.rb +2 -0
  8. data/lib/patch_ruby/api/estimates_api.rb +195 -0
  9. data/lib/patch_ruby/models/allocation.rb +10 -0
  10. data/lib/patch_ruby/models/create_mass_estimate_request.rb +47 -1
  11. data/lib/patch_ruby/models/create_order_request.rb +54 -4
  12. data/lib/patch_ruby/models/create_preference_request.rb +7 -0
  13. data/lib/patch_ruby/models/error_response.rb +9 -0
  14. data/lib/patch_ruby/models/estimate.rb +24 -1
  15. data/lib/patch_ruby/models/estimate_list_response.rb +9 -0
  16. data/lib/patch_ruby/models/estimate_response.rb +9 -0
  17. data/lib/patch_ruby/models/meta_index_object.rb +11 -0
  18. data/lib/patch_ruby/models/order.rb +58 -1
  19. data/lib/patch_ruby/models/order_list_response.rb +9 -0
  20. data/lib/patch_ruby/models/order_response.rb +9 -0
  21. data/lib/patch_ruby/models/photo.rb +237 -0
  22. data/lib/patch_ruby/models/preference.rb +10 -0
  23. data/lib/patch_ruby/models/preference_list_response.rb +9 -0
  24. data/lib/patch_ruby/models/preference_response.rb +9 -0
  25. data/lib/patch_ruby/models/project.rb +74 -4
  26. data/lib/patch_ruby/models/project_list_response.rb +9 -0
  27. data/lib/patch_ruby/models/project_response.rb +9 -0
  28. data/lib/patch_ruby/models/standard.rb +254 -0
  29. data/lib/patch_ruby/version.rb +1 -1
  30. data/spec/constants.rb +3 -0
  31. data/spec/factories/allocations.rb +7 -0
  32. data/spec/factories/create_mass_estimate_requests.rb +6 -0
  33. data/spec/factories/create_order_requests.rb +8 -0
  34. data/spec/factories/create_preference_requests.rb +5 -0
  35. data/spec/factories/error_responses.rb +7 -0
  36. data/spec/factories/estimate_list_responses.rb +8 -0
  37. data/spec/factories/estimate_responses.rb +7 -0
  38. data/spec/factories/estimates.rb +8 -0
  39. data/spec/factories/meta_index_objects.rb +6 -0
  40. data/spec/factories/order_list_responses.rb +8 -0
  41. data/spec/factories/order_responses.rb +7 -0
  42. data/spec/factories/orders.rb +12 -0
  43. data/spec/factories/preference_list_responses.rb +8 -0
  44. data/spec/factories/preference_responses.rb +7 -0
  45. data/spec/factories/preferences.rb +7 -0
  46. data/spec/factories/project_list_responses.rb +8 -0
  47. data/spec/factories/project_responses.rb +7 -0
  48. data/spec/factories/projects.rb +15 -0
  49. data/spec/integration/estimates_spec.rb +41 -9
  50. data/spec/integration/orders_spec.rb +42 -5
  51. data/spec/integration/preferences_spec.rb +7 -3
  52. data/spec/integration/projects_spec.rb +19 -1
  53. data/spec/models/allocation_spec.rb +8 -1
  54. data/spec/models/create_mass_estimate_request_spec.rb +7 -1
  55. data/spec/models/create_order_request_spec.rb +7 -1
  56. data/spec/models/create_preference_request_spec.rb +8 -1
  57. data/spec/models/error_response_spec.rb +7 -1
  58. data/spec/models/estimate_list_response_spec.rb +7 -1
  59. data/spec/models/estimate_response_spec.rb +7 -1
  60. data/spec/models/estimate_spec.rb +8 -1
  61. data/spec/models/meta_index_object_spec.rb +7 -1
  62. data/spec/models/order_list_response_spec.rb +7 -1
  63. data/spec/models/order_response_spec.rb +7 -1
  64. data/spec/models/order_spec.rb +18 -1
  65. data/spec/models/preference_list_response_spec.rb +7 -1
  66. data/spec/models/preference_response_spec.rb +7 -1
  67. data/spec/models/preference_spec.rb +7 -1
  68. data/spec/models/project_list_response_spec.rb +7 -1
  69. data/spec/models/project_response_spec.rb +7 -1
  70. data/spec/models/project_spec.rb +21 -1
  71. data/spec/spec_helper.rb +11 -0
  72. data/spec/support/shared/generated_classes.rb +13 -0
  73. metadata +60 -17
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :project_response, class: Patch::ProjectResponse do
3
+ success { true }
4
+ error { {} }
5
+ data { {} }
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ FactoryBot.define do
2
+ factory :project, class: Patch::Project do
3
+ sequence(:id) { |n| n }
4
+ production { false }
5
+ name { "New Project" }
6
+ description { "New Descirption" }
7
+ type { "biomass" }
8
+ country { "DK" }
9
+ developer { "Danish Developer" }
10
+ photos { [] }
11
+ average_price_per_tonne_cents_usd { 120 }
12
+ remaining_mass_g { 1_000 }
13
+ standard { 'european_biochar_certificate' }
14
+ end
15
+ end
@@ -1,7 +1,7 @@
1
1
  RSpec.describe 'Estimates Integration' do
2
2
  before do
3
3
  Patch.configure do |config|
4
- config.access_token = ENV['PATCH_RUBY_API_KEY']
4
+ config.access_token = ENV['SANDBOX_API_KEY']
5
5
  end
6
6
  end
7
7
 
@@ -25,14 +25,46 @@ RSpec.describe 'Estimates Integration' do
25
25
  expect(estimates.length).not_to be_zero
26
26
  end
27
27
 
28
- it 'supports create with a project-id' do
29
- retrieve_projects_response = Patch::Project.retrieve_projects(page: 1)
30
- project_id = retrieve_projects_response.data.first.id
31
- create_estimate_response = Patch::Estimate.create_mass_estimate(mass_g: 100, project_id: project_id)
32
- estimate_id = create_estimate_response.data.id
28
+ it 'supports creating flight estimates' do
29
+ distance_m = 10_000_000
30
+ flight_estimate = Patch::Estimate.create_flight_estimate(
31
+ distance_m: distance_m,
32
+ create_order: false
33
+ )
34
+
35
+ expect(flight_estimate.data.type).to eq 'flight'
36
+ expect(flight_estimate.data.mass_g).to eq 1_032_000
37
+ end
38
+
39
+ it 'supports creating vehicle estimates' do
40
+ distance_m = 10_000
41
+ make = "Toyota"
42
+ model = "Prius"
43
+ year = 2000
44
+
45
+ vehicle_estimate = Patch::Estimate.create_vehicle_estimate(
46
+ distance_m: distance_m,
47
+ make: make,
48
+ model: model,
49
+ year: year,
50
+ create_order: false
51
+ )
52
+
53
+ expect(vehicle_estimate.data.type).to eq 'vehicle'
54
+ expect(vehicle_estimate.data.mass_g).to eq 2_132
55
+ end
56
+
57
+ it 'supports creating shipping estimates' do
58
+ distance_m = 100_000_000
59
+ package_mass_g = 10_000
60
+ create_estimate_response = Patch::Estimate.create_shipping_estimate(
61
+ distance_m: distance_m,
62
+ package_mass_g: package_mass_g,
63
+ transportation_method: 'rail',
64
+ create_order: false
65
+ )
33
66
 
34
- expect(create_estimate_response.success).to eq true
35
- expect(create_estimate_response.data.order.id).not_to be_nil
36
- expect(create_estimate_response.data.order.mass_g).to eq(100)
67
+ expect(create_estimate_response.data.type).to eq 'shipping'
68
+ expect(create_estimate_response.data.mass_g).to eq 12_431
37
69
  end
38
70
  end
@@ -1,7 +1,7 @@
1
1
  RSpec.describe 'Orders Integration' do
2
2
  before do
3
3
  Patch.configure do |config|
4
- config.access_token = ENV['PATCH_RUBY_API_KEY']
4
+ config.access_token = ENV['SANDBOX_API_KEY']
5
5
  end
6
6
  end
7
7
 
@@ -26,14 +26,51 @@ RSpec.describe 'Orders Integration' do
26
26
  end
27
27
 
28
28
  it 'supports create with a project-id' do
29
- retrieve_projects_response = Patch::Project.retrieve_projects(page: 1)
30
- project_id = retrieve_projects_response.data.first.id
29
+ retrieve_project_response = Patch::Project.retrieve_project(
30
+ Constants::BIOMASS_TEST_PROJECT_ID
31
+ )
31
32
 
32
- create_order_response = Patch::Order.create_order(mass_g: 100, project_id: project_id)
33
+ project_id = retrieve_project_response.data.id
34
+ average_price_per_tonne_cents_usd = retrieve_project_response.data.average_price_per_tonne_cents_usd
35
+
36
+ order_mass_g = 100_000
37
+ tonne_per_gram = 1_000_000
38
+
39
+ expected_price = (average_price_per_tonne_cents_usd.to_f / tonne_per_gram) * order_mass_g
40
+
41
+ create_order_response = Patch::Order.create_order(mass_g: order_mass_g, project_id: project_id)
33
42
 
34
43
  expect(create_order_response.success).to eq true
35
44
  expect(create_order_response.data.id).not_to be_nil
36
- expect(create_order_response.data.mass_g).to eq(100)
45
+ expect(create_order_response.data.mass_g).to eq(order_mass_g)
46
+ expect(create_order_response.data.price_cents_usd.to_i).to eq(expected_price)
47
+ expect(create_order_response.data.patch_fee_cents_usd).not_to be_empty
48
+ end
49
+
50
+ it 'supports create with a total price' do
51
+ retrieve_project_response = Patch::Project.retrieve_project(
52
+ Constants::BIOMASS_TEST_PROJECT_ID
53
+ )
54
+
55
+ project_id = retrieve_project_response.data.id
56
+ total_price_cents_usd = 5_00
57
+
58
+ create_order_response = Patch::Order.create_order(
59
+ total_price_cents_usd: total_price_cents_usd,
60
+ project_id: project_id
61
+ )
62
+
63
+ expect(create_order_response.success).to eq true
64
+
65
+ order = create_order_response.data
66
+
67
+ expect(order.id).not_to be_nil
68
+ expect(order.mass_g).to eq(5_00_000)
69
+ expect(order.price_cents_usd.to_i).to eq(500)
70
+ expect(order.patch_fee_cents_usd).not_to be_empty
71
+ expect(
72
+ order.price_cents_usd.to_i + order.patch_fee_cents_usd.to_i
73
+ ).to eq(total_price_cents_usd)
37
74
  end
38
75
 
39
76
  it 'supports create with metadata' do
@@ -1,7 +1,7 @@
1
1
  RSpec.describe 'Preferences Integration' do
2
2
  before do
3
3
  Patch.configure do |config|
4
- config.access_token = ENV['PATCH_RUBY_API_KEY']
4
+ config.access_token = ENV['SANDBOX_API_KEY']
5
5
  end
6
6
  end
7
7
 
@@ -10,8 +10,12 @@ RSpec.describe 'Preferences Integration' do
10
10
  expect(retrieve_projects_response.data.length).not_to be_zero
11
11
  project_id = retrieve_projects_response.data.first.id
12
12
 
13
- create_preference_response = Patch::Preference.create_preference(project_id: project_id)
14
- preference_id = create_preference_response.data.id
13
+ begin
14
+ create_preference_response = Patch::Preference.create_preference(project_id: project_id)
15
+ preference_id = create_preference_response.data.id
16
+ rescue => Patch::ApiError
17
+ preference_id = Patch::Preference.retrieve_preferences().data.first.id
18
+ end
15
19
 
16
20
  retrieve_preference_response = Patch::Preference.retrieve_preference(preference_id)
17
21
  expect(retrieve_preference_response.data.id).to eq preference_id
@@ -1,6 +1,6 @@
1
1
  RSpec.describe 'Projects Integration' do
2
2
  Patch.configure do |config|
3
- config.access_token = ENV['PATCH_RUBY_API_KEY']
3
+ config.access_token = ENV['SANDBOX_API_KEY']
4
4
  end
5
5
 
6
6
  it 'supports retrieve and list' do
@@ -21,4 +21,22 @@ RSpec.describe 'Projects Integration' do
21
21
  retrieve_project_response = Patch::Project.retrieve_project(project_id)
22
22
  expect(retrieve_project_response.data.id).to eq project_id
23
23
  end
24
+
25
+ describe 'returned fields' do
26
+ before do
27
+ @project = Patch::Project.retrieve_projects(page: 1).data.first
28
+ end
29
+
30
+ it 'returns photos' do
31
+ expect(@project.photos).to be_an_instance_of(Array)
32
+ end
33
+
34
+ it 'returns average_price_per_tonne_cents_usd' do
35
+ expect(@project.average_price_per_tonne_cents_usd).to be_an_instance_of(Integer)
36
+ end
37
+
38
+ it 'returns remaining_mass_g' do
39
+ expect(@project.remaining_mass_g).to be_an_instance_of(Integer)
40
+ end
41
+ end
24
42
  end
@@ -20,18 +20,25 @@ require 'date'
20
20
  describe 'Allocation' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::Allocation.new
23
+ @instance = build(:allocation)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { id: @instance.id, mass_g: @instance.mass_g, production: @instance.production } }
33
+ let(:nullable_properties) { Set.new }
34
+ end
35
+
30
36
  describe 'test an instance of Allocation' do
31
37
  it 'should create an instance of Allocation' do
32
38
  expect(@instance).to be_instance_of(Patch::Allocation)
33
39
  end
34
40
  end
41
+
35
42
  describe 'test attribute "id"' do
36
43
  it 'should work' do
37
44
  # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
@@ -20,13 +20,19 @@ require 'date'
20
20
  describe 'CreateMassEstimateRequest' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::CreateMassEstimateRequest.new
23
+ @instance = build(:create_mass_estimate_request)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { project_id: @instance.project_id, mass_g: @instance.mass_g } }
33
+ let(:nullable_properties) { Set.new(["create_order"]) }
34
+ end
35
+
30
36
  describe 'test an instance of CreateMassEstimateRequest' do
31
37
  it 'should create an instance of CreateMassEstimateRequest' do
32
38
  expect(@instance).to be_instance_of(Patch::CreateMassEstimateRequest)
@@ -20,13 +20,19 @@ require 'date'
20
20
  describe 'CreateOrderRequest' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::CreateOrderRequest.new
23
+ @instance = build(:create_order_request)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { project_id: @instance.project_id, mass_g: @instance.mass_g, total_price_cents_usd: @instance.total_price_cents_usd, metadata: @instance.metadata } }
33
+ let(:nullable_properties) { Set.new }
34
+ end
35
+
30
36
  describe 'test an instance of CreateOrderRequest' do
31
37
  it 'should create an instance of CreateOrderRequest' do
32
38
  expect(@instance).to be_instance_of(Patch::CreateOrderRequest)
@@ -20,18 +20,25 @@ require 'date'
20
20
  describe 'CreatePreferenceRequest' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::CreatePreferenceRequest.new
23
+ @instance = build(:create_preference_request)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { project_id: @instance.project_id } }
33
+ let(:nullable_properties) { Set.new }
34
+ end
35
+
30
36
  describe 'test an instance of CreatePreferenceRequest' do
31
37
  it 'should create an instance of CreatePreferenceRequest' do
32
38
  expect(@instance).to be_instance_of(Patch::CreatePreferenceRequest)
33
39
  end
34
40
  end
41
+
35
42
  describe 'test attribute "project_id"' do
36
43
  it 'should work' do
37
44
  # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
@@ -20,13 +20,19 @@ require 'date'
20
20
  describe 'ErrorResponse' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::ErrorResponse.new
23
+ @instance = build(:error_response)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { success: @instance.success, error: @instance.error, data: @instance.data } }
33
+ let(:nullable_properties) { Set.new(["data"]) }
34
+ end
35
+
30
36
  describe 'test an instance of ErrorResponse' do
31
37
  it 'should create an instance of ErrorResponse' do
32
38
  expect(@instance).to be_instance_of(Patch::ErrorResponse)
@@ -20,13 +20,19 @@ require 'date'
20
20
  describe 'EstimateListResponse' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::EstimateListResponse.new
23
+ @instance = build(:estimate_list_response)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { success: @instance.success, error: @instance.error, data: @instance.data, meta: @instance.meta } }
33
+ let(:nullable_properties) { Set.new(["error"]) }
34
+ end
35
+
30
36
  describe 'test an instance of EstimateListResponse' do
31
37
  it 'should create an instance of EstimateListResponse' do
32
38
  expect(@instance).to be_instance_of(Patch::EstimateListResponse)
@@ -20,13 +20,19 @@ require 'date'
20
20
  describe 'EstimateResponse' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::EstimateResponse.new
23
+ @instance = build(:estimate_response)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { success: @instance.success, error: @instance.error, data: @instance.data } }
33
+ let(:nullable_properties) { Set.new(["error"]) }
34
+ end
35
+
30
36
  describe 'test an instance of EstimateResponse' do
31
37
  it 'should create an instance of EstimateResponse' do
32
38
  expect(@instance).to be_instance_of(Patch::EstimateResponse)
@@ -20,18 +20,25 @@ require 'date'
20
20
  describe 'Estimate' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::Estimate.new
23
+ @instance = build(:estimate)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { id: @instance.id, order: @instance.order.to_hash, production: @instance.production, type: @instance.type } }
33
+ let(:nullable_properties) { Set.new(["order"]) }
34
+ end
35
+
30
36
  describe 'test an instance of Estimate' do
31
37
  it 'should create an instance of Estimate' do
32
38
  expect(@instance).to be_instance_of(Patch::Estimate)
33
39
  end
34
40
  end
41
+
35
42
  describe 'test attribute "id"' do
36
43
  it 'should work' do
37
44
  # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
@@ -20,13 +20,19 @@ require 'date'
20
20
  describe 'MetaIndexObject' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::MetaIndexObject.new
23
+ @instance = build(:meta_index_object)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { next_page: @instance.next_page, prev_page: @instance.prev_page } }
33
+ let(:nullable_properties) { Set.new(["next_page", "prev_page"]) }
34
+ end
35
+
30
36
  describe 'test an instance of MetaIndexObject' do
31
37
  it 'should create an instance of MetaIndexObject' do
32
38
  expect(@instance).to be_instance_of(Patch::MetaIndexObject)
@@ -20,13 +20,19 @@ require 'date'
20
20
  describe 'OrderListResponse' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::OrderListResponse.new
23
+ @instance = build(:order_list_response)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { success: @instance.success, error: @instance.error, data: @instance.data, meta: @instance.meta } }
33
+ let(:nullable_properties) { Set.new(["error"]) }
34
+ end
35
+
30
36
  describe 'test an instance of OrderListResponse' do
31
37
  it 'should create an instance of OrderListResponse' do
32
38
  expect(@instance).to be_instance_of(Patch::OrderListResponse)