shipwire 0.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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -3
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -1
  5. data/Gemfile +0 -1
  6. data/README.md +53 -29
  7. data/Rakefile +2 -3
  8. data/lib/generators/shipwire/install/install_generator.rb +13 -0
  9. data/lib/generators/shipwire/install/templates/config/initializers/shipwire.rb +27 -0
  10. data/lib/shipwire.rb +26 -33
  11. data/lib/shipwire/api.rb +7 -0
  12. data/lib/shipwire/configuration.rb +13 -3
  13. data/lib/shipwire/orders.rb +39 -0
  14. data/lib/shipwire/param_converter.rb +39 -0
  15. data/lib/shipwire/products.rb +53 -0
  16. data/lib/shipwire/products/base.rb +9 -0
  17. data/lib/shipwire/products/insert.rb +9 -0
  18. data/lib/shipwire/products/kit.rb +9 -0
  19. data/lib/shipwire/products/virtual_kit.rb +9 -0
  20. data/lib/shipwire/rate.rb +7 -0
  21. data/lib/shipwire/receivings.rb +50 -0
  22. data/lib/shipwire/request.rb +73 -0
  23. data/lib/shipwire/response.rb +79 -0
  24. data/lib/shipwire/returns.rb +35 -0
  25. data/lib/shipwire/secret.rb +20 -0
  26. data/lib/shipwire/stock.rb +7 -0
  27. data/lib/shipwire/utility.rb +22 -0
  28. data/lib/shipwire/version.rb +1 -1
  29. data/lib/shipwire/webhooks.rb +24 -0
  30. data/shipwire.gemspec +12 -15
  31. data/spec/features/access_spec.rb +61 -0
  32. data/spec/features/orders_spec.rb +280 -0
  33. data/spec/features/product_types_spec.rb +219 -0
  34. data/spec/features/products_spec.rb +282 -0
  35. data/spec/features/rate_spec.rb +50 -0
  36. data/spec/features/receivings_spec.rb +333 -0
  37. data/spec/features/returns_spec.rb +239 -0
  38. data/spec/features/secret_spec.rb +57 -0
  39. data/spec/features/stock_spec.rb +41 -0
  40. data/spec/features/webhooks_spec.rb +106 -0
  41. data/spec/spec_helper.rb +33 -12
  42. data/spec/support/shipwire.rb +10 -0
  43. data/spec/support/vcr.rb +9 -0
  44. data/spec/support/vcr_cassettes/credentials_incorrect.yml +47 -0
  45. data/spec/support/vcr_cassettes/credentials_missing.yml +47 -0
  46. data/spec/support/vcr_cassettes/order.yml +48 -0
  47. data/spec/support/vcr_cassettes/order_cancel.yml +54 -0
  48. data/spec/support/vcr_cassettes/order_cancel_fail.yml +47 -0
  49. data/spec/support/vcr_cassettes/order_find.yml +45 -0
  50. data/spec/support/vcr_cassettes/order_find_fail.yml +45 -0
  51. data/spec/support/vcr_cassettes/order_find_with_params.yml +45 -0
  52. data/spec/support/vcr_cassettes/order_holds.yml +50 -0
  53. data/spec/support/vcr_cassettes/order_holds_fail.yml +45 -0
  54. data/spec/support/vcr_cassettes/order_holds_with_params.yml +50 -0
  55. data/spec/support/vcr_cassettes/order_items.yml +45 -0
  56. data/spec/support/vcr_cassettes/order_items_fail.yml +45 -0
  57. data/spec/support/vcr_cassettes/order_returns.yml +47 -0
  58. data/spec/support/vcr_cassettes/order_returns_fail.yml +47 -0
  59. data/spec/support/vcr_cassettes/order_trackings.yml +45 -0
  60. data/spec/support/vcr_cassettes/order_trackings_fail.yml +45 -0
  61. data/spec/support/vcr_cassettes/order_update.yml +48 -0
  62. data/spec/support/vcr_cassettes/order_update_fail.yml +50 -0
  63. data/spec/support/vcr_cassettes/order_update_with_params.yml +48 -0
  64. data/spec/support/vcr_cassettes/order_with_warnings.yml +96 -0
  65. data/spec/support/vcr_cassettes/orders_list.yml +47 -0
  66. data/spec/support/vcr_cassettes/orders_list_with_params.yml +47 -0
  67. data/spec/support/vcr_cassettes/product.yml +48 -0
  68. data/spec/support/vcr_cassettes/product_base.yml +48 -0
  69. data/spec/support/vcr_cassettes/product_base_find.yml +48 -0
  70. data/spec/support/vcr_cassettes/product_base_find_fail.yml +47 -0
  71. data/spec/support/vcr_cassettes/product_base_retire_id.yml +47 -0
  72. data/spec/support/vcr_cassettes/product_base_retire_nonexistent.yml +47 -0
  73. data/spec/support/vcr_cassettes/product_base_update.yml +48 -0
  74. data/spec/support/vcr_cassettes/product_base_update_fail.yml +48 -0
  75. data/spec/support/vcr_cassettes/product_create_fail_with_invalid_classification.yml +51 -0
  76. data/spec/support/vcr_cassettes/product_find.yml +48 -0
  77. data/spec/support/vcr_cassettes/product_find_fail.yml +47 -0
  78. data/spec/support/vcr_cassettes/product_insert.yml +50 -0
  79. data/spec/support/vcr_cassettes/product_insert_find.yml +48 -0
  80. data/spec/support/vcr_cassettes/product_insert_find_fail.yml +47 -0
  81. data/spec/support/vcr_cassettes/product_insert_retire_id.yml +47 -0
  82. data/spec/support/vcr_cassettes/product_insert_retire_nonexistent.yml +47 -0
  83. data/spec/support/vcr_cassettes/product_insert_update.yml +49 -0
  84. data/spec/support/vcr_cassettes/product_insert_update_fail.yml +48 -0
  85. data/spec/support/vcr_cassettes/product_kit.yml +48 -0
  86. data/spec/support/vcr_cassettes/product_kit_find.yml +48 -0
  87. data/spec/support/vcr_cassettes/product_kit_find_fail.yml +47 -0
  88. data/spec/support/vcr_cassettes/product_kit_retire_id.yml +47 -0
  89. data/spec/support/vcr_cassettes/product_kit_retire_nonexistent.yml +47 -0
  90. data/spec/support/vcr_cassettes/product_kit_update.yml +48 -0
  91. data/spec/support/vcr_cassettes/product_kit_update_fail.yml +47 -0
  92. data/spec/support/vcr_cassettes/product_multiple_create_fail.yml +102 -0
  93. data/spec/support/vcr_cassettes/product_multiple_create_success.yml +100 -0
  94. data/spec/support/vcr_cassettes/product_retire_id.yml +47 -0
  95. data/spec/support/vcr_cassettes/product_retire_nonexistent.yml +47 -0
  96. data/spec/support/vcr_cassettes/product_update.yml +48 -0
  97. data/spec/support/vcr_cassettes/product_update_fail.yml +48 -0
  98. data/spec/support/vcr_cassettes/product_virtual_kit.yml +48 -0
  99. data/spec/support/vcr_cassettes/product_virtual_kit_find.yml +48 -0
  100. data/spec/support/vcr_cassettes/product_virtual_kit_find_fail.yml +47 -0
  101. data/spec/support/vcr_cassettes/product_virtual_kit_retire_id.yml +47 -0
  102. data/spec/support/vcr_cassettes/product_virtual_kit_retire_nonexistent.yml +47 -0
  103. data/spec/support/vcr_cassettes/product_virtual_kit_update.yml +49 -0
  104. data/spec/support/vcr_cassettes/product_virtual_kit_update_fail.yml +47 -0
  105. data/spec/support/vcr_cassettes/products_base_list.yml +49 -0
  106. data/spec/support/vcr_cassettes/products_base_list_with_params.yml +49 -0
  107. data/spec/support/vcr_cassettes/products_insert_list.yml +47 -0
  108. data/spec/support/vcr_cassettes/products_insert_list_with_params.yml +47 -0
  109. data/spec/support/vcr_cassettes/products_kit_list.yml +47 -0
  110. data/spec/support/vcr_cassettes/products_kit_list_with_params.yml +47 -0
  111. data/spec/support/vcr_cassettes/products_list.yml +49 -0
  112. data/spec/support/vcr_cassettes/products_list_with_params.yml +49 -0
  113. data/spec/support/vcr_cassettes/products_virtual_kit_list.yml +47 -0
  114. data/spec/support/vcr_cassettes/products_virtual_kit_list_with_params.yml +47 -0
  115. data/spec/support/vcr_cassettes/rate_find.yml +53 -0
  116. data/spec/support/vcr_cassettes/rate_find_fail.yml +50 -0
  117. data/spec/support/vcr_cassettes/receiving.yml +53 -0
  118. data/spec/support/vcr_cassettes/receiving_cancel.yml +98 -0
  119. data/spec/support/vcr_cassettes/receiving_cancel_label.yml +47 -0
  120. data/spec/support/vcr_cassettes/receiving_cancel_label_nonexistent.yml +47 -0
  121. data/spec/support/vcr_cassettes/receiving_find.yml +46 -0
  122. data/spec/support/vcr_cassettes/receiving_find_fail.yml +45 -0
  123. data/spec/support/vcr_cassettes/receiving_find_with_params.yml +48 -0
  124. data/spec/support/vcr_cassettes/receiving_holds.yml +47 -0
  125. data/spec/support/vcr_cassettes/receiving_holds_fail.yml +45 -0
  126. data/spec/support/vcr_cassettes/receiving_holds_with_params.yml +47 -0
  127. data/spec/support/vcr_cassettes/receiving_instructions_recipients.yml +45 -0
  128. data/spec/support/vcr_cassettes/receiving_instructions_recipients_fail.yml +45 -0
  129. data/spec/support/vcr_cassettes/receiving_items.yml +45 -0
  130. data/spec/support/vcr_cassettes/receiving_items_fail.yml +45 -0
  131. data/spec/support/vcr_cassettes/receiving_shipments.yml +45 -0
  132. data/spec/support/vcr_cassettes/receiving_shipments_fail.yml +45 -0
  133. data/spec/support/vcr_cassettes/receiving_tracking.yml +45 -0
  134. data/spec/support/vcr_cassettes/receiving_tracking_fail.yml +45 -0
  135. data/spec/support/vcr_cassettes/receiving_update.yml +53 -0
  136. data/spec/support/vcr_cassettes/receiving_update_fail.yml +49 -0
  137. data/spec/support/vcr_cassettes/receiving_update_with_params.yml +55 -0
  138. data/spec/support/vcr_cassettes/receivings_list.yml +53 -0
  139. data/spec/support/vcr_cassettes/receivings_list_with_params.yml +46 -0
  140. data/spec/support/vcr_cassettes/return.yml +98 -0
  141. data/spec/support/vcr_cassettes/return_cancel.yml +55 -0
  142. data/spec/support/vcr_cassettes/return_cancel_fail.yml +47 -0
  143. data/spec/support/vcr_cassettes/return_find.yml +47 -0
  144. data/spec/support/vcr_cassettes/return_find_fail.yml +45 -0
  145. data/spec/support/vcr_cassettes/return_find_with_params.yml +47 -0
  146. data/spec/support/vcr_cassettes/return_holds.yml +45 -0
  147. data/spec/support/vcr_cassettes/return_holds_fail.yml +45 -0
  148. data/spec/support/vcr_cassettes/return_holds_with_params.yml +45 -0
  149. data/spec/support/vcr_cassettes/return_items.yml +45 -0
  150. data/spec/support/vcr_cassettes/return_items_fail.yml +45 -0
  151. data/spec/support/vcr_cassettes/return_labels.yml +45 -0
  152. data/spec/support/vcr_cassettes/return_labels_fail.yml +45 -0
  153. data/spec/support/vcr_cassettes/return_trackings.yml +45 -0
  154. data/spec/support/vcr_cassettes/return_trackings_fail.yml +45 -0
  155. data/spec/support/vcr_cassettes/returns_list.yml +47 -0
  156. data/spec/support/vcr_cassettes/returns_list_with_params.yml +47 -0
  157. data/spec/support/vcr_cassettes/secret.yml +47 -0
  158. data/spec/support/vcr_cassettes/secret_find.yml +45 -0
  159. data/spec/support/vcr_cassettes/secret_find_fail.yml +43 -0
  160. data/spec/support/vcr_cassettes/secret_list.yml +45 -0
  161. data/spec/support/vcr_cassettes/secret_remove.yml +45 -0
  162. data/spec/support/vcr_cassettes/stock_with_params.yml +45 -0
  163. data/spec/support/vcr_cassettes/stock_with_params_no_sku.yml +45 -0
  164. data/spec/support/vcr_cassettes/stock_without_params.yml +45 -0
  165. data/spec/support/vcr_cassettes/webhook.yml +47 -0
  166. data/spec/support/vcr_cassettes/webhooks_create_insecure.yml +50 -0
  167. data/spec/support/vcr_cassettes/webhooks_find.yml +47 -0
  168. data/spec/support/vcr_cassettes/webhooks_find_fail.yml +47 -0
  169. data/spec/support/vcr_cassettes/webhooks_list.yml +47 -0
  170. data/spec/support/vcr_cassettes/webhooks_remove.yml +47 -0
  171. data/spec/support/vcr_cassettes/webhooks_update.yml +47 -0
  172. data/spec/support/vcr_cassettes/webhooks_update_fail.yml +49 -0
  173. data/spec/unit/shipwire/response_spec.rb +46 -0
  174. metadata +354 -80
  175. data/.env +0 -4
  176. data/.env.example +0 -4
  177. data/Gemfile.lock +0 -69
  178. data/lib/shipwire/fulfillment.rb +0 -100
  179. data/lib/shipwire/inventory.rb +0 -72
  180. data/lib/shipwire/service_request.rb +0 -42
  181. data/lib/shipwire/shipping_rate.rb +0 -121
  182. data/lib/shipwire/tracking.rb +0 -101
  183. data/spec/shipwire/fulfillment_spec.rb +0 -36
  184. data/spec/shipwire/inventory_spec.rb +0 -25
  185. data/spec/shipwire/shipping_rate_spec.rb +0 -62
  186. data/spec/shipwire/tracking_spec.rb +0 -20
@@ -0,0 +1,239 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe "Returns", type: :feature, vcr: true do
4
+ context "list" do
5
+ context "without params" do
6
+ it "is successful" do
7
+ VCR.use_cassette("returns_list") do
8
+ response = Shipwire::Returns.new.list
9
+
10
+ expect(response.ok?).to be_truthy
11
+ end
12
+ end
13
+ end
14
+
15
+ context "using params" do
16
+ it "is successful" do
17
+ VCR.use_cassette("returns_list_with_params") do
18
+ response = Shipwire::Returns.new.list(
19
+ status: "canceled"
20
+ )
21
+
22
+ expect(response.ok?).to be_truthy
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ context "management" do
29
+ # Took me WAY too long to realize I can't use the variable `return`
30
+ let!(:return_order) do
31
+ VCR.use_cassette("return") do
32
+ items = [{
33
+ sku: "TEST-PRODUCT",
34
+ quantity: 1
35
+ }]
36
+
37
+ order = Shipwire::Orders.new.create(
38
+ orderNo: FFaker::Product.model,
39
+ items: items,
40
+ options: {
41
+ currency: "USD"
42
+ },
43
+ shipTo: {
44
+ email: FFaker::Internet.email,
45
+ name: FFaker::Name.name,
46
+ address1: "540 West Boylston St.",
47
+ city: "Worcester",
48
+ state: "MA",
49
+ postalCode: "01606",
50
+ country: "US",
51
+ phone: FFaker::PhoneNumber.short_phone_number
52
+ }
53
+ )
54
+
55
+ order_id = order.body["resource"]["items"].first["resource"]["id"]
56
+
57
+ # There is an issue with returns. You can't create an order, then
58
+ # immediately return it. This is the functionality that a test would be
59
+ # doing. There is some kind of processing that needs to happen on
60
+ # Shipwire's end. Whatever needs to happen on their end takes time. The
61
+ # only way I was ever able to get the returns to work was to put a
62
+ # `binding.pry` between the part where it create an order and the part
63
+ # where it returns the order. Let it sit for about 5 minutes. Take a
64
+ # restroom break. Eat a snack. Then let the tests continue as normal.
65
+ Shipwire::Returns.new.create(
66
+ originalOrder: {
67
+ id: order_id
68
+ },
69
+ items: items,
70
+ options: {
71
+ emailCustomer: 0
72
+ }
73
+ )
74
+ end
75
+ end
76
+
77
+ context "find" do
78
+ context "without params" do
79
+ it "is successful" do
80
+ VCR.use_cassette("return_find") do
81
+ return_id =
82
+ return_order.body["resource"]["items"].first["resource"]["id"]
83
+
84
+ response = Shipwire::Returns.new.find(return_id)
85
+
86
+ expect(response.ok?).to be_truthy
87
+ end
88
+ end
89
+ end
90
+
91
+ context "using params" do
92
+ it "is successful" do
93
+ VCR.use_cassette("return_find_with_params") do
94
+ return_id =
95
+ return_order.body["resource"]["items"].first["resource"]["id"]
96
+
97
+ response = Shipwire::Returns.new.find(return_id, expand: "items")
98
+
99
+ expect(response.ok?).to be_truthy
100
+ end
101
+ end
102
+ end
103
+
104
+ it "fails when id does not exist" do
105
+ VCR.use_cassette("return_find_fail") do
106
+ response = Shipwire::Returns.new.find(0)
107
+
108
+ expect(response.ok?).to be_falsy
109
+ expect(response.error_summary).to eq 'Receiving Order not found.'
110
+ end
111
+ end
112
+ end
113
+
114
+ context "holds" do
115
+ context "without params" do
116
+ it "is successful" do
117
+ VCR.use_cassette("return_holds") do
118
+ return_id =
119
+ return_order.body["resource"]["items"].first["resource"]["id"]
120
+
121
+ response = Shipwire::Returns.new.holds(return_id)
122
+
123
+ expect(response.ok?).to be_truthy
124
+ end
125
+ end
126
+ end
127
+
128
+ context "using params" do
129
+ it "is successful" do
130
+ VCR.use_cassette("return_holds_with_params") do
131
+ return_id =
132
+ return_order.body["resource"]["items"].first["resource"]["id"]
133
+
134
+ response = Shipwire::Returns.new.holds(return_id, includeCleared: 0)
135
+
136
+ expect(response.ok?).to be_truthy
137
+ end
138
+ end
139
+ end
140
+
141
+ it "fails when id does not exist" do
142
+ VCR.use_cassette("return_holds_fail") do
143
+ response = Shipwire::Returns.new.holds(0)
144
+
145
+ expect(response.ok?).to be_falsy
146
+ expect(response.error_summary).to eq 'Receiving Order not found.'
147
+ end
148
+ end
149
+ end
150
+
151
+ context "items" do
152
+ it "is successful" do
153
+ VCR.use_cassette("return_items") do
154
+ return_id =
155
+ return_order.body["resource"]["items"].first["resource"]["id"]
156
+
157
+ response = Shipwire::Returns.new.items(return_id)
158
+
159
+ expect(response.ok?).to be_truthy
160
+ end
161
+ end
162
+
163
+ it "fails when id does not exist" do
164
+ VCR.use_cassette("return_items_fail") do
165
+ response = Shipwire::Returns.new.items(0)
166
+
167
+ expect(response.ok?).to be_falsy
168
+ expect(response.error_summary).to eq 'Receiving Order not found.'
169
+ end
170
+ end
171
+ end
172
+
173
+ context "trackings" do
174
+ it "is successful" do
175
+ VCR.use_cassette("return_trackings") do
176
+ return_id =
177
+ return_order.body["resource"]["items"].first["resource"]["id"]
178
+
179
+ response = Shipwire::Returns.new.trackings(return_id)
180
+
181
+ expect(response.ok?).to be_truthy
182
+ end
183
+ end
184
+
185
+ it "fails when id does not exist" do
186
+ VCR.use_cassette("return_trackings_fail") do
187
+ response = Shipwire::Returns.new.trackings(0)
188
+
189
+ expect(response.ok?).to be_falsy
190
+ expect(response.error_summary).to eq 'Receiving Order not found.'
191
+ end
192
+ end
193
+ end
194
+
195
+ context "labels" do
196
+ it "is successful" do
197
+ VCR.use_cassette("return_labels") do
198
+ return_id =
199
+ return_order.body["resource"]["items"].first["resource"]["id"]
200
+
201
+ response = Shipwire::Returns.new.labels(return_id)
202
+
203
+ expect(response.ok?).to be_truthy
204
+ end
205
+ end
206
+
207
+ it "fails when id does not exist" do
208
+ VCR.use_cassette("return_labels_fail") do
209
+ response = Shipwire::Returns.new.labels(0)
210
+
211
+ expect(response.ok?).to be_falsy
212
+ expect(response.error_summary).to eq 'Receiving Label not found.'
213
+ end
214
+ end
215
+ end
216
+
217
+ context "cancel" do
218
+ it "is successful" do
219
+ VCR.use_cassette("return_cancel") do
220
+ return_id =
221
+ return_order.body["resource"]["items"].first["resource"]["id"]
222
+
223
+ response = Shipwire::Returns.new.cancel(return_id)
224
+
225
+ expect(response.ok?).to be_truthy
226
+ end
227
+ end
228
+
229
+ it "fails when id does not exist" do
230
+ VCR.use_cassette("return_cancel_fail") do
231
+ response = Shipwire::Returns.new.cancel(0)
232
+
233
+ expect(response.ok?).to be_falsy
234
+ expect(response.error_summary).to eq 'Return Order not found.'
235
+ end
236
+ end
237
+ end
238
+ end
239
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe "Secret", type: :feature, vcr: true do
4
+ context "list" do
5
+ it "is successful" do
6
+ VCR.use_cassette("secret_list") do
7
+ response = Shipwire::Secret.new.list
8
+
9
+ expect(response.ok?).to be_truthy
10
+ end
11
+ end
12
+ end
13
+
14
+ context "management" do
15
+ let!(:secret) do
16
+ VCR.use_cassette("secret") do
17
+ Shipwire::Secret.new.create
18
+ end
19
+ end
20
+
21
+ context "find" do
22
+ it "is successful" do
23
+ VCR.use_cassette("secret_find") do
24
+ secret_id = secret.body["resource"]["id"]
25
+
26
+ response = Shipwire::Secret.new.find(secret_id)
27
+
28
+ expect(response.ok?).to be_truthy
29
+ end
30
+ end
31
+
32
+ it "fails when id does not exist" do
33
+ VCR.use_cassette("secret_find_fail") do
34
+ # ID 0 returns data for an existing secret at index 0 instead of a
35
+ # not found. Shipwire considers this an unintended feature or shortcut
36
+ # rather than a bug. So use 1 instead of 0.
37
+ response = Shipwire::Secret.new.find(1)
38
+
39
+ expect(response.ok?).to be_falsy
40
+ expect(response.error_summary).to eq 'Not found'
41
+ end
42
+ end
43
+ end
44
+
45
+ context "remove" do
46
+ it "is successful" do
47
+ VCR.use_cassette("secret_remove") do
48
+ secret_id = secret.body["resource"]["id"]
49
+
50
+ response = Shipwire::Secret.new.remove(secret_id)
51
+
52
+ expect(response.ok?).to be_truthy
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe "Stock", type: :feature, vcr: true do
4
+ context "list" do
5
+ context "without params" do
6
+ it "is successful" do
7
+ VCR.use_cassette("stock_without_params") do
8
+ response = Shipwire::Stock.new.list
9
+
10
+ expect(response.ok?).to be_truthy
11
+ end
12
+ end
13
+ end
14
+
15
+ context "with params" do
16
+ it "is successful" do
17
+ VCR.use_cassette("stock_with_params") do
18
+ response = Shipwire::Stock.new.list(
19
+ sku: "TEST-PRODUCT"
20
+ )
21
+
22
+ expect(response.ok?).to be_truthy
23
+ end
24
+ end
25
+ end
26
+
27
+ context "with params and non-existant SKU" do
28
+ it "is successful" do
29
+ # Returns a successful result. There is just no records in the result
30
+ # set because they were all filtered out. There are no errors.
31
+ VCR.use_cassette("stock_with_params_no_sku") do
32
+ response = Shipwire::Stock.new.list(
33
+ sku: "FAKE-PRODUCT"
34
+ )
35
+
36
+ expect(response.ok?).to be_truthy
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,106 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe "Webhooks", type: :feature, vcr: true do
4
+ context "list" do
5
+ it "is successful" do
6
+ VCR.use_cassette("webhooks_list") do
7
+ response = Shipwire::Webhooks.new.list
8
+
9
+ expect(response.ok?).to be_truthy
10
+ end
11
+ end
12
+ end
13
+
14
+ context "management" do
15
+ let(:webhook_topic) { "order.created" }
16
+ let(:webhook_url) { "https://www.shipwire.com/" }
17
+ let(:webhook_url_update) { "https://www.shipwire.com/about/" }
18
+
19
+ let!(:webhook) do
20
+ VCR.use_cassette("webhook") do
21
+ Shipwire::Webhooks.new.create(
22
+ topic: webhook_topic,
23
+ url: webhook_url
24
+ )
25
+ end
26
+ end
27
+
28
+ context "create" do
29
+ it "fails with non-https callback URL" do
30
+ VCR.use_cassette("webhooks_create_insecure") do
31
+ response = Shipwire::Webhooks.new.create(
32
+ topic: webhook_topic,
33
+ url: "http://www.reddit.com/"
34
+ )
35
+
36
+ expect(response.ok?).to be_falsy
37
+ expect(response.validation_errors).to include('Invalid URL')
38
+ end
39
+ end
40
+ end
41
+
42
+ context "find" do
43
+ it "is successful" do
44
+ VCR.use_cassette("webhooks_find") do
45
+ webhook_id = webhook.body["resource"]["items"].first["resource"]["id"]
46
+
47
+ response = Shipwire::Webhooks.new.find(webhook_id)
48
+
49
+ expect(response.ok?).to be_truthy
50
+ end
51
+ end
52
+
53
+ it "fails when id does not exist" do
54
+ VCR.use_cassette("webhooks_find_fail") do
55
+ response = Shipwire::Webhooks.new.find(0)
56
+
57
+ expect(response.ok?).to be_falsy
58
+ expect(response.error_summary).to eq 'Subscription not found.'
59
+ end
60
+ end
61
+ end
62
+
63
+ context "update" do
64
+ it "is successful" do
65
+ VCR.use_cassette("webhooks_update") do
66
+ webhook_id = webhook.body["resource"]["items"].first["resource"]["id"]
67
+
68
+ payload = {
69
+ topic: webhook_topic,
70
+ url: webhook_url_update
71
+ }
72
+
73
+ response = Shipwire::Webhooks.new.update(webhook_id, payload)
74
+
75
+ expect(response.ok?).to be_truthy
76
+ end
77
+ end
78
+
79
+ it "fails when id does not exist" do
80
+ VCR.use_cassette("webhooks_update_fail") do
81
+ payload = {
82
+ topic: webhook_topic,
83
+ url: webhook_url_update
84
+ }
85
+
86
+ response = Shipwire::Webhooks.new.update(0, payload)
87
+
88
+ expect(response.ok?).to be_falsy
89
+ expect(response.error_summary).to eq "Invalid request"
90
+ end
91
+ end
92
+ end
93
+
94
+ context "remove" do
95
+ it "is successful" do
96
+ VCR.use_cassette("webhooks_remove") do
97
+ webhook_id = webhook.body["resource"]["items"].first["resource"]["id"]
98
+
99
+ response = Shipwire::Webhooks.new.remove(webhook_id)
100
+
101
+ expect(response.ok?).to be_truthy
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -1,20 +1,41 @@
1
- require 'rspec'
2
- require 'mocha/api'
3
- require 'shipwire'
1
+ # Coverage report
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter "/spec/"
5
+ end
6
+
7
+ # Environment
8
+ ENV['RAILS_ENV'] = 'test'
4
9
 
5
- require 'dotenv'
10
+ require 'rspec'
11
+ require 'ffaker'
6
12
  require 'pry'
7
- Dotenv.load
8
13
 
9
- Shipwire.configure do |config|
10
- config.endpoint = ENV['SHIPWIRE_ENDPOINT']
11
- config.server = ENV['SHIPWIRE_SERVER']
12
- config.username = ENV['SHIPWIRE_USERNAME']
13
- config.password = ENV['SHIPWIRE_PASSWORD']
14
- end
14
+ require 'shipwire'
15
15
 
16
16
  Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
17
17
 
18
18
  RSpec.configure do |config|
19
- config.mock_framework = :mocha
19
+ config.deprecation_stream = 'rspec.log'
20
+
21
+ config.expect_with :rspec do |expectations|
22
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
23
+ end
24
+
25
+ config.mock_with :rspec do |mocks|
26
+ mocks.verify_partial_doubles = true
27
+ end
28
+
29
+ config.filter_run :focus
30
+ config.run_all_when_everything_filtered = true
31
+
32
+ config.disable_monkey_patching!
33
+
34
+ config.warnings = false
35
+
36
+ if config.files_to_run.one?
37
+ config.default_formatter = 'doc'
38
+ end
39
+
40
+ # config.profile_examples = 10
20
41
  end