solidus_easypost 1.0.3 → 3.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 (97) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +41 -0
  3. data/.gem_release.yml +5 -0
  4. data/.github/stale.yml +17 -0
  5. data/.github_changelog_generator +2 -0
  6. data/.gitignore +21 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +7 -0
  9. data/.rubocop_todo.yml +36 -0
  10. data/CHANGELOG.md +113 -0
  11. data/Gemfile +33 -0
  12. data/LICENSE +26 -0
  13. data/README.md +194 -0
  14. data/Rakefile +6 -0
  15. data/app/controllers/spree/admin/postage_labels_controller.rb +20 -0
  16. data/app/decorators/models/solidus_easypost/spree/carton_decorator.rb +38 -0
  17. data/app/decorators/models/solidus_easypost/spree/shipment_decorator.rb +47 -0
  18. data/app/decorators/models/solidus_easypost/spree/shipping_rate_decorator.rb +13 -0
  19. data/app/models/solidus_easypost/parcel_dimension.rb +34 -0
  20. data/app/models/solidus_easypost/return_authorization.rb +27 -0
  21. data/app/overrides/spree/admin/orders/_shipment/add_postage_label.html.erb.deface +10 -0
  22. data/bin/console +17 -0
  23. data/bin/rails +7 -0
  24. data/bin/rails-engine +13 -0
  25. data/bin/rails-sandbox +16 -0
  26. data/bin/rake +7 -0
  27. data/bin/sandbox +86 -0
  28. data/bin/setup +8 -0
  29. data/config/initializers/webhooks.rb +7 -0
  30. data/config/locales/en.yml +8 -0
  31. data/config/routes.rb +9 -0
  32. data/db/migrate/20140515024440_add_easy_post_fields_to_shipping_rate.rb +9 -0
  33. data/db/migrate/20201025110912_add_tracker_id_to_cartons.rb +6 -0
  34. data/lib/generators/solidus_easypost/install/install_generator.rb +28 -0
  35. data/lib/generators/solidus_easypost/install/templates/initializer.rb +26 -0
  36. data/lib/solidus_easypost/address_builder.rb +45 -0
  37. data/lib/solidus_easypost/calculator/base_dimension_calculator.rb +28 -0
  38. data/lib/solidus_easypost/calculator/weight_dimension_calculator.rb +22 -0
  39. data/lib/solidus_easypost/configuration.rb +34 -0
  40. data/lib/solidus_easypost/engine.rb +19 -0
  41. data/lib/solidus_easypost/errors/unknown_partial_resource_error.rb +11 -0
  42. data/lib/solidus_easypost/estimator.rb +37 -0
  43. data/lib/solidus_easypost/parcel_builder.rb +27 -0
  44. data/lib/solidus_easypost/shipment_builder.rb +32 -0
  45. data/lib/solidus_easypost/shipping_method_selector.rb +17 -0
  46. data/lib/solidus_easypost/shipping_rate_calculator.rb +9 -0
  47. data/lib/solidus_easypost/testing_support/factories/address_factory.rb +10 -0
  48. data/lib/solidus_easypost/testing_support/factories/product_factory.rb +7 -0
  49. data/lib/solidus_easypost/testing_support/factories/shipment_factory.rb +30 -0
  50. data/lib/solidus_easypost/testing_support/factories/shipping_method_factory.rb +8 -0
  51. data/lib/solidus_easypost/testing_support/factories/stock_location_factory.rb +10 -0
  52. data/lib/solidus_easypost/testing_support/factories/variant_factory.rb +7 -0
  53. data/lib/solidus_easypost/testing_support/factories.rb +3 -0
  54. data/lib/solidus_easypost/tracker_webhook_handler.rb +14 -0
  55. data/lib/solidus_easypost/version.rb +5 -0
  56. data/lib/solidus_easypost.rb +32 -0
  57. data/solidus_easypost.gemspec +41 -0
  58. data/spec/cassettes/address_builder/from_address.yml +65 -0
  59. data/spec/cassettes/address_builder/from_stock_location.yml +65 -0
  60. data/spec/cassettes/estimator.yml +269 -0
  61. data/spec/cassettes/integration/checkout.yml +377 -0
  62. data/spec/cassettes/integration/order_shipping/with_purchase_labels.yml +373 -0
  63. data/spec/cassettes/integration/order_shipping/without_purchase_labels.yml +251 -0
  64. data/spec/cassettes/parcel_builder/from_package.yml +63 -0
  65. data/spec/cassettes/parcel_builder/from_return_authorization.yml +63 -0
  66. data/spec/cassettes/postage_labels/show.yml +72 -0
  67. data/spec/cassettes/return_authorization.yml +310 -0
  68. data/spec/cassettes/shipment_builder/from_package.yml +251 -0
  69. data/spec/cassettes/shipment_builder/from_return_authorization.yml +251 -0
  70. data/spec/cassettes/shipment_builder/from_shipment.yml +250 -0
  71. data/spec/controllers/spree/admin/postage_labels_controller_spec.rb +18 -0
  72. data/spec/features/admin/postage_labels_spec.rb +18 -0
  73. data/spec/integration/checkout_spec.rb +45 -0
  74. data/spec/integration/order_shipping_spec.rb +33 -0
  75. data/spec/models/solidus_easypost/parcel_dimension_spec.rb +80 -0
  76. data/spec/models/solidus_easypost/return_authorization_spec.rb +17 -0
  77. data/spec/models/spree/carton_spec.rb +57 -0
  78. data/spec/models/spree/shipment_spec.rb +69 -0
  79. data/spec/models/spree/shipping_rate_spec.rb +23 -0
  80. data/spec/solidus_easypost/address_builder_spec.rb +17 -0
  81. data/spec/solidus_easypost/calculator/weight_dimension_calculator_spec.rb +39 -0
  82. data/spec/solidus_easypost/estimator_spec.rb +52 -0
  83. data/spec/solidus_easypost/parcel_builder_spec.rb +113 -0
  84. data/spec/solidus_easypost/shipment_builder_spec.rb +28 -0
  85. data/spec/solidus_easypost/shipping_method_selector_spec.rb +33 -0
  86. data/spec/solidus_easypost/shipping_rate_calculator_spec.rb +12 -0
  87. data/spec/solidus_easypost/tracker_webhook_handler_spec.rb +58 -0
  88. data/spec/solidus_easypost_spec.rb +19 -0
  89. data/spec/spec_helper.rb +31 -0
  90. data/spec/support/easypost.rb +5 -0
  91. data/spec/support/factory_bot.rb +3 -0
  92. data/spec/support/helpers/api_stubs.rb +40 -0
  93. data/spec/support/helpers/configuration.rb +28 -0
  94. data/spec/support/helpers/shipping_methods.rb +26 -0
  95. data/spec/support/solidus.rb +1 -0
  96. data/spec/support/vcr.rb +12 -0
  97. metadata +170 -142
@@ -0,0 +1,251 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.easypost.com/v2/addresses
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"address":{"street1":"131 S 8th Ave","city":"Manville","zip":"08835","phone":"(202)
9
+ 456-1111","name":"NY Warehouse","company":"NY Warehouse","state":"NJ","country":"US"}}'
10
+ headers:
11
+ Accept-Encoding:
12
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
13
+ Accept:
14
+ - "*/*"
15
+ User-Agent:
16
+ - EasyPost/v2 RubyClient/3.1.3 Ruby/2.7.1-p83
17
+ Content-Type:
18
+ - application/json
19
+ Authorization:
20
+ - Basic Q3Z6WXR1ZGE2S1JJOUpqRzdTQUhiQTo=
21
+ response:
22
+ status:
23
+ code: 201
24
+ message: Created
25
+ headers:
26
+ X-Frame-Options:
27
+ - SAMEORIGIN
28
+ X-Xss-Protection:
29
+ - 1; mode=block
30
+ X-Content-Type-Options:
31
+ - nosniff
32
+ X-Ep-Request-Uuid:
33
+ - 937dbd635f6b55deee812b080003fc20
34
+ Cache-Control:
35
+ - no-cache, no-store, must-revalidate, private
36
+ Pragma:
37
+ - no-cache
38
+ Expires:
39
+ - '0'
40
+ Location:
41
+ - "/api/v2/addresses/adr_78ab1c350ab541c099e8d7dca2a6d6f3"
42
+ Content-Type:
43
+ - application/json; charset=utf-8
44
+ X-Runtime:
45
+ - '0.148401'
46
+ Transfer-Encoding:
47
+ - chunked
48
+ X-Node:
49
+ - bigweb2sj
50
+ X-Version-Label:
51
+ - easypost-202009222104-7ce76ac125-master
52
+ X-Backend:
53
+ - easypost
54
+ X-Proxied:
55
+ - extlb1wdc a561deb64e
56
+ - intlb2sj 8df81f0396
57
+ - intlb2wdc 8df81f0396
58
+ Strict-Transport-Security:
59
+ - max-age=15768000; includeSubDomains; preload
60
+ body:
61
+ encoding: ASCII-8BIT
62
+ string: '{"id":"adr_78ab1c350ab541c099e8d7dca2a6d6f3","object":"Address","created_at":"2020-09-23T14:04:14Z","updated_at":"2020-09-23T14:04:14Z","name":"NY
63
+ Warehouse","company":"NY Warehouse","street1":"131 S 8th Ave","street2":null,"city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"2024561111","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}}'
64
+ recorded_at: Wed, 23 Sep 2020 14:04:14 GMT
65
+ - request:
66
+ method: post
67
+ uri: https://api.easypost.com/v2/addresses
68
+ body:
69
+ encoding: UTF-8
70
+ string: '{"address":{"street1":"A Different Road","street2":"Northwest","city":"Manville","zip":"08835","phone":"555-555-0199","company":"Company","name":"John
71
+ Doe","state":"NJ","country":"US"}}'
72
+ headers:
73
+ Accept-Encoding:
74
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
75
+ Accept:
76
+ - "*/*"
77
+ User-Agent:
78
+ - EasyPost/v2 RubyClient/3.1.3 Ruby/2.7.1-p83
79
+ Content-Type:
80
+ - application/json
81
+ Authorization:
82
+ - Basic Q3Z6WXR1ZGE2S1JJOUpqRzdTQUhiQTo=
83
+ response:
84
+ status:
85
+ code: 201
86
+ message: Created
87
+ headers:
88
+ X-Frame-Options:
89
+ - SAMEORIGIN
90
+ X-Xss-Protection:
91
+ - 1; mode=block
92
+ X-Content-Type-Options:
93
+ - nosniff
94
+ X-Ep-Request-Uuid:
95
+ - 937dbd635f6b55deee6f30ab0003fc49
96
+ Cache-Control:
97
+ - no-cache, no-store, must-revalidate, private
98
+ Pragma:
99
+ - no-cache
100
+ Expires:
101
+ - '0'
102
+ Location:
103
+ - "/api/v2/addresses/adr_079c8206e86f4163a1f6efa83cf5ee1e"
104
+ Content-Type:
105
+ - application/json; charset=utf-8
106
+ X-Runtime:
107
+ - '0.052933'
108
+ Transfer-Encoding:
109
+ - chunked
110
+ X-Node:
111
+ - bigweb9sj
112
+ X-Version-Label:
113
+ - easypost-202009222104-7ce76ac125-master
114
+ X-Backend:
115
+ - easypost
116
+ X-Proxied:
117
+ - extlb1wdc a561deb64e
118
+ - intlb1sj 8df81f0396
119
+ - intlb2wdc 8df81f0396
120
+ Strict-Transport-Security:
121
+ - max-age=15768000; includeSubDomains; preload
122
+ body:
123
+ encoding: ASCII-8BIT
124
+ string: '{"id":"adr_079c8206e86f4163a1f6efa83cf5ee1e","object":"Address","created_at":"2020-09-23T14:04:15Z","updated_at":"2020-09-23T14:04:15Z","name":"John
125
+ Doe","company":"Company","street1":"A Different Road","street2":"Northwest","city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"5555550199","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}}'
126
+ recorded_at: Wed, 23 Sep 2020 14:04:15 GMT
127
+ - request:
128
+ method: post
129
+ uri: https://api.easypost.com/v2/parcels
130
+ body:
131
+ encoding: UTF-8
132
+ string: '{"parcel":{"weight":10}}'
133
+ headers:
134
+ Accept-Encoding:
135
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
136
+ Accept:
137
+ - "*/*"
138
+ User-Agent:
139
+ - EasyPost/v2 RubyClient/3.1.3 Ruby/2.7.1-p83
140
+ Content-Type:
141
+ - application/json
142
+ Authorization:
143
+ - Basic Q3Z6WXR1ZGE2S1JJOUpqRzdTQUhiQTo=
144
+ response:
145
+ status:
146
+ code: 201
147
+ message: Created
148
+ headers:
149
+ X-Frame-Options:
150
+ - SAMEORIGIN
151
+ X-Xss-Protection:
152
+ - 1; mode=block
153
+ X-Content-Type-Options:
154
+ - nosniff
155
+ X-Ep-Request-Uuid:
156
+ - 937dbd625f6b55dfee6f1f050003fc7e
157
+ Cache-Control:
158
+ - no-cache, no-store, must-revalidate, private
159
+ Pragma:
160
+ - no-cache
161
+ Expires:
162
+ - '0'
163
+ Location:
164
+ - "/api/v2/parcels/prcl_da01bd8f5d924d17a96da73bcacaa247"
165
+ Content-Type:
166
+ - application/json; charset=utf-8
167
+ X-Runtime:
168
+ - '0.032663'
169
+ Transfer-Encoding:
170
+ - chunked
171
+ X-Node:
172
+ - bigweb9sj
173
+ X-Version-Label:
174
+ - easypost-202009222104-7ce76ac125-master
175
+ X-Backend:
176
+ - easypost
177
+ X-Proxied:
178
+ - extlb1wdc a561deb64e
179
+ - intlb1sj 8df81f0396
180
+ - intlb2wdc 8df81f0396
181
+ Strict-Transport-Security:
182
+ - max-age=15768000; includeSubDomains; preload
183
+ body:
184
+ encoding: ASCII-8BIT
185
+ string: '{"id":"prcl_da01bd8f5d924d17a96da73bcacaa247","object":"Parcel","created_at":"2020-09-23T14:04:15Z","updated_at":"2020-09-23T14:04:15Z","length":null,"width":null,"height":null,"predefined_package":null,"weight":10.0,"mode":"test"}'
186
+ recorded_at: Wed, 23 Sep 2020 14:04:15 GMT
187
+ - request:
188
+ method: post
189
+ uri: https://api.easypost.com/v2/shipments
190
+ body:
191
+ encoding: UTF-8
192
+ string: '{"shipment":{"from_address":{"id":"adr_78ab1c350ab541c099e8d7dca2a6d6f3"},"to_address":{"id":"adr_079c8206e86f4163a1f6efa83cf5ee1e"},"parcel":{"id":"prcl_da01bd8f5d924d17a96da73bcacaa247"},"is_return":true}}'
193
+ headers:
194
+ Accept-Encoding:
195
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
196
+ Accept:
197
+ - "*/*"
198
+ User-Agent:
199
+ - EasyPost/v2 RubyClient/3.1.3 Ruby/2.7.1-p83
200
+ Content-Type:
201
+ - application/json
202
+ Authorization:
203
+ - Basic Q3Z6WXR1ZGE2S1JJOUpqRzdTQUhiQTo=
204
+ response:
205
+ status:
206
+ code: 201
207
+ message: Created
208
+ headers:
209
+ X-Frame-Options:
210
+ - SAMEORIGIN
211
+ X-Xss-Protection:
212
+ - 1; mode=block
213
+ X-Content-Type-Options:
214
+ - nosniff
215
+ X-Ep-Request-Uuid:
216
+ - 937dbd625f6b55e0ee715dad0003fcb0
217
+ Cache-Control:
218
+ - no-cache, no-store, must-revalidate, private
219
+ Pragma:
220
+ - no-cache
221
+ Expires:
222
+ - '0'
223
+ Location:
224
+ - "/api/v2/shipments/shp_d05f260d382d48cea1e62472d169eb59"
225
+ Content-Type:
226
+ - application/json; charset=utf-8
227
+ X-Runtime:
228
+ - '0.184911'
229
+ Transfer-Encoding:
230
+ - chunked
231
+ X-Node:
232
+ - bigweb12sj
233
+ X-Version-Label:
234
+ - easypost-202009222104-7ce76ac125-master
235
+ X-Backend:
236
+ - easypost
237
+ X-Proxied:
238
+ - extlb1wdc a561deb64e
239
+ - intlb1wdc 8df81f0396
240
+ - intlb2sj 8df81f0396
241
+ Strict-Transport-Security:
242
+ - max-age=15768000; includeSubDomains; preload
243
+ body:
244
+ encoding: ASCII-8BIT
245
+ string: '{"created_at":"2020-09-23T14:04:16Z","is_return":true,"messages":[],"mode":"test","options":{"currency":"USD","payment":{"type":"SENDER"},"date_advance":0},"reference":null,"status":"unknown","tracking_code":null,"updated_at":"2020-09-23T14:04:16Z","batch_id":null,"batch_status":null,"batch_message":null,"customs_info":null,"from_address":{"id":"adr_78ab1c350ab541c099e8d7dca2a6d6f3","object":"Address","created_at":"2020-09-23T14:04:14Z","updated_at":"2020-09-23T14:04:14Z","name":"NY
246
+ Warehouse","company":"NY Warehouse","street1":"131 S 8th Ave","street2":null,"city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"2024561111","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"insurance":null,"order_id":null,"parcel":{"id":"prcl_da01bd8f5d924d17a96da73bcacaa247","object":"Parcel","created_at":"2020-09-23T14:04:15Z","updated_at":"2020-09-23T14:04:15Z","length":null,"width":null,"height":null,"predefined_package":null,"weight":10.0,"mode":"test"},"postage_label":null,"rates":[{"id":"rate_d39c45d3b89b4cf8acd313ef13507eb4","object":"Rate","created_at":"2020-09-23T14:04:16Z","updated_at":"2020-09-23T14:04:16Z","mode":"test","service":"Express","carrier":"USPS","rate":"23.00","currency":"USD","retail_rate":"26.75","retail_currency":"USD","list_rate":"23.00","list_currency":"USD","delivery_days":null,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":null,"shipment_id":"shp_d05f260d382d48cea1e62472d169eb59","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_cfa4646b92844d01b9af3e1aa1da4afd","object":"Rate","created_at":"2020-09-23T14:04:16Z","updated_at":"2020-09-23T14:04:16Z","mode":"test","service":"Priority","carrier":"USPS","rate":"7.02","currency":"USD","retail_rate":"7.50","retail_currency":"USD","list_rate":"7.02","list_currency":"USD","delivery_days":1,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":1,"shipment_id":"shp_d05f260d382d48cea1e62472d169eb59","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_c0558049b08b4ac68b0affe87e937356","object":"Rate","created_at":"2020-09-23T14:04:16Z","updated_at":"2020-09-23T14:04:16Z","mode":"test","service":"First","carrier":"USPS","rate":"3.93","currency":"USD","retail_rate":"5.30","retail_currency":"USD","list_rate":"3.93","list_currency":"USD","delivery_days":2,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":2,"shipment_id":"shp_d05f260d382d48cea1e62472d169eb59","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_b8f4316d65624742bfe244e104ed6d0f","object":"Rate","created_at":"2020-09-23T14:04:16Z","updated_at":"2020-09-23T14:04:16Z","mode":"test","service":"ParcelSelect","carrier":"USPS","rate":"6.92","currency":"USD","retail_rate":"6.92","retail_currency":"USD","list_rate":"6.92","list_currency":"USD","delivery_days":2,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":2,"shipment_id":"shp_d05f260d382d48cea1e62472d169eb59","carrier_account_id":"ca_mtb51Ve0"}],"refund_status":null,"scan_form":null,"selected_rate":null,"tracker":null,"to_address":{"id":"adr_079c8206e86f4163a1f6efa83cf5ee1e","object":"Address","created_at":"2020-09-23T14:04:15Z","updated_at":"2020-09-23T14:04:15Z","name":"John
247
+ Doe","company":"Company","street1":"A Different Road","street2":"Northwest","city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"5555550199","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"usps_zone":1,"return_address":{"id":"adr_78ab1c350ab541c099e8d7dca2a6d6f3","object":"Address","created_at":"2020-09-23T14:04:14Z","updated_at":"2020-09-23T14:04:14Z","name":"NY
248
+ Warehouse","company":"NY Warehouse","street1":"131 S 8th Ave","street2":null,"city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"2024561111","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"buyer_address":{"id":"adr_079c8206e86f4163a1f6efa83cf5ee1e","object":"Address","created_at":"2020-09-23T14:04:15Z","updated_at":"2020-09-23T14:04:15Z","name":"John
249
+ Doe","company":"Company","street1":"A Different Road","street2":"Northwest","city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"5555550199","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"forms":[],"fees":[],"id":"shp_d05f260d382d48cea1e62472d169eb59","object":"Shipment"}'
250
+ recorded_at: Wed, 23 Sep 2020 14:04:16 GMT
251
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,250 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.easypost.com/v2/addresses
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"address":{"street1":"A Different Road","street2":"Northwest","city":"Manville","zip":"08835","phone":"555-555-0199","company":"Company","name":"John
9
+ Doe","state":"NJ","country":"US"}}'
10
+ headers:
11
+ Accept-Encoding:
12
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
13
+ Accept:
14
+ - "*/*"
15
+ User-Agent:
16
+ - EasyPost/v2 RubyClient/3.1.3 Ruby/2.7.1-p83
17
+ Content-Type:
18
+ - application/json
19
+ Authorization:
20
+ - Basic Q3Z6WXR1ZGE2S1JJOUpqRzdTQUhiQTo=
21
+ response:
22
+ status:
23
+ code: 201
24
+ message: Created
25
+ headers:
26
+ X-Frame-Options:
27
+ - SAMEORIGIN
28
+ X-Xss-Protection:
29
+ - 1; mode=block
30
+ X-Content-Type-Options:
31
+ - nosniff
32
+ X-Ep-Request-Uuid:
33
+ - a371cbc25f6b5571ee6faf850003c17b
34
+ Cache-Control:
35
+ - no-cache, no-store, must-revalidate, private
36
+ Pragma:
37
+ - no-cache
38
+ Expires:
39
+ - '0'
40
+ Location:
41
+ - "/api/v2/addresses/adr_09b102bdfe394d3fb4e3244e8a39fa13"
42
+ Content-Type:
43
+ - application/json; charset=utf-8
44
+ X-Runtime:
45
+ - '0.055226'
46
+ Transfer-Encoding:
47
+ - chunked
48
+ X-Node:
49
+ - bigweb7sj
50
+ X-Version-Label:
51
+ - easypost-202009222104-7ce76ac125-master
52
+ X-Backend:
53
+ - easypost
54
+ X-Canary:
55
+ - direct
56
+ X-Proxied:
57
+ - extlb2wdc a561deb64e
58
+ - intlb1sj 8df81f0396
59
+ - intlb2wdc 8df81f0396
60
+ Strict-Transport-Security:
61
+ - max-age=15768000; includeSubDomains; preload
62
+ body:
63
+ encoding: ASCII-8BIT
64
+ string: '{"id":"adr_09b102bdfe394d3fb4e3244e8a39fa13","object":"Address","created_at":"2020-09-23T14:02:25Z","updated_at":"2020-09-23T14:02:25Z","name":"John
65
+ Doe","company":"Company","street1":"A Different Road","street2":"Northwest","city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"5555550199","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}}'
66
+ recorded_at: Wed, 23 Sep 2020 14:02:25 GMT
67
+ - request:
68
+ method: post
69
+ uri: https://api.easypost.com/v2/addresses
70
+ body:
71
+ encoding: UTF-8
72
+ string: '{"address":{"street1":"131 S 8th Ave","city":"Manville","zip":"08835","phone":"(202)
73
+ 456-1111","name":"NY Warehouse","company":"NY Warehouse","state":"NJ","country":"US"}}'
74
+ headers:
75
+ Accept-Encoding:
76
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
77
+ Accept:
78
+ - "*/*"
79
+ User-Agent:
80
+ - EasyPost/v2 RubyClient/3.1.3 Ruby/2.7.1-p83
81
+ Content-Type:
82
+ - application/json
83
+ Authorization:
84
+ - Basic Q3Z6WXR1ZGE2S1JJOUpqRzdTQUhiQTo=
85
+ response:
86
+ status:
87
+ code: 201
88
+ message: Created
89
+ headers:
90
+ X-Frame-Options:
91
+ - SAMEORIGIN
92
+ X-Xss-Protection:
93
+ - 1; mode=block
94
+ X-Content-Type-Options:
95
+ - nosniff
96
+ X-Ep-Request-Uuid:
97
+ - 3682484c5f6b5571ee7048a900032e90
98
+ Cache-Control:
99
+ - no-cache, no-store, must-revalidate, private
100
+ Pragma:
101
+ - no-cache
102
+ Expires:
103
+ - '0'
104
+ Location:
105
+ - "/api/v2/addresses/adr_6f05641e3fa94ffaab66b4c1c9b18aa2"
106
+ Content-Type:
107
+ - application/json; charset=utf-8
108
+ X-Runtime:
109
+ - '0.050116'
110
+ Transfer-Encoding:
111
+ - chunked
112
+ X-Node:
113
+ - bigweb2sj
114
+ X-Version-Label:
115
+ - easypost-202009222104-7ce76ac125-master
116
+ X-Backend:
117
+ - easypost
118
+ X-Proxied:
119
+ - extlb2sj a561deb64e
120
+ - intlb1sj 8df81f0396
121
+ Strict-Transport-Security:
122
+ - max-age=15768000; includeSubDomains; preload
123
+ body:
124
+ encoding: ASCII-8BIT
125
+ string: '{"id":"adr_6f05641e3fa94ffaab66b4c1c9b18aa2","object":"Address","created_at":"2020-09-23T14:02:26Z","updated_at":"2020-09-23T14:02:26Z","name":"NY
126
+ Warehouse","company":"NY Warehouse","street1":"131 S 8th Ave","street2":null,"city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"2024561111","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}}'
127
+ recorded_at: Wed, 23 Sep 2020 14:02:26 GMT
128
+ - request:
129
+ method: post
130
+ uri: https://api.easypost.com/v2/parcels
131
+ body:
132
+ encoding: UTF-8
133
+ string: '{"parcel":{"weight":"10.0"}}'
134
+ headers:
135
+ Accept-Encoding:
136
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
137
+ Accept:
138
+ - "*/*"
139
+ User-Agent:
140
+ - EasyPost/v2 RubyClient/3.1.3 Ruby/2.7.1-p83
141
+ Content-Type:
142
+ - application/json
143
+ Authorization:
144
+ - Basic Q3Z6WXR1ZGE2S1JJOUpqRzdTQUhiQTo=
145
+ response:
146
+ status:
147
+ code: 201
148
+ message: Created
149
+ headers:
150
+ X-Frame-Options:
151
+ - SAMEORIGIN
152
+ X-Xss-Protection:
153
+ - 1; mode=block
154
+ X-Content-Type-Options:
155
+ - nosniff
156
+ X-Ep-Request-Uuid:
157
+ - 3682484f5f6b5572ee726a1100032ebc
158
+ Cache-Control:
159
+ - no-cache, no-store, must-revalidate, private
160
+ Pragma:
161
+ - no-cache
162
+ Expires:
163
+ - '0'
164
+ Location:
165
+ - "/api/v2/parcels/prcl_3090e16064144a11bf83d2c91b4cc351"
166
+ Content-Type:
167
+ - application/json; charset=utf-8
168
+ X-Runtime:
169
+ - '0.038919'
170
+ Transfer-Encoding:
171
+ - chunked
172
+ X-Node:
173
+ - bigweb4sj
174
+ X-Version-Label:
175
+ - easypost-202009222104-7ce76ac125-master
176
+ X-Backend:
177
+ - easypost
178
+ X-Proxied:
179
+ - extlb2sj a561deb64e
180
+ - intlb2sj 8df81f0396
181
+ Strict-Transport-Security:
182
+ - max-age=15768000; includeSubDomains; preload
183
+ body:
184
+ encoding: ASCII-8BIT
185
+ string: '{"id":"prcl_3090e16064144a11bf83d2c91b4cc351","object":"Parcel","created_at":"2020-09-23T14:02:26Z","updated_at":"2020-09-23T14:02:26Z","length":null,"width":null,"height":null,"predefined_package":null,"weight":10.0,"mode":"test"}'
186
+ recorded_at: Wed, 23 Sep 2020 14:02:26 GMT
187
+ - request:
188
+ method: post
189
+ uri: https://api.easypost.com/v2/shipments
190
+ body:
191
+ encoding: UTF-8
192
+ string: '{"shipment":{"to_address":{"id":"adr_09b102bdfe394d3fb4e3244e8a39fa13"},"from_address":{"id":"adr_6f05641e3fa94ffaab66b4c1c9b18aa2"},"parcel":{"id":"prcl_3090e16064144a11bf83d2c91b4cc351"}}}'
193
+ headers:
194
+ Accept-Encoding:
195
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
196
+ Accept:
197
+ - "*/*"
198
+ User-Agent:
199
+ - EasyPost/v2 RubyClient/3.1.3 Ruby/2.7.1-p83
200
+ Content-Type:
201
+ - application/json
202
+ Authorization:
203
+ - Basic Q3Z6WXR1ZGE2S1JJOUpqRzdTQUhiQTo=
204
+ response:
205
+ status:
206
+ code: 201
207
+ message: Created
208
+ headers:
209
+ X-Frame-Options:
210
+ - SAMEORIGIN
211
+ X-Xss-Protection:
212
+ - 1; mode=block
213
+ X-Content-Type-Options:
214
+ - nosniff
215
+ X-Ep-Request-Uuid:
216
+ - 4c4cd68c5f6b5573ee726d6c000339ec
217
+ Cache-Control:
218
+ - no-cache, no-store, must-revalidate, private
219
+ Pragma:
220
+ - no-cache
221
+ Expires:
222
+ - '0'
223
+ Location:
224
+ - "/api/v2/shipments/shp_5bbe2086eb634ce08bf7c0bebebc4874"
225
+ Content-Type:
226
+ - application/json; charset=utf-8
227
+ X-Runtime:
228
+ - '0.197844'
229
+ Transfer-Encoding:
230
+ - chunked
231
+ X-Node:
232
+ - bigweb12sj
233
+ X-Version-Label:
234
+ - easypost-202009222104-7ce76ac125-master
235
+ X-Backend:
236
+ - easypost
237
+ X-Proxied:
238
+ - extlb1sj a561deb64e
239
+ - intlb1sj 8df81f0396
240
+ Strict-Transport-Security:
241
+ - max-age=15768000; includeSubDomains; preload
242
+ body:
243
+ encoding: ASCII-8BIT
244
+ string: '{"created_at":"2020-09-23T14:02:27Z","is_return":false,"messages":[],"mode":"test","options":{"currency":"USD","payment":{"type":"SENDER"},"date_advance":0},"reference":null,"status":"unknown","tracking_code":null,"updated_at":"2020-09-23T14:02:27Z","batch_id":null,"batch_status":null,"batch_message":null,"customs_info":null,"from_address":{"id":"adr_6f05641e3fa94ffaab66b4c1c9b18aa2","object":"Address","created_at":"2020-09-23T14:02:26Z","updated_at":"2020-09-23T14:02:26Z","name":"NY
245
+ Warehouse","company":"NY Warehouse","street1":"131 S 8th Ave","street2":null,"city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"2024561111","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"insurance":null,"order_id":null,"parcel":{"id":"prcl_3090e16064144a11bf83d2c91b4cc351","object":"Parcel","created_at":"2020-09-23T14:02:26Z","updated_at":"2020-09-23T14:02:26Z","length":null,"width":null,"height":null,"predefined_package":null,"weight":10.0,"mode":"test"},"postage_label":null,"rates":[{"id":"rate_37bb9c4b39044d119488f92f062dae0a","object":"Rate","created_at":"2020-09-23T14:02:27Z","updated_at":"2020-09-23T14:02:27Z","mode":"test","service":"Priority","carrier":"USPS","rate":"7.02","currency":"USD","retail_rate":"7.50","retail_currency":"USD","list_rate":"7.02","list_currency":"USD","delivery_days":1,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":1,"shipment_id":"shp_5bbe2086eb634ce08bf7c0bebebc4874","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_52b1e4a47f4b4f279be7f40b900bc343","object":"Rate","created_at":"2020-09-23T14:02:27Z","updated_at":"2020-09-23T14:02:27Z","mode":"test","service":"First","carrier":"USPS","rate":"3.93","currency":"USD","retail_rate":"5.30","retail_currency":"USD","list_rate":"3.93","list_currency":"USD","delivery_days":2,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":2,"shipment_id":"shp_5bbe2086eb634ce08bf7c0bebebc4874","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_3d34ec1d2215451fb96161aa92835683","object":"Rate","created_at":"2020-09-23T14:02:27Z","updated_at":"2020-09-23T14:02:27Z","mode":"test","service":"Express","carrier":"USPS","rate":"23.00","currency":"USD","retail_rate":"26.75","retail_currency":"USD","list_rate":"23.00","list_currency":"USD","delivery_days":null,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":null,"shipment_id":"shp_5bbe2086eb634ce08bf7c0bebebc4874","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_dbd69724f2714e6e9dd08dd1109ba659","object":"Rate","created_at":"2020-09-23T14:02:27Z","updated_at":"2020-09-23T14:02:27Z","mode":"test","service":"ParcelSelect","carrier":"USPS","rate":"6.92","currency":"USD","retail_rate":"6.92","retail_currency":"USD","list_rate":"6.92","list_currency":"USD","delivery_days":2,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":2,"shipment_id":"shp_5bbe2086eb634ce08bf7c0bebebc4874","carrier_account_id":"ca_mtb51Ve0"}],"refund_status":null,"scan_form":null,"selected_rate":null,"tracker":null,"to_address":{"id":"adr_09b102bdfe394d3fb4e3244e8a39fa13","object":"Address","created_at":"2020-09-23T14:02:25Z","updated_at":"2020-09-23T14:02:25Z","name":"John
246
+ Doe","company":"Company","street1":"A Different Road","street2":"Northwest","city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"5555550199","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"usps_zone":1,"return_address":{"id":"adr_6f05641e3fa94ffaab66b4c1c9b18aa2","object":"Address","created_at":"2020-09-23T14:02:26Z","updated_at":"2020-09-23T14:02:26Z","name":"NY
247
+ Warehouse","company":"NY Warehouse","street1":"131 S 8th Ave","street2":null,"city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"2024561111","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"buyer_address":{"id":"adr_09b102bdfe394d3fb4e3244e8a39fa13","object":"Address","created_at":"2020-09-23T14:02:25Z","updated_at":"2020-09-23T14:02:25Z","name":"John
248
+ Doe","company":"Company","street1":"A Different Road","street2":"Northwest","city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"5555550199","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"forms":[],"fees":[],"id":"shp_5bbe2086eb634ce08bf7c0bebebc4874","object":"Shipment"}'
249
+ recorded_at: Wed, 23 Sep 2020 14:02:27 GMT
250
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,18 @@
1
+ RSpec.describe Spree::Admin::PostageLabelsController do
2
+ stub_authorization!
3
+
4
+ describe "GET #show" do
5
+ it 'redirects to the postage label', vcr: { cassette_name: 'postage_labels/show' } do
6
+ order = create(:shipped_order) do |o|
7
+ o.shipments.first.selected_shipping_rate.update!(
8
+ easy_post_rate_id: 'rate_3de1727d77d74f1a8b1bf95fcd89e1ee',
9
+ easy_post_shipment_id: 'shp_5113aed5b7494a2b85b43960f1bb26c0',
10
+ )
11
+ end
12
+
13
+ get :show, params: { shipment_id: order.shipments.first.number }
14
+
15
+ expect(response).to redirect_to('https://easypost-files.s3-us-west-2.amazonaws.com/files/postage_label/20200924/4bff5f82521649e0b65f019fabe46e02.png')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe 'Postage labels' do
4
+ stub_authorization!
5
+
6
+ it "Downloading a shipment's postage label" do
7
+ order = create(:shipped_order) do |o|
8
+ o.shipments.first.selected_shipping_rate.update!(
9
+ easy_post_rate_id: 'rate_test',
10
+ easy_post_shipment_id: 'shp_test',
11
+ )
12
+ end
13
+
14
+ visit spree.edit_admin_order_path(order)
15
+
16
+ expect(page).to have_content(I18n.t('spree.open_postage_label'))
17
+ end
18
+ end
@@ -0,0 +1,45 @@
1
+ RSpec.describe 'Checkout' do
2
+ it 'retrieves the rates from EasyPost', vcr: { cassette_name: 'integration/checkout' } do
3
+ stub_easypost_config(purchase_labels: true)
4
+ stub_spree_preferences(require_payment_to_ship: false, track_inventory_levels: false)
5
+ use_easypost_estimator
6
+ create_easypost_shipping_methods
7
+
8
+ order = Spree::TestingSupport::OrderWalkthrough.up_to(:complete)
9
+ shipment = order.shipments.first
10
+ shipment.ship!
11
+
12
+ expect(order.state).to eq('complete')
13
+ expect(shipment.shipping_rates).to match_array([
14
+ have_attributes(
15
+ selected: true,
16
+ cost: 0.393e1,
17
+ name: 'USPS First',
18
+ easy_post_shipment_id: /shp_/,
19
+ easy_post_rate_id: /rate_/,
20
+ ),
21
+ have_attributes(
22
+ selected: false,
23
+ cost: 0.692e1,
24
+ name: 'USPS ParcelSelect',
25
+ easy_post_shipment_id: /shp_/,
26
+ easy_post_rate_id: /rate_/,
27
+ ),
28
+ have_attributes(
29
+ selected: false,
30
+ cost: 0.702e1,
31
+ name: 'USPS Priority',
32
+ easy_post_shipment_id: /shp_/,
33
+ easy_post_rate_id: /rate_/,
34
+ ),
35
+ have_attributes(
36
+ selected: false,
37
+ cost: 0.23e2,
38
+ name: 'USPS Express',
39
+ easy_post_shipment_id: /shp_/,
40
+ easy_post_rate_id: /rate_/,
41
+ ),
42
+ ])
43
+ expect(shipment.tracking).to be_present
44
+ end
45
+ end
@@ -0,0 +1,33 @@
1
+ RSpec.describe 'Order shipping' do
2
+ context 'with purchase_labels set to true', vcr: { cassette_name: 'integration/order_shipping/with_purchase_labels' } do
3
+ it 'buys the rate in EasyPost' do
4
+ stub_easypost_config(purchase_labels: true)
5
+ stub_spree_preferences(require_payment_to_ship: false, track_inventory_levels: false)
6
+ use_easypost_estimator
7
+ create_easypost_shipping_methods
8
+
9
+ order = Spree::TestingSupport::OrderWalkthrough.up_to(:complete)
10
+ shipment = order.shipments.first
11
+ shipment.ship!
12
+
13
+ expect(shipment).to be_shipped
14
+ expect(shipment.tracking).to be_present
15
+ end
16
+ end
17
+
18
+ context 'with purchase_labels set to false', vcr: { cassette_name: 'integration/order_shipping/without_purchase_labels' } do
19
+ it 'does not buy the rate in EasyPost' do
20
+ stub_easypost_config(purchase_labels: false)
21
+ stub_spree_preferences(require_payment_to_ship: false, track_inventory_levels: false)
22
+ use_easypost_estimator
23
+ create_easypost_shipping_methods
24
+
25
+ order = Spree::TestingSupport::OrderWalkthrough.up_to(:complete)
26
+ shipment = order.shipments.first
27
+ shipment.ship!
28
+
29
+ expect(shipment).to be_shipped
30
+ expect(shipment.tracking).not_to be_present
31
+ end
32
+ end
33
+ end