solidus_easypost 1.0.5 → 2.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 (77) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +35 -0
  3. data/.gem_release.yml +5 -0
  4. data/.github/stale.yml +17 -0
  5. data/.gitignore +20 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +4 -0
  8. data/.rubocop_todo.yml +71 -0
  9. data/Gemfile +33 -0
  10. data/LICENSE +26 -0
  11. data/README.md +104 -0
  12. data/Rakefile +6 -0
  13. data/app/decorators/models/solidus_easypost/spree/address_decorator.rb +30 -0
  14. data/app/decorators/models/solidus_easypost/spree/shipment_decorator.rb +52 -0
  15. data/app/decorators/models/solidus_easypost/spree/shipping_rate_decorator.rb +13 -0
  16. data/app/decorators/models/solidus_easypost/spree/stock/estimator_decorator.rb +15 -0
  17. data/app/decorators/models/solidus_easypost/spree/stock/package_decorator.rb +27 -0
  18. data/app/decorators/models/solidus_easypost/spree/stock_location_decorator.rb +26 -0
  19. data/app/models/solidus_easypost/estimator.rb +51 -0
  20. data/app/models/solidus_easypost/return_authorization.rb +38 -0
  21. data/bin/console +17 -0
  22. data/bin/rails +8 -0
  23. data/bin/rails-engine +15 -0
  24. data/bin/rails-sandbox +17 -0
  25. data/bin/rake +7 -0
  26. data/bin/sandbox +84 -0
  27. data/bin/setup +8 -0
  28. data/config/locales/en.yml +5 -0
  29. data/config/routes.rb +5 -0
  30. data/db/migrate/20140515024440_add_easy_post_fields_to_shipping_rate.rb +9 -0
  31. data/lib/generators/solidus_easypost/install/install_generator.rb +22 -0
  32. data/lib/solidus_easypost.rb +21 -0
  33. data/lib/solidus_easypost/configuration.rb +11 -0
  34. data/lib/solidus_easypost/engine.rb +19 -0
  35. data/lib/solidus_easypost/factories.rb +24 -0
  36. data/lib/solidus_easypost/version.rb +5 -0
  37. data/solidus_easypost.gemspec +38 -0
  38. data/spec/cassettes/SolidusEasypost_ReturnAuthorization/_easypost_shipment/is_an_EasyPost_Shipment_object.yml +271 -0
  39. data/spec/cassettes/SolidusEasypost_ReturnAuthorization/_return_label/has_the_correct_fields.yml +336 -0
  40. data/spec/cassettes/SolidusEasypost_ReturnAuthorization/_return_label/is_an_EasyPost_PackageLabel_object.yml +336 -0
  41. data/spec/cassettes/Spree_Address/_easypost_address/has_the_correct_attributes.yml +69 -0
  42. data/spec/cassettes/Spree_Address/_easypost_address/is_an_EasyPost_Address_object.yml +69 -0
  43. data/spec/cassettes/Spree_Order/_refresh_shipment_rates/can_get_rates_from_easy_post.yml +271 -0
  44. data/spec/cassettes/Spree_Order/_refresh_shipment_rates/create_shipping_methods_for_the_rates.yml +269 -0
  45. data/spec/cassettes/Spree_Shipment/_buys_a_shipping_rate_after_transitioning_to_ship.yml +403 -0
  46. data/spec/cassettes/Spree_Shipment/_easypost_shipment/when_it_is_a_new_shipment/behaves_like_an_easypost_shipment/is_an_EasyPost_Shipment_object.yml +271 -0
  47. data/spec/cassettes/Spree_Shipment/_easypost_shipment/when_it_is_a_new_shipment/calls_the_api.yml +200 -0
  48. data/spec/cassettes/Spree_Shipment/_easypost_shipment/when_it_is_an_existing_shipment/behaves_like_an_easypost_shipment/is_an_EasyPost_Shipment_object.yml +334 -0
  49. data/spec/cassettes/Spree_Shipment/_easypost_shipment/when_it_is_an_existing_shipment/loads_the_existing_shipment.yml +271 -0
  50. data/spec/cassettes/Spree_StockLocation/_easypost_address/has_the_correct_attributes.yml +69 -0
  51. data/spec/cassettes/Spree_StockLocation/_easypost_address/is_an_EasyPost_Address_object.yml +69 -0
  52. data/spec/cassettes/Spree_Stock_Estimator/_shipping_rates/when_rates_are_found/when_shipping_methods_dont_exist/creates_new_shipping_methods.yml +269 -0
  53. data/spec/cassettes/Spree_Stock_Estimator/_shipping_rates/when_rates_are_found/when_shipping_methods_dont_exist/is_empty.yml +269 -0
  54. data/spec/cassettes/Spree_Stock_Estimator/_shipping_rates/when_rates_are_found/when_shipping_methods_exist/create_no_new_shipping_methods.yml +269 -0
  55. data/spec/cassettes/Spree_Stock_Estimator/_shipping_rates/when_rates_are_found/when_shipping_methods_exist/when_shipping_methods_are_front_end_visible/has_the_correct_costs.yml +269 -0
  56. data/spec/cassettes/Spree_Stock_Estimator/_shipping_rates/when_rates_are_found/when_shipping_methods_exist/when_shipping_methods_are_front_end_visible/has_the_correct_names.yml +269 -0
  57. data/spec/cassettes/Spree_Stock_Estimator/_shipping_rates/when_rates_are_found/when_shipping_methods_exist/when_shipping_methods_are_not_front_end_visible/is_empty.yml +269 -0
  58. data/spec/cassettes/Spree_Stock_Package/_easypost_parcel/has_the_correct_attributes.yml +68 -0
  59. data/spec/cassettes/Spree_Stock_Package/_easypost_parcel/is_an_EasyPost_Parcel_object.yml +68 -0
  60. data/spec/cassettes/Spree_Stock_Package/_easypost_shipment/calls_the_api.yml +200 -0
  61. data/spec/cassettes/Spree_Stock_Package/_easypost_shipment/is_an_EasyPost_Shipment_object.yml +269 -0
  62. data/spec/factories/spree_modification.rb +25 -0
  63. data/spec/models/solidus_easypost/return_authorization_spec.rb +50 -0
  64. data/spec/models/spree/address_spec.rb +31 -0
  65. data/spec/models/spree/order_spec.rb +31 -0
  66. data/spec/models/spree/shipment_spec.rb +80 -0
  67. data/spec/models/spree/shipping_rate_spec.rb +16 -0
  68. data/spec/models/spree/stock/estimator_spec.rb +80 -0
  69. data/spec/models/spree/stock/package_spec.rb +35 -0
  70. data/spec/models/spree/stock_location_spec.rb +31 -0
  71. data/spec/solidus_easypost_spec.rb +19 -0
  72. data/spec/spec_helper.rb +27 -0
  73. data/spec/support/easypost.rb +3 -0
  74. data/spec/support/factory_bot.rb +3 -0
  75. data/spec/support/shipping_method_helpers.rb +43 -0
  76. data/spec/support/vcr.rb +11 -0
  77. metadata +145 -170
@@ -0,0 +1,269 @@
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%20Different%20Road&address[street2]=Northwest&address[city]=Manville&address[zip]=08835&address[phone]=555-555-0199&address[company]=Company&address[name]=John%20Doe&address[state]=NJ&address[country]=US
9
+ headers:
10
+ Accept:
11
+ - "*/*"
12
+ User-Agent:
13
+ - EasyPost/v2 RubyClient/3.0.1
14
+ Authorization:
15
+ - Bearer CvzYtuda6KRI9JjG7SAHbA
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ Content-Length:
19
+ - '222'
20
+ Accept-Encoding:
21
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
22
+ Host:
23
+ - api.easypost.com
24
+ response:
25
+ status:
26
+ code: 201
27
+ message: Created
28
+ headers:
29
+ X-Frame-Options:
30
+ - SAMEORIGIN
31
+ X-Xss-Protection:
32
+ - 1; mode=block
33
+ X-Content-Type-Options:
34
+ - nosniff
35
+ X-Ep-Request-Uuid:
36
+ - 43c6543d5dca6f18ee739b5600010e25
37
+ Cache-Control:
38
+ - no-cache, no-store, must-revalidate, private
39
+ Pragma:
40
+ - no-cache
41
+ Expires:
42
+ - '0'
43
+ Location:
44
+ - "/api/v2/addresses/adr_b74c72d0443545768f77f8d05debe7f3"
45
+ Content-Type:
46
+ - application/json; charset=utf-8
47
+ X-Runtime:
48
+ - '0.031339'
49
+ Transfer-Encoding:
50
+ - chunked
51
+ X-Node:
52
+ - bigweb4sj
53
+ X-Version-Label:
54
+ - easypost-201911120131-f5c72b1880-master
55
+ X-Backend:
56
+ - easypost
57
+ X-Proxied:
58
+ - extlb2wdc 2744487620
59
+ - intlb1sj ff5a2958df
60
+ - intlb1wdc ff5a2958df
61
+ Strict-Transport-Security:
62
+ - max-age=15768000; includeSubDomains; preload
63
+ body:
64
+ encoding: ASCII-8BIT
65
+ string: '{"id":"adr_b74c72d0443545768f77f8d05debe7f3","object":"Address","created_at":"2019-11-12T08:36:40Z","updated_at":"2019-11-12T08:36:40Z","name":"John
66
+ 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":{}}'
67
+ http_version:
68
+ recorded_at: Tue, 12 Nov 2019 08:36:40 GMT
69
+ - request:
70
+ method: post
71
+ uri: https://api.easypost.com/v2/addresses
72
+ body:
73
+ encoding: UTF-8
74
+ string: address[street1]=131%20S%208th%20Ave&address[city]=Manville&address[zip]=08835&address[phone]=(202)%20456-1111&address[name]=NY%20Warehouse&address[company]=NY%20Warehouse&address[state]=NJ&address[country]=US
75
+ headers:
76
+ Accept:
77
+ - "*/*"
78
+ User-Agent:
79
+ - EasyPost/v2 RubyClient/3.0.1
80
+ Authorization:
81
+ - Bearer CvzYtuda6KRI9JjG7SAHbA
82
+ Content-Type:
83
+ - application/x-www-form-urlencoded
84
+ Content-Length:
85
+ - '209'
86
+ Accept-Encoding:
87
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
88
+ Host:
89
+ - api.easypost.com
90
+ response:
91
+ status:
92
+ code: 201
93
+ message: Created
94
+ headers:
95
+ X-Frame-Options:
96
+ - SAMEORIGIN
97
+ X-Xss-Protection:
98
+ - 1; mode=block
99
+ X-Content-Type-Options:
100
+ - nosniff
101
+ X-Ep-Request-Uuid:
102
+ - 43c6543d5dca6f19ee82e94d00010e30
103
+ Cache-Control:
104
+ - no-cache, no-store, must-revalidate, private
105
+ Pragma:
106
+ - no-cache
107
+ Expires:
108
+ - '0'
109
+ Location:
110
+ - "/api/v2/addresses/adr_4957992d89794c328654aa530256ef8c"
111
+ Content-Type:
112
+ - application/json; charset=utf-8
113
+ X-Runtime:
114
+ - '0.036127'
115
+ Transfer-Encoding:
116
+ - chunked
117
+ X-Node:
118
+ - bigweb9sj
119
+ X-Version-Label:
120
+ - easypost-201911120131-f5c72b1880-master
121
+ X-Backend:
122
+ - easypost
123
+ X-Proxied:
124
+ - extlb2wdc 2744487620
125
+ - intlb2sj ff5a2958df
126
+ - intlb2wdc ff5a2958df
127
+ Strict-Transport-Security:
128
+ - max-age=15768000; includeSubDomains; preload
129
+ body:
130
+ encoding: ASCII-8BIT
131
+ string: '{"id":"adr_4957992d89794c328654aa530256ef8c","object":"Address","created_at":"2019-11-12T08:36:41Z","updated_at":"2019-11-12T08:36:41Z","name":"NY
132
+ 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":{}}'
133
+ http_version:
134
+ recorded_at: Tue, 12 Nov 2019 08:36:41 GMT
135
+ - request:
136
+ method: post
137
+ uri: https://api.easypost.com/v2/parcels
138
+ body:
139
+ encoding: UTF-8
140
+ string: parcel[weight]=10.0
141
+ headers:
142
+ Accept:
143
+ - "*/*"
144
+ User-Agent:
145
+ - EasyPost/v2 RubyClient/3.0.1
146
+ Authorization:
147
+ - Bearer CvzYtuda6KRI9JjG7SAHbA
148
+ Content-Type:
149
+ - application/x-www-form-urlencoded
150
+ Content-Length:
151
+ - '19'
152
+ Accept-Encoding:
153
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
154
+ Host:
155
+ - api.easypost.com
156
+ response:
157
+ status:
158
+ code: 201
159
+ message: Created
160
+ headers:
161
+ X-Frame-Options:
162
+ - SAMEORIGIN
163
+ X-Xss-Protection:
164
+ - 1; mode=block
165
+ X-Content-Type-Options:
166
+ - nosniff
167
+ X-Ep-Request-Uuid:
168
+ - 43c6543d5dca6f19ee80bcca00010e3c
169
+ Cache-Control:
170
+ - no-cache, no-store, must-revalidate, private
171
+ Pragma:
172
+ - no-cache
173
+ Expires:
174
+ - '0'
175
+ Location:
176
+ - "/api/v2/parcels/prcl_fcde49af147c484cbdf2a257511fea02"
177
+ Content-Type:
178
+ - application/json; charset=utf-8
179
+ X-Runtime:
180
+ - '0.029220'
181
+ Transfer-Encoding:
182
+ - chunked
183
+ X-Node:
184
+ - bigweb3sj
185
+ X-Version-Label:
186
+ - easypost-201911120131-f5c72b1880-master
187
+ X-Backend:
188
+ - easypost
189
+ X-Proxied:
190
+ - extlb2wdc 2744487620
191
+ - intlb2sj ff5a2958df
192
+ - intlb2wdc ff5a2958df
193
+ Strict-Transport-Security:
194
+ - max-age=15768000; includeSubDomains; preload
195
+ body:
196
+ encoding: ASCII-8BIT
197
+ string: '{"id":"prcl_fcde49af147c484cbdf2a257511fea02","object":"Parcel","created_at":"2019-11-12T08:36:41Z","updated_at":"2019-11-12T08:36:41Z","length":null,"width":null,"height":null,"predefined_package":null,"weight":10.0,"mode":"test"}'
198
+ http_version:
199
+ recorded_at: Tue, 12 Nov 2019 08:36:42 GMT
200
+ - request:
201
+ method: post
202
+ uri: https://api.easypost.com/v2/shipments
203
+ body:
204
+ encoding: UTF-8
205
+ string: shipment[to_address][id]=adr_b74c72d0443545768f77f8d05debe7f3&shipment[from_address][id]=adr_4957992d89794c328654aa530256ef8c&shipment[parcel][id]=prcl_fcde49af147c484cbdf2a257511fea02
206
+ headers:
207
+ Accept:
208
+ - "*/*"
209
+ User-Agent:
210
+ - EasyPost/v2 RubyClient/3.0.1
211
+ Authorization:
212
+ - Bearer CvzYtuda6KRI9JjG7SAHbA
213
+ Content-Type:
214
+ - application/x-www-form-urlencoded
215
+ Content-Length:
216
+ - '184'
217
+ Accept-Encoding:
218
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
219
+ Host:
220
+ - api.easypost.com
221
+ response:
222
+ status:
223
+ code: 201
224
+ message: Created
225
+ headers:
226
+ X-Frame-Options:
227
+ - SAMEORIGIN
228
+ X-Xss-Protection:
229
+ - 1; mode=block
230
+ X-Content-Type-Options:
231
+ - nosniff
232
+ X-Ep-Request-Uuid:
233
+ - 43c6543d5dca6f1aee72f56e00010e46
234
+ Cache-Control:
235
+ - no-cache, no-store, must-revalidate, private
236
+ Pragma:
237
+ - no-cache
238
+ Expires:
239
+ - '0'
240
+ Location:
241
+ - "/api/v2/shipments/shp_3958b968047a4c1d9642ccb56ef0ead8"
242
+ Content-Type:
243
+ - application/json; charset=utf-8
244
+ X-Runtime:
245
+ - '0.232564'
246
+ Transfer-Encoding:
247
+ - chunked
248
+ X-Node:
249
+ - bigweb3sj
250
+ X-Version-Label:
251
+ - easypost-201911120131-f5c72b1880-master
252
+ X-Backend:
253
+ - easypost
254
+ X-Proxied:
255
+ - extlb2wdc 2744487620
256
+ - intlb2sj ff5a2958df
257
+ - intlb2wdc ff5a2958df
258
+ Strict-Transport-Security:
259
+ - max-age=15768000; includeSubDomains; preload
260
+ body:
261
+ encoding: ASCII-8BIT
262
+ string: '{"created_at":"2019-11-12T08:36:42Z","is_return":false,"messages":[],"mode":"test","options":{"currency":"USD","payment":{"type":"SENDER"},"label_date":null,"date_advance":0},"reference":null,"status":"unknown","tracking_code":null,"updated_at":"2019-11-12T08:36:42Z","batch_id":null,"batch_status":null,"batch_message":null,"customs_info":null,"from_address":{"id":"adr_4957992d89794c328654aa530256ef8c","object":"Address","created_at":"2019-11-12T08:36:41Z","updated_at":"2019-11-12T08:36:41Z","name":"NY
263
+ 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_fcde49af147c484cbdf2a257511fea02","object":"Parcel","created_at":"2019-11-12T08:36:41Z","updated_at":"2019-11-12T08:36:41Z","length":null,"width":null,"height":null,"predefined_package":null,"weight":10.0,"mode":"test"},"postage_label":null,"rates":[{"id":"rate_f6e1ed2c9d0b43b385801279bea1797a","object":"Rate","created_at":"2019-11-12T08:36:42Z","updated_at":"2019-11-12T08:36:42Z","mode":"test","service":"ParcelSelect","carrier":"USPS","rate":"6.85","currency":"USD","retail_rate":"6.85","retail_currency":"USD","list_rate":"6.85","list_currency":"USD","delivery_days":2,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":2,"shipment_id":"shp_3958b968047a4c1d9642ccb56ef0ead8","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_4af07b1888144c44a7b4376e91050029","object":"Rate","created_at":"2019-11-12T08:36:42Z","updated_at":"2019-11-12T08:36:42Z","mode":"test","service":"Express","carrier":"USPS","rate":"22.74","currency":"USD","retail_rate":"25.60","retail_currency":"USD","list_rate":"22.74","list_currency":"USD","delivery_days":null,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":null,"shipment_id":"shp_3958b968047a4c1d9642ccb56ef0ead8","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_a7b3af1d16be4596b37db8b6b0b75260","object":"Rate","created_at":"2019-11-12T08:36:42Z","updated_at":"2019-11-12T08:36:42Z","mode":"test","service":"Priority","carrier":"USPS","rate":"6.95","currency":"USD","retail_rate":"7.35","retail_currency":"USD","list_rate":"6.95","list_currency":"USD","delivery_days":1,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":1,"shipment_id":"shp_3958b968047a4c1d9642ccb56ef0ead8","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_e7999eefbad4426ab2b452ddeaee5ccf","object":"Rate","created_at":"2019-11-12T08:36:42Z","updated_at":"2019-11-12T08:36:42Z","mode":"test","service":"First","carrier":"USPS","rate":"3.82","currency":"USD","retail_rate":"5.19","retail_currency":"USD","list_rate":"3.82","list_currency":"USD","delivery_days":2,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":2,"shipment_id":"shp_3958b968047a4c1d9642ccb56ef0ead8","carrier_account_id":"ca_mtb51Ve0"}],"refund_status":null,"scan_form":null,"selected_rate":null,"tracker":null,"to_address":{"id":"adr_b74c72d0443545768f77f8d05debe7f3","object":"Address","created_at":"2019-11-12T08:36:40Z","updated_at":"2019-11-12T08:36:40Z","name":"John
264
+ 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_4957992d89794c328654aa530256ef8c","object":"Address","created_at":"2019-11-12T08:36:41Z","updated_at":"2019-11-12T08:36:41Z","name":"NY
265
+ 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_b74c72d0443545768f77f8d05debe7f3","object":"Address","created_at":"2019-11-12T08:36:40Z","updated_at":"2019-11-12T08:36:40Z","name":"John
266
+ 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_3958b968047a4c1d9642ccb56ef0ead8","object":"Shipment"}'
267
+ http_version:
268
+ recorded_at: Tue, 12 Nov 2019 08:36:42 GMT
269
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spree/testing_support/factories'
4
+ require 'solidus_easypost/factories'
5
+
6
+ FactoryBot.modify do
7
+ factory :shipping_method do
8
+ admin_name { 'Stuff' }
9
+ available_to_users { true }
10
+ end
11
+
12
+ factory :stock_location do
13
+ address1 { '131 S 8th Ave' }
14
+ city { 'Manville' }
15
+ association(:state, name: 'New Jersey', abbr: 'NJ')
16
+ zipcode { '08835' }
17
+ end
18
+
19
+ factory :address do
20
+ address1 { '215 N 7th Ave' }
21
+ city { 'Manville' }
22
+ association(:state, name: 'New Jersey', abbr: 'NJ')
23
+ zipcode { '08835' }
24
+ end
25
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe SolidusEasypost::ReturnAuthorization, :vcr do
6
+ let(:auth) { described_class.new return_authorization }
7
+ let(:return_authorization) do
8
+ create :return_authorization do |ra|
9
+ ra.return_items << create(:return_item)
10
+ end
11
+ end
12
+ before { create :shipping_method, admin_name: 'USPS Priority' }
13
+
14
+ before { create :store }
15
+
16
+ describe '#easypost_shipment' do
17
+ subject { auth.easypost_shipment }
18
+
19
+ it 'is an EasyPost::Shipment object' do
20
+ expect(subject).to be_a(EasyPost::Shipment)
21
+ end
22
+ end
23
+
24
+ describe '#return_label' do
25
+ subject { auth.return_label shipment.rates.first }
26
+
27
+ let(:shipment) { auth.easypost_shipment }
28
+
29
+ it 'is an EasyPost::PackageLabel object' do
30
+ expect(subject).to be_a(EasyPost::PostageLabel)
31
+ end
32
+
33
+ it 'has the correct fields' do
34
+ expect(subject).to have_attributes(
35
+ id: "pl_37f765f275dd46c2866d0515694a306c",
36
+ object: "PostageLabel",
37
+ created_at: "2019-11-12T08:36:50Z",
38
+ updated_at: "2019-11-12T08:36:51Z",
39
+ date_advance: 0,
40
+ integrated_form: "none",
41
+ label_date: "2019-11-12T08:36:50Z",
42
+ label_resolution: 300,
43
+ label_size: "4x6",
44
+ label_type: "default",
45
+ label_url: "https://easypost-files.s3-us-west-2.amazonaws.com/files/postage_label/20191112/ebe045d367a742dd8bf718e63a58c390.png",
46
+ label_file_type: "image/png"
47
+ )
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Spree::Address, :vcr do
6
+ let(:address) { create :address }
7
+
8
+ describe '#easypost_address' do
9
+ subject { address.easypost_address }
10
+
11
+ it 'is an EasyPost::Address object' do
12
+ expect(subject).to be_a(EasyPost::Address)
13
+ end
14
+
15
+ it 'has the correct attributes' do
16
+ # combination of original address factory from easy post
17
+ # and the spree_modification factories
18
+ expect(subject).to have_attributes(
19
+ name: 'John Doe',
20
+ company: 'Company',
21
+ street1: '215 N 7th Ave',
22
+ street2: 'Northwest',
23
+ city: 'Manville',
24
+ state: 'NJ',
25
+ zip: '08835',
26
+ country: 'US',
27
+ phone: '5555550199'
28
+ )
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Spree::Order, :vcr do
6
+ let(:order) do
7
+ create(:order_with_line_items, line_items_count: 1) do |order|
8
+ order.variants.each { |v| v.update! weight: 10 }
9
+ end
10
+ end
11
+
12
+ describe '#refresh_shipment_rates' do
13
+ it "can get rates from easy post" do
14
+ order.refresh_shipment_rates
15
+
16
+ rates = order.shipments.first.shipping_rates
17
+
18
+ expect(rates.all? { |rate| rate.cost.present? }).to be_present
19
+ expect(rates.all?(&:easy_post_shipment_id?)).to be_present
20
+ expect(rates.all?(&:easy_post_rate_id?)).to be_present
21
+ end
22
+
23
+ it 'create shipping methods for the rates' do
24
+ order.refresh_shipment_rates
25
+
26
+ rates = order.shipments.first.shipping_rates
27
+
28
+ expect(rates).to(be_all { |rate| rate.shipping_method.present? })
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Spree::Shipment, :vcr do
6
+ let!(:shipment) { order.shipments.first }
7
+ let!(:order) do
8
+ create(:order_with_line_items, line_items_count: 1, ship_address: to) do |order|
9
+ order.variants.each { |v| v.update! weight: 10 }
10
+ end
11
+ end
12
+
13
+ let(:to) do
14
+ Spree::Address.create(
15
+ firstname: 'Newt',
16
+ lastname: 'Scamander',
17
+ address1: '200 19th St',
18
+ city: 'Birmingham',
19
+ state: Spree::State.first || create(:state),
20
+ country: Spree::Country.first || create(:country),
21
+ zipcode: 35_203,
22
+ phone: '123456789'
23
+ )
24
+ end
25
+
26
+ before do
27
+ create_shipping_methods
28
+ shipment.stock_location.update(
29
+ address1: '2630 Cahaba Rd',
30
+ city: 'Birmingham',
31
+ state: Spree::State.first,
32
+ country: Spree::Country.first,
33
+ zipcode: 35_223,
34
+ )
35
+ end
36
+
37
+ it "'buys' a shipping rate after transitioning to ship" do
38
+ shipment.refresh_rates
39
+ shipment.state = 'ready'
40
+
41
+ shipment.ship!
42
+ expect(shipment.tracking).to be_present
43
+ end
44
+
45
+ describe '#easypost_shipment' do
46
+ subject { shipment.easypost_shipment }
47
+
48
+ shared_examples 'an easypost shipment' do
49
+ it 'is an EasyPost::Shipment object' do
50
+ expect(subject).to be_a(EasyPost::Shipment)
51
+ end
52
+ end
53
+
54
+ context 'when it is a new shipment' do
55
+ it_behaves_like 'an easypost shipment'
56
+
57
+ it 'calls the api' do
58
+ expect(EasyPost::Shipment).to receive(:create).with(anything)
59
+ subject
60
+ end
61
+ end
62
+
63
+ context 'when it is an existing shipment' do
64
+ let(:new_shipment) { create :shipment }
65
+
66
+ before do
67
+ ep_id = shipment.easypost_shipment.id
68
+ shipment.shipping_rates.first.update selected: true, easy_post_shipment_id: ep_id
69
+ shipment.instance_variable_set('@ep_shipment', nil)
70
+ end
71
+
72
+ it_behaves_like 'an easypost shipment'
73
+
74
+ it 'loads the existing shipment' do
75
+ expect(EasyPost::Shipment).to receive(:retrieve).with(anything)
76
+ subject
77
+ end
78
+ end
79
+ end
80
+ end