solidus_bactracs 3.0.0 → 3.1.2

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/.gem_release.yml +2 -2
  3. data/.github/CODEOWNERS +54 -0
  4. data/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +3 -0
  5. data/.github/workflows/release.yml +50 -0
  6. data/.gitignore +0 -2
  7. data/.rubocop_todo.yml +3 -3
  8. data/.ruby-version +1 -0
  9. data/.tool-versions +1 -0
  10. data/CHANGELOG.md +10 -1
  11. data/PULL_REQUEST_TEMPLATE.md +3 -0
  12. data/README.md +7 -6
  13. data/Rakefile +1 -0
  14. data/app/assets/javascripts/spree/backend/{solidus_backtracs.js → solidus_bactracs.js} +0 -0
  15. data/app/assets/javascripts/spree/frontend/{solidus_backtracs.js → solidus_bactracs.js} +0 -0
  16. data/app/assets/stylesheets/spree/backend/{solidus_backtracs.css → solidus_bactracs.css} +0 -0
  17. data/app/assets/stylesheets/spree/frontend/{solidus_backtracs.css → solidus_bactracs.css} +0 -0
  18. data/app/controllers/spree/{backtracs_controller.rb → bactracs_controller.rb} +9 -9
  19. data/app/decorators/models/solidus_bactracs/spree/shipment_decorator.rb +46 -0
  20. data/app/helpers/{solidus_backtracs → solidus_bactracs}/export_helper.rb +2 -2
  21. data/app/jobs/{solidus_backtracs → solidus_bactracs}/api/schedule_shipment_syncs_job.rb +7 -7
  22. data/app/jobs/{solidus_backtracs → solidus_bactracs}/api/sync_shipment_job.rb +1 -1
  23. data/app/jobs/{solidus_backtracs → solidus_bactracs}/api/sync_shipments_job.rb +7 -3
  24. data/app/queries/{solidus_backtracs → solidus_bactracs}/shipment/between_query.rb +1 -1
  25. data/app/queries/{solidus_backtracs → solidus_bactracs}/shipment/exportable_query.rb +3 -3
  26. data/app/queries/{solidus_backtracs → solidus_bactracs}/shipment/pending_api_sync_query.rb +6 -6
  27. data/app/views/spree/{backtracs → bactracs}/export.xml.builder +5 -5
  28. data/app/workers/verify_bactracs_sync_worker.rb +14 -0
  29. data/bin/console +1 -1
  30. data/bin/rails-engine +1 -1
  31. data/bin/sandbox +1 -1
  32. data/config/routes.rb +2 -2
  33. data/db/migrate/20210220093010_add_bactracs_api_sync_fields.rb +11 -0
  34. data/db/migrate/20220701000001_bactracs_typo_correction.rb +10 -0
  35. data/db/migrate/20220704144504_rename_bactracs_columns_in_spree_shipment.rb +10 -0
  36. data/lib/bactracs_service.rb +66 -0
  37. data/lib/generators/{solidus_backtracs → solidus_bactracs}/install/install_generator.rb +3 -3
  38. data/lib/generators/{solidus_backtracs → solidus_bactracs}/install/templates/initializer.rb +42 -12
  39. data/lib/solidus_backtracs/version.rb +1 -1
  40. data/lib/{solidus_backtracs → solidus_bactracs}/api/batch_syncer.rb +5 -5
  41. data/lib/{solidus_backtracs → solidus_bactracs}/api/client.rb +4 -4
  42. data/lib/{solidus_backtracs → solidus_bactracs}/api/rate_limited_error.rb +1 -1
  43. data/lib/{solidus_backtracs → solidus_bactracs}/api/request_error.rb +1 -1
  44. data/lib/solidus_bactracs/api/request_runner.rb +135 -0
  45. data/lib/{solidus_backtracs → solidus_bactracs}/api/shipment_serializer.rb +28 -27
  46. data/lib/{solidus_backtracs → solidus_bactracs}/api/threshold_verifier.rb +6 -6
  47. data/lib/{solidus_backtracs → solidus_bactracs}/configuration.rb +4 -4
  48. data/lib/{solidus_backtracs → solidus_bactracs}/engine.rb +2 -2
  49. data/lib/{solidus_backtracs → solidus_bactracs}/errors.rb +1 -1
  50. data/lib/{solidus_backtracs → solidus_bactracs}/shipment_notice.rb +2 -2
  51. data/lib/{solidus_backtracs → solidus_bactracs}/testing_support/factories.rb +0 -0
  52. data/lib/solidus_bactracs/version.rb +5 -0
  53. data/lib/solidus_bactracs.rb +16 -0
  54. data/lib/tasks/solidus_bactracs.rake +16 -0
  55. data/solidus_bactracs.gemspec +3 -2
  56. data/spec/controllers/spree/{backtracs_controller_spec.rb → bactracs_controller_spec.rb} +9 -9
  57. data/spec/fixtures/{backtracs_xml_schema.xsd → bactracs_xml_schema.xsd} +0 -0
  58. data/spec/jobs/{solidus_backtracs → solidus_bactracs}/api/schedule_shipment_syncs_job_spec.rb +5 -5
  59. data/spec/jobs/{solidus_backtracs → solidus_bactracs}/api/sync_shipments_job_spec.rb +10 -10
  60. data/spec/lib/{solidus_backtracs → solidus_bactracs}/api/batch_syncer_spec.rb +28 -28
  61. data/spec/lib/{solidus_backtracs → solidus_bactracs}/api/client_spec.rb +10 -10
  62. data/spec/lib/{solidus_backtracs → solidus_bactracs}/api/rate_limited_error_spec.rb +1 -1
  63. data/spec/lib/{solidus_backtracs → solidus_bactracs}/api/request_error_spec.rb +1 -1
  64. data/spec/lib/{solidus_backtracs → solidus_bactracs}/api/request_runner_spec.rb +3 -3
  65. data/spec/lib/{solidus_backtracs → solidus_bactracs}/api/shipment_serializer_spec.rb +1 -1
  66. data/spec/lib/{solidus_backtracs → solidus_bactracs}/api/threshold_verifier_spec.rb +9 -9
  67. data/spec/lib/{solidus_backtracs → solidus_bactracs}/shipment_notice_spec.rb +4 -4
  68. data/spec/lib/solidus_bactracs_spec.rb +9 -0
  69. data/spec/models/spree/shipment_spec.rb +2 -2
  70. data/spec/queries/{solidus_backtracs → solidus_bactracs}/shipment/between_query_spec.rb +1 -1
  71. data/spec/queries/{solidus_backtracs → solidus_bactracs}/shipment/exportable_query_spec.rb +1 -1
  72. data/spec/queries/{solidus_backtracs → solidus_bactracs}/shipment/pending_api_sync_query_spec.rb +4 -4
  73. data/spec/spec_helper.rb +2 -2
  74. data/spec/support/configuration_helper.rb +1 -1
  75. metadata +81 -68
  76. data/app/decorators/models/solidus_backtracs/spree/shipment_decorator.rb +0 -33
  77. data/db/migrate/20210220093010_add_backtracs_api_sync_fields.rb +0 -8
  78. data/lib/solidus_backtracs/api/request_runner.rb +0 -109
  79. data/lib/solidus_backtracs.rb +0 -16
  80. data/spec/lib/solidus_backtracs_spec.rb +0 -9
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :solidus_bactracs do
4
+ desc 'Run export jobs to send shipments to Bactracs'
5
+ task export: :environment do
6
+ SolidusBactracs::Api::ScheduleShipmentSyncsJob.perform_later
7
+ end
8
+
9
+ desc "Verify bactracs RMA creation"
10
+ task verify_bactracs_sync: :environment do
11
+ Spree::Shipment.not_bactracs_sync_verified.find_each(batch_size: 200) do |shipment|
12
+ # set shipment sync at and bactracs_sync_verified_at attributes by verifying RMA
13
+ shipment.verify_bactracs_sync!
14
+ end
15
+ end
16
+ end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'lib/solidus_backtracs/version'
3
+ require_relative 'lib/solidus_bactracs/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'solidus_bactracs'
7
- spec.version = SolidusBacktracs::VERSION
7
+ spec.version = SolidusBactracs::VERSION
8
8
  spec.authors = ['Zeryab Ali', 'Zachary Jones']
9
9
  spec.email = 'techbilling@suvie.com'
10
10
 
@@ -15,6 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.metadata['homepage_uri'] = spec.homepage
16
16
  spec.metadata['source_code_uri'] = 'https://github.com/suvie-eng/solidus_bactracs/'
17
17
  spec.metadata['changelog_uri'] = 'https://github.com/suvie-eng/solidus_bactracs/blob/master/CHANGELOG.md'
18
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
18
19
 
19
20
  spec.required_ruby_version = Gem::Requirement.new('>= 2.5')
20
21
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe Spree::BacktracsController do
3
+ RSpec.describe Spree::BactracsController do
4
4
  render_views
5
5
 
6
6
  describe '#export' do
@@ -14,7 +14,7 @@ RSpec.describe Spree::BacktracsController do
14
14
 
15
15
  context 'when the authentication is valid' do
16
16
  it 'responds with 200 OK' do
17
- stub_backtracs_auth
17
+ stub_bactracs_auth
18
18
  create(:order_ready_to_ship)
19
19
 
20
20
  get :export,
@@ -27,8 +27,8 @@ RSpec.describe Spree::BacktracsController do
27
27
  expect(response.status).to eq(200)
28
28
  end
29
29
 
30
- it 'generates Backtracs-compliant XML' do
31
- stub_backtracs_auth
30
+ it 'generates Bactracs-compliant XML' do
31
+ stub_bactracs_auth
32
32
  create(:order_ready_to_ship)
33
33
 
34
34
  get :export, params: {
@@ -37,7 +37,7 @@ RSpec.describe Spree::BacktracsController do
37
37
  format: 'xml'
38
38
  }
39
39
 
40
- expect(response.body).to pass_validation('spec/fixtures/backtracs_xml_schema.xsd')
40
+ expect(response.body).to pass_validation('spec/fixtures/bactracs_xml_schema.xsd')
41
41
  end
42
42
  end
43
43
  end
@@ -46,7 +46,7 @@ RSpec.describe Spree::BacktracsController do
46
46
  context 'when the authentication is valid' do
47
47
  context 'when the shipment can be found' do
48
48
  it 'responds with 200 OK' do
49
- stub_backtracs_auth
49
+ stub_bactracs_auth
50
50
  shipment = create(:order_ready_to_ship).shipments.first
51
51
 
52
52
  post :shipnotify, params: {
@@ -60,7 +60,7 @@ RSpec.describe Spree::BacktracsController do
60
60
  end
61
61
 
62
62
  it 'updates the shipment' do
63
- stub_backtracs_auth
63
+ stub_bactracs_auth
64
64
  shipment = create(:order_ready_to_ship).shipments.first
65
65
 
66
66
  post :shipnotify, params: {
@@ -80,7 +80,7 @@ RSpec.describe Spree::BacktracsController do
80
80
 
81
81
  context 'when the shipment cannot be found' do
82
82
  it 'responds with 400 Bad Request' do
83
- stub_backtracs_auth
83
+ stub_bactracs_auth
84
84
  shipment = create(:order_ready_to_ship).shipments.first
85
85
 
86
86
  post :shipnotify, params: {
@@ -96,7 +96,7 @@ RSpec.describe Spree::BacktracsController do
96
96
  end
97
97
  end
98
98
 
99
- def stub_backtracs_auth(username = 'mario', password = 'lemieux')
99
+ def stub_bactracs_auth(username = 'mario', password = 'lemieux')
100
100
  stub_configuration(username: username, password: password)
101
101
  request.headers['Authorization'] = ActionController::HttpAuthentication::Basic.encode_credentials(username, password)
102
102
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe SolidusBacktracs::Api::ScheduleShipmentSyncsJob do
3
+ RSpec.describe SolidusBactracs::Api::ScheduleShipmentSyncsJob do
4
4
  it 'schedules the shipment sync in batches' do
5
5
  stub_configuration(api_batch_size: 2)
6
6
  shipments = create_list(:shipment, 3)
@@ -10,20 +10,20 @@ RSpec.describe SolidusBacktracs::Api::ScheduleShipmentSyncsJob do
10
10
  .and_yield(shipments[0..1])
11
11
  .and_yield([shipments.last])
12
12
  end
13
- allow(SolidusBacktracs::Shipment::PendingApiSyncQuery).to receive(:apply)
13
+ allow(SolidusBactracs::Shipment::PendingApiSyncQuery).to receive(:apply)
14
14
  .and_return(relation)
15
15
 
16
16
  described_class.perform_now
17
17
 
18
- expect(SolidusBacktracs::Api::SyncShipmentsJob).to have_been_enqueued.with(shipments[0..1])
19
- expect(SolidusBacktracs::Api::SyncShipmentsJob).to have_been_enqueued.with([shipments.last])
18
+ expect(SolidusBactracs::Api::SyncShipmentsJob).to have_been_enqueued.with(shipments[0..1])
19
+ expect(SolidusBactracs::Api::SyncShipmentsJob).to have_been_enqueued.with([shipments.last])
20
20
  end
21
21
 
22
22
  it 'reports any errors to the handler' do
23
23
  error_handler = instance_spy('Proc')
24
24
  stub_configuration(error_handler: error_handler)
25
25
  error = RuntimeError.new('Something went wrong')
26
- allow(SolidusBacktracs::Shipment::PendingApiSyncQuery).to receive(:apply).and_raise(error)
26
+ allow(SolidusBactracs::Shipment::PendingApiSyncQuery).to receive(:apply).and_raise(error)
27
27
 
28
28
  described_class.perform_now
29
29
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe SolidusBacktracs::Api::SyncShipmentsJob do
3
+ RSpec.describe SolidusBactracs::Api::SyncShipmentsJob do
4
4
  include ActiveSupport::Testing::TimeHelpers
5
5
 
6
6
  context 'when a shipment is syncable' do
@@ -20,7 +20,7 @@ RSpec.describe SolidusBacktracs::Api::SyncShipmentsJob do
20
20
  it 'retries intelligently when hitting a rate limit' do
21
21
  freeze_time do
22
22
  shipment = build_stubbed(:shipment) { |s| stub_syncability(s, true) }
23
- stub_failing_batch_syncer(SolidusBacktracs::Api::RateLimitedError.new(
23
+ stub_failing_batch_syncer(SolidusBactracs::Api::RateLimitedError.new(
24
24
  response_code: 429,
25
25
  response_headers: { 'X-Rate-Limit-Reset' => 30 },
26
26
  response_body: '{"message":"Too Many Requests"}',
@@ -39,7 +39,7 @@ RSpec.describe SolidusBacktracs::Api::SyncShipmentsJob do
39
39
  error_handler = instance_spy('Proc')
40
40
  stub_configuration(error_handler: error_handler)
41
41
  shipment = build_stubbed(:shipment) { |s| stub_syncability(s, true) }
42
- error = SolidusBacktracs::Api::RequestError.new(
42
+ error = SolidusBactracs::Api::RequestError.new(
43
43
  response_code: 500,
44
44
  response_headers: {},
45
45
  response_body: '{"message":"Internal Server Error"}',
@@ -64,7 +64,7 @@ RSpec.describe SolidusBacktracs::Api::SyncShipmentsJob do
64
64
  expect(batch_syncer).not_to have_received(:call)
65
65
  end
66
66
 
67
- it 'fires a solidus_backtracs.api.sync_skipped event' do
67
+ it 'fires a solidus_bactracs.api.sync_skipped event' do
68
68
  stub_const('Spree::Event', class_spy(Spree::Event))
69
69
  shipment = build_stubbed(:shipment) { |s| stub_syncability(s, false) }
70
70
  stub_successful_batch_syncer
@@ -72,7 +72,7 @@ RSpec.describe SolidusBacktracs::Api::SyncShipmentsJob do
72
72
  described_class.perform_now([shipment])
73
73
 
74
74
  expect(Spree::Event).to have_received(:fire).with(
75
- 'solidus_backtracs.api.sync_skipped',
75
+ 'solidus_bactracs.api.sync_skipped',
76
76
  shipment: shipment,
77
77
  )
78
78
  end
@@ -81,21 +81,21 @@ RSpec.describe SolidusBacktracs::Api::SyncShipmentsJob do
81
81
  private
82
82
 
83
83
  def stub_successful_batch_syncer
84
- instance_spy(SolidusBacktracs::Api::BatchSyncer).tap do |batch_syncer|
85
- allow(SolidusBacktracs::Api::BatchSyncer).to receive(:from_config).and_return(batch_syncer)
84
+ instance_spy(SolidusBactracs::Api::BatchSyncer).tap do |batch_syncer|
85
+ allow(SolidusBactracs::Api::BatchSyncer).to receive(:from_config).and_return(batch_syncer)
86
86
  end
87
87
  end
88
88
 
89
89
  def stub_failing_batch_syncer(error)
90
- instance_double(SolidusBacktracs::Api::BatchSyncer).tap do |batch_syncer|
91
- allow(SolidusBacktracs::Api::BatchSyncer).to receive(:from_config).and_return(batch_syncer)
90
+ instance_double(SolidusBactracs::Api::BatchSyncer).tap do |batch_syncer|
91
+ allow(SolidusBactracs::Api::BatchSyncer).to receive(:from_config).and_return(batch_syncer)
92
92
 
93
93
  allow(batch_syncer).to receive(:call).and_raise(error)
94
94
  end
95
95
  end
96
96
 
97
97
  def stub_syncability(shipment, result)
98
- allow(SolidusBacktracs::Api::ThresholdVerifier).to receive(:call)
98
+ allow(SolidusBactracs::Api::ThresholdVerifier).to receive(:call)
99
99
  .with(shipment)
100
100
  .and_return(result)
101
101
  end
@@ -1,10 +1,10 @@
1
- RSpec.describe SolidusBacktracs::Api::BatchSyncer do
1
+ RSpec.describe SolidusBactracs::Api::BatchSyncer do
2
2
  include ActiveSupport::Testing::TimeHelpers
3
3
 
4
4
  describe '.from_config' do
5
5
  it 'creates a syncer with the configured API client' do
6
- client = instance_double(SolidusBacktracs::Api::Client)
7
- allow(SolidusBacktracs::Api::Client).to receive(:from_config).and_return(client)
6
+ client = instance_double(SolidusBactracs::Api::Client)
7
+ allow(SolidusBactracs::Api::Client).to receive(:from_config).and_return(client)
8
8
  shipment_matcher = -> {}
9
9
  stub_configuration(api_shipment_matcher: shipment_matcher)
10
10
 
@@ -20,10 +20,10 @@ RSpec.describe SolidusBacktracs::Api::BatchSyncer do
20
20
  describe '#call' do
21
21
  context 'when the API call is successful' do
22
22
  context 'when the sync operation succeeded' do
23
- it 'updates the backtracs data on the shipment' do
23
+ it 'updates the bactracs data on the shipment' do
24
24
  freeze_time do
25
25
  shipment = instance_spy('Spree::Shipment', number: 'H123456')
26
- api_client = instance_double(SolidusBacktracs::Api::Client).tap do |client|
26
+ api_client = instance_double(SolidusBactracs::Api::Client).tap do |client|
27
27
  allow(client).to receive(:bulk_create_orders).with([shipment]).and_return(
28
28
  {
29
29
  'results' => [
@@ -40,15 +40,15 @@ RSpec.describe SolidusBacktracs::Api::BatchSyncer do
40
40
  build_batch_syncer(client: api_client).call([shipment])
41
41
 
42
42
  expect(shipment).to have_received(:update_columns).with(
43
- backtracs_synced_at: Time.zone.now,
43
+ bactracs_synced_at: Time.zone.now,
44
44
  )
45
45
  end
46
46
  end
47
47
 
48
- it 'emits a solidus_backtracs.api.sync_completed event' do
48
+ it 'emits a solidus_bactracs.api.sync_completed event' do
49
49
  stub_const('Spree::Event', class_spy(Spree::Event))
50
50
  shipment = instance_spy('Spree::Shipment', number: 'H123456')
51
- api_client = instance_double(SolidusBacktracs::Api::Client).tap do |client|
51
+ api_client = instance_double(SolidusBactracs::Api::Client).tap do |client|
52
52
  allow(client).to receive(:bulk_create_orders).with([shipment]).and_return(
53
53
  {
54
54
  'results' => [
@@ -65,7 +65,7 @@ RSpec.describe SolidusBacktracs::Api::BatchSyncer do
65
65
  build_batch_syncer(client: api_client).call([shipment])
66
66
 
67
67
  expect(Spree::Event).to have_received(:fire).with(
68
- 'solidus_backtracs.api.sync_completed',
68
+ 'solidus_bactracs.api.sync_completed',
69
69
  shipment: shipment,
70
70
  payload: {
71
71
  'orderNumber' => shipment.number,
@@ -77,9 +77,9 @@ RSpec.describe SolidusBacktracs::Api::BatchSyncer do
77
77
  end
78
78
 
79
79
  context 'when the sync operation failed' do
80
- it 'does not update the backtracs data on the shipment' do
80
+ it 'does not update the bactracs data on the shipment' do
81
81
  shipment = instance_spy('Spree::Shipment', number: 'H123456')
82
- api_client = instance_double(SolidusBacktracs::Api::Client).tap do |client|
82
+ api_client = instance_double(SolidusBactracs::Api::Client).tap do |client|
83
83
  allow(client).to receive(:bulk_create_orders).with([shipment]).and_return(
84
84
  {
85
85
  'results' => [
@@ -98,10 +98,10 @@ RSpec.describe SolidusBacktracs::Api::BatchSyncer do
98
98
  expect(shipment).not_to have_received(:update_columns)
99
99
  end
100
100
 
101
- it 'emits a solidus_backtracs.api.sync_failed event' do
101
+ it 'emits a solidus_bactracs.api.sync_failed event' do
102
102
  stub_const('Spree::Event', class_spy(Spree::Event))
103
103
  shipment = instance_spy('Spree::Shipment', number: 'H123456')
104
- api_client = instance_double(SolidusBacktracs::Api::Client).tap do |client|
104
+ api_client = instance_double(SolidusBactracs::Api::Client).tap do |client|
105
105
  allow(client).to receive(:bulk_create_orders).with([shipment]).and_return(
106
106
  {
107
107
  'results' => [
@@ -118,7 +118,7 @@ RSpec.describe SolidusBacktracs::Api::BatchSyncer do
118
118
  build_batch_syncer(client: api_client).call([shipment])
119
119
 
120
120
  expect(Spree::Event).to have_received(:fire).with(
121
- 'solidus_backtracs.api.sync_failed',
121
+ 'solidus_bactracs.api.sync_failed',
122
122
  shipment: shipment,
123
123
  payload: {
124
124
  'orderNumber' => shipment.number,
@@ -131,27 +131,27 @@ RSpec.describe SolidusBacktracs::Api::BatchSyncer do
131
131
  end
132
132
 
133
133
  context 'when the API call hits a rate limit' do
134
- it 'emits a solidus_backtracs.api.rate_limited event' do
134
+ it 'emits a solidus_bactracs.api.rate_limited event' do
135
135
  stub_const('Spree::Event', class_spy(Spree::Event))
136
136
  shipment = instance_double('Spree::Shipment')
137
- error = SolidusBacktracs::Api::RateLimitedError.new(
137
+ error = SolidusBactracs::Api::RateLimitedError.new(
138
138
  response_headers: { 'X-Rate-Limit-Reset' => 20 },
139
139
  response_body: '{"message":"Too Many Requests"}',
140
140
  response_code: 429,
141
141
  retry_in: 20.seconds,
142
142
  )
143
- api_client = instance_double(SolidusBacktracs::Api::Client).tap do |client|
143
+ api_client = instance_double(SolidusBactracs::Api::Client).tap do |client|
144
144
  allow(client).to receive(:bulk_create_orders).with([shipment]).and_raise(error)
145
145
  end
146
146
 
147
147
  begin
148
148
  build_batch_syncer(client: api_client).call([shipment])
149
- rescue SolidusBacktracs::Api::RateLimitedError
149
+ rescue SolidusBactracs::Api::RateLimitedError
150
150
  # We want to ignore the error here, since we're testing for the event.
151
151
  end
152
152
 
153
153
  expect(Spree::Event).to have_received(:fire).with(
154
- 'solidus_backtracs.api.rate_limited',
154
+ 'solidus_bactracs.api.rate_limited',
155
155
  shipments: [shipment],
156
156
  error: error,
157
157
  )
@@ -159,13 +159,13 @@ RSpec.describe SolidusBacktracs::Api::BatchSyncer do
159
159
 
160
160
  it 're-raises the error' do
161
161
  shipment = instance_double('Spree::Shipment')
162
- error = SolidusBacktracs::Api::RateLimitedError.new(
162
+ error = SolidusBactracs::Api::RateLimitedError.new(
163
163
  response_headers: { 'X-Rate-Limit-Reset' => 20 },
164
164
  response_body: '{"message":"Too Many Requests"}',
165
165
  response_code: 429,
166
166
  retry_in: 20.seconds,
167
167
  )
168
- api_client = instance_double(SolidusBacktracs::Api::Client).tap do |client|
168
+ api_client = instance_double(SolidusBactracs::Api::Client).tap do |client|
169
169
  allow(client).to receive(:bulk_create_orders).with([shipment]).and_raise(error)
170
170
  end
171
171
 
@@ -176,26 +176,26 @@ RSpec.describe SolidusBacktracs::Api::BatchSyncer do
176
176
  end
177
177
 
178
178
  context 'when the API call results in a server error' do
179
- it 'emits a solidus_backtracs.api.sync_errored event' do
179
+ it 'emits a solidus_bactracs.api.sync_errored event' do
180
180
  stub_const('Spree::Event', class_spy(Spree::Event))
181
181
  shipment = instance_double('Spree::Shipment')
182
- error = SolidusBacktracs::Api::RequestError.new(
182
+ error = SolidusBactracs::Api::RequestError.new(
183
183
  response_headers: {},
184
184
  response_body: '{"message":"Internal Server Error"}',
185
185
  response_code: 500,
186
186
  )
187
- api_client = instance_double(SolidusBacktracs::Api::Client).tap do |client|
187
+ api_client = instance_double(SolidusBactracs::Api::Client).tap do |client|
188
188
  allow(client).to receive(:bulk_create_orders).with([shipment]).and_raise(error)
189
189
  end
190
190
 
191
191
  begin
192
192
  build_batch_syncer(client: api_client).call([shipment])
193
- rescue SolidusBacktracs::Api::RequestError
193
+ rescue SolidusBactracs::Api::RequestError
194
194
  # We want to ignore the error here, since we're testing for the event.
195
195
  end
196
196
 
197
197
  expect(Spree::Event).to have_received(:fire).with(
198
- 'solidus_backtracs.api.sync_errored',
198
+ 'solidus_bactracs.api.sync_errored',
199
199
  shipments: [shipment],
200
200
  error: error,
201
201
  )
@@ -204,12 +204,12 @@ RSpec.describe SolidusBacktracs::Api::BatchSyncer do
204
204
  it 're-raises the error' do
205
205
  stub_const('Spree::Event', class_spy(Spree::Event))
206
206
  shipment = instance_double('Spree::Shipment')
207
- error = SolidusBacktracs::Api::RequestError.new(
207
+ error = SolidusBactracs::Api::RequestError.new(
208
208
  response_headers: {},
209
209
  response_body: '{"message":"Internal Server Error"}',
210
210
  response_code: 500,
211
211
  )
212
- api_client = instance_double(SolidusBacktracs::Api::Client).tap do |client|
212
+ api_client = instance_double(SolidusBactracs::Api::Client).tap do |client|
213
213
  allow(client).to receive(:bulk_create_orders).with([shipment]).and_raise(error)
214
214
  end
215
215
 
@@ -1,11 +1,11 @@
1
- RSpec.describe SolidusBacktracs::Api::Client do
1
+ RSpec.describe SolidusBactracs::Api::Client do
2
2
  describe '.from_config' do
3
3
  it 'generates a client from the configuration' do
4
- request_runner = instance_double('SolidusBacktracs::Api::RequestRunner')
4
+ request_runner = instance_double('SolidusBactracs::Api::RequestRunner')
5
5
  error_handler = instance_spy('Proc')
6
- shipment_serializer = instance_spy('SolidusBacktracs::Api::Serializer')
7
- allow(SolidusBacktracs::Api::RequestRunner).to receive(:from_config).and_return(request_runner)
8
- allow(SolidusBacktracs.config).to receive_messages(
6
+ shipment_serializer = instance_spy('SolidusBactracs::Api::Serializer')
7
+ allow(SolidusBactracs::Api::RequestRunner).to receive(:from_config).and_return(request_runner)
8
+ allow(SolidusBactracs.config).to receive_messages(
9
9
  error_handler: error_handler,
10
10
  api_shipment_serializer: shipment_serializer,
11
11
  )
@@ -22,7 +22,7 @@ RSpec.describe SolidusBacktracs::Api::Client do
22
22
 
23
23
  describe '#bulk_create_orders' do
24
24
  it 'calls the bulk order creation endpoint' do
25
- request_runner = instance_spy('SolidusBacktracs::Api::RequestRunner')
25
+ request_runner = instance_spy('SolidusBactracs::Api::RequestRunner')
26
26
  shipment = build_stubbed(:shipment)
27
27
  serialized_shipment = { 'key' => 'value' }
28
28
 
@@ -40,7 +40,7 @@ RSpec.describe SolidusBacktracs::Api::Client do
40
40
  end
41
41
 
42
42
  it 'does not fail for serialization errors' do
43
- request_runner = instance_spy('SolidusBacktracs::Api::RequestRunner')
43
+ request_runner = instance_spy('SolidusBactracs::Api::RequestRunner')
44
44
  successful_shipment = build_stubbed(:shipment)
45
45
  serialized_shipment = { 'key' => 'value' }
46
46
  failing_shipment = build_stubbed(:shipment)
@@ -77,7 +77,7 @@ RSpec.describe SolidusBacktracs::Api::Client do
77
77
  end
78
78
 
79
79
  it 'skips the API call if all shipments failed serialization' do
80
- request_runner = instance_spy('SolidusBacktracs::Api::RequestRunner')
80
+ request_runner = instance_spy('SolidusBactracs::Api::RequestRunner')
81
81
  failing_shipment = build_stubbed(:shipment)
82
82
 
83
83
  client = build_client(
@@ -96,14 +96,14 @@ RSpec.describe SolidusBacktracs::Api::Client do
96
96
 
97
97
  def build_client(options = {})
98
98
  described_class.new(**{
99
- request_runner: instance_spy('SolidusBacktracs::Api::RequestRunner'),
99
+ request_runner: instance_spy('SolidusBactracs::Api::RequestRunner'),
100
100
  error_handler: instance_spy('Proc'),
101
101
  shipment_serializer: stub_shipment_serializer,
102
102
  }.merge(options))
103
103
  end
104
104
 
105
105
  def stub_shipment_serializer(results_map = {})
106
- serializer = class_spy('SolidusBacktracs::Api::Serializer')
106
+ serializer = class_spy('SolidusBactracs::Api::Serializer')
107
107
 
108
108
  results_map.each_pair do |shipment, result_or_error|
109
109
  stub = allow(serializer).to receive(:call).with(shipment)
@@ -1,4 +1,4 @@
1
- RSpec.describe SolidusBacktracs::Api::RateLimitedError do
1
+ RSpec.describe SolidusBactracs::Api::RateLimitedError do
2
2
  describe '.from_response' do
3
3
  it 'extracts the status code, body, headers and retry time from the response' do
4
4
  response = instance_double(
@@ -1,4 +1,4 @@
1
- RSpec.describe SolidusBacktracs::Api::RequestError do
1
+ RSpec.describe SolidusBactracs::Api::RequestError do
2
2
  describe '.from_response' do
3
3
  it 'extracts the status code, body and headers from the response' do
4
4
  response = instance_double(
@@ -1,4 +1,4 @@
1
- RSpec.describe SolidusBacktracs::Api::RequestRunner do
1
+ RSpec.describe SolidusBactracs::Api::RequestRunner do
2
2
  #TODO
3
3
  describe '.from_config' do
4
4
  it 'builds a runner using credentials from the configuration' do
@@ -43,7 +43,7 @@ RSpec.describe SolidusBacktracs::Api::RequestRunner do
43
43
 
44
44
  expect {
45
45
  request_runner.call(:post, '/test')
46
- }.to raise_error(SolidusBacktracs::Api::RateLimitedError)
46
+ }.to raise_error(SolidusBactracs::Api::RateLimitedError)
47
47
  end
48
48
  end
49
49
 
@@ -58,7 +58,7 @@ RSpec.describe SolidusBacktracs::Api::RequestRunner do
58
58
 
59
59
  expect {
60
60
  request_runner.call(:post, '/test')
61
- }.to raise_error(SolidusBacktracs::Api::RequestError)
61
+ }.to raise_error(SolidusBactracs::Api::RequestError)
62
62
  end
63
63
  end
64
64
  end
@@ -1,4 +1,4 @@
1
- RSpec.describe SolidusBacktracs::Api::ShipmentSerializer do
1
+ RSpec.describe SolidusBactracs::Api::ShipmentSerializer do
2
2
  describe '#call' do
3
3
  it 'serializes the shipment' do
4
4
  shipment = create(:order_ready_to_ship).shipments.first
@@ -1,7 +1,7 @@
1
- RSpec.describe SolidusBacktracs::Api::ThresholdVerifier do
1
+ RSpec.describe SolidusBactracs::Api::ThresholdVerifier do
2
2
  context "when the shipment's order was completed" do
3
- context 'when the shipment was never synced with Backtracs yet' do
4
- it 'returns true when the shipment was never synced with backtracs yet' do
3
+ context 'when the shipment was never synced with Bactracs yet' do
4
+ it 'returns true when the shipment was never synced with bactracs yet' do
5
5
  stub_configuration(api_sync_threshold: 10.minutes)
6
6
  shipment = create(:order_ready_to_ship).shipments.first
7
7
 
@@ -18,22 +18,22 @@ RSpec.describe SolidusBacktracs::Api::ThresholdVerifier do
18
18
  end
19
19
  end
20
20
 
21
- context 'when the shipment was already synced with Backtracs' do
22
- it 'returns true when the shipment is pending a Backtracs re-sync' do
21
+ context 'when the shipment was already synced with Bactracs' do
22
+ it 'returns true when the shipment is pending a Bactracs re-sync' do
23
23
  stub_configuration(api_sync_threshold: 10.minutes)
24
24
  shipment = create(:order_ready_to_ship).shipments.first.tap do |s|
25
25
  s.order.update_columns(updated_at: 4.minutes.ago)
26
- s.update_columns(backtracs_synced_at: 5.minutes.ago)
26
+ s.update_columns(bactracs_synced_at: 5.minutes.ago)
27
27
  end
28
28
 
29
29
  expect(described_class.call(shipment)).to eq(true)
30
30
  end
31
31
 
32
- it 'returns false when the shipment is up-to-date in Backtracs' do
32
+ it 'returns false when the shipment is up-to-date in Bactracs' do
33
33
  stub_configuration(api_sync_threshold: 10.minutes)
34
34
  shipment = create(:order_ready_to_ship).shipments.first.tap do |s|
35
35
  s.order.update_columns(updated_at: 6.minutes.ago)
36
- s.update_columns(backtracs_synced_at: 5.minutes.ago)
36
+ s.update_columns(bactracs_synced_at: 5.minutes.ago)
37
37
  end
38
38
 
39
39
  expect(described_class.call(shipment)).to eq(false)
@@ -43,7 +43,7 @@ RSpec.describe SolidusBacktracs::Api::ThresholdVerifier do
43
43
  stub_configuration(api_sync_threshold: 10.minutes)
44
44
  shipment = create(:order_ready_to_ship).shipments.first.tap do |s|
45
45
  s.order.update_columns(updated_at: 11.minutes.ago)
46
- s.update_columns(backtracs_synced_at: 12.minutes.ago)
46
+ s.update_columns(bactracs_synced_at: 12.minutes.ago)
47
47
  end
48
48
 
49
49
  expect(described_class.call(shipment)).to eq(false)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe SolidusBacktracs::ShipmentNotice do
3
+ RSpec.describe SolidusBactracs::ShipmentNotice do
4
4
  shared_examples 'ships or updates the shipment' do
5
5
  context 'when the order was not shipped yet' do
6
6
  # rubocop:disable RSpec/MultipleExpectations
@@ -60,7 +60,7 @@ RSpec.describe SolidusBacktracs::ShipmentNotice do
60
60
 
61
61
  shipment_notice = build_shipment_notice(order.shipments.first)
62
62
 
63
- expect { shipment_notice.apply }.to raise_error(SolidusBacktracs::PaymentError) do |e|
63
+ expect { shipment_notice.apply }.to raise_error(SolidusBactracs::PaymentError) do |e|
64
64
  expect(e.cause).to be_instance_of(Spree::Core::GatewayError)
65
65
  end
66
66
  end
@@ -84,7 +84,7 @@ RSpec.describe SolidusBacktracs::ShipmentNotice do
84
84
 
85
85
  shipment_notice = build_shipment_notice(order.shipments.first)
86
86
 
87
- expect { shipment_notice.apply }.to raise_error(SolidusBacktracs::OrderNotPaidError)
87
+ expect { shipment_notice.apply }.to raise_error(SolidusBactracs::OrderNotPaidError)
88
88
  end
89
89
  end
90
90
  end
@@ -103,7 +103,7 @@ RSpec.describe SolidusBacktracs::ShipmentNotice do
103
103
  end
104
104
 
105
105
  def build_shipment_notice(shipment, shipment_tracking: '1Z1231234')
106
- SolidusBacktracs::ShipmentNotice.new(
106
+ SolidusBactracs::ShipmentNotice.new(
107
107
  shipment_number: shipment.number,
108
108
  shipment_tracking: shipment_tracking,
109
109
  )
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe SolidusBactracs do
4
+ describe 'VERSION' do
5
+ it 'is defined' do
6
+ expect(SolidusBactracs::VERSION).to be_present
7
+ end
8
+ end
9
+ end
@@ -4,7 +4,7 @@ RSpec.describe Spree::Shipment do
4
4
  describe '.between' do
5
5
  it 'delegates to BetweenQuery' do
6
6
  shipment = build_stubbed(:shipment)
7
- allow(SolidusBacktracs::Shipment::BetweenQuery).to receive(:apply).with(
7
+ allow(SolidusBactracs::Shipment::BetweenQuery).to receive(:apply).with(
8
8
  any_args,
9
9
  from: Time.zone.yesterday,
10
10
  to: Time.zone.today,
@@ -29,7 +29,7 @@ RSpec.describe Spree::Shipment do
29
29
  describe '.exportable' do
30
30
  it 'delegates to ExportableQuery' do
31
31
  shipment = build_stubbed(:shipment)
32
- allow(SolidusBacktracs::Shipment::ExportableQuery).to receive(:apply).and_return([shipment])
32
+ allow(SolidusBactracs::Shipment::ExportableQuery).to receive(:apply).and_return([shipment])
33
33
 
34
34
  result = Spree::Deprecation.silence do
35
35
  described_class.exportable
@@ -1,4 +1,4 @@
1
- RSpec.describe SolidusBacktracs::Shipment::BetweenQuery do
1
+ RSpec.describe SolidusBactracs::Shipment::BetweenQuery do
2
2
  describe '.apply' do
3
3
  it 'returns shipments whose updated_at falls within the given time range' do
4
4
  shipment = create(:shipment) { |s| s.update_column(:updated_at, Time.zone.now) }
@@ -1,4 +1,4 @@
1
- RSpec.describe SolidusBacktracs::Shipment::ExportableQuery do
1
+ RSpec.describe SolidusBactracs::Shipment::ExportableQuery do
2
2
  describe '.apply' do
3
3
  context 'when capture_at_notification is false and export_canceled_shipments is false' do
4
4
  it 'returns ready shipments from complete orders' do