workarea-forter 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +20 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +37 -0
  4. data/.github/ISSUE_TEMPLATE/documentation-request.md +17 -0
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  6. data/.gitignore +17 -0
  7. data/CHANGELOG.md +63 -0
  8. data/CODE_OF_CONDUCT.md +3 -0
  9. data/CONTRIBUTING.md +3 -0
  10. data/Gemfile +25 -0
  11. data/LICENSE +52 -0
  12. data/LICENSE.md +3 -0
  13. data/README.md +113 -0
  14. data/Rakefile +60 -0
  15. data/app/controllers/workarea/admin/orders_controller.decorator +6 -0
  16. data/app/controllers/workarea/storefront/application_controller.decorator +10 -0
  17. data/app/models/search/admin/order.decorator +7 -0
  18. data/app/models/workarea/checkout/collect_payment.decorator +75 -0
  19. data/app/models/workarea/forter/decision.rb +18 -0
  20. data/app/models/workarea/forter/response.rb +15 -0
  21. data/app/models/workarea/fulfillment.decorator +77 -0
  22. data/app/models/workarea/order/status/suspected_fraud.rb +13 -0
  23. data/app/models/workarea/order.decorator +14 -0
  24. data/app/models/workarea/payment/saved_credit_card.decorator +14 -0
  25. data/app/models/workarea/payment/status/suspected_fraud.rb +13 -0
  26. data/app/models/workarea/payment/tender/credit_card.decorator +25 -0
  27. data/app/models/workarea/payment.decorator +13 -0
  28. data/app/services/workarea/forter/account.rb +42 -0
  29. data/app/services/workarea/forter/order.rb +145 -0
  30. data/app/services/workarea/forter/payment.rb +80 -0
  31. data/app/services/workarea/forter/tender/credit_card.rb +73 -0
  32. data/app/services/workarea/forter/tender/general.rb +29 -0
  33. data/app/services/workarea/forter/tender/gift_card.rb +23 -0
  34. data/app/services/workarea/forter/tender/paypal.rb +38 -0
  35. data/app/services/workarea/forter/tender/store_credit.rb +23 -0
  36. data/app/view_models/workarea/admin/order_view_model.decorator +7 -0
  37. data/app/views/workarea/admin/orders/_forter.html.haml +18 -0
  38. data/app/views/workarea/admin/orders/forter.html.haml +57 -0
  39. data/app/views/workarea/storefront/_forter_tracking.html.haml +4 -0
  40. data/app/workers/forter/update_status.rb +21 -0
  41. data/app/workers/workarea/save_user_order_details.decorator +34 -0
  42. data/bin/rails +20 -0
  43. data/config/initializers/appends.rb +9 -0
  44. data/config/initializers/workarea.rb +22 -0
  45. data/config/locales/en.yml +26 -0
  46. data/config/routes.rb +7 -0
  47. data/lib/workarea/forter/bogus_gateway.rb +62 -0
  48. data/lib/workarea/forter/decision_response.rb +60 -0
  49. data/lib/workarea/forter/engine.rb +8 -0
  50. data/lib/workarea/forter/gateway.rb +66 -0
  51. data/lib/workarea/forter/version.rb +5 -0
  52. data/lib/workarea/forter.rb +50 -0
  53. data/test/dummy/Rakefile +6 -0
  54. data/test/dummy/bin/bundle +3 -0
  55. data/test/dummy/bin/rails +4 -0
  56. data/test/dummy/bin/rake +4 -0
  57. data/test/dummy/bin/setup +30 -0
  58. data/test/dummy/bin/update +26 -0
  59. data/test/dummy/bin/yarn +11 -0
  60. data/test/dummy/config/application.rb +30 -0
  61. data/test/dummy/config/boot.rb +5 -0
  62. data/test/dummy/config/cable.yml +10 -0
  63. data/test/dummy/config/environment.rb +5 -0
  64. data/test/dummy/config/environments/development.rb +51 -0
  65. data/test/dummy/config/environments/production.rb +88 -0
  66. data/test/dummy/config/environments/test.rb +44 -0
  67. data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
  68. data/test/dummy/config/initializers/assets.rb +14 -0
  69. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  70. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  71. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  72. data/test/dummy/config/initializers/inflections.rb +16 -0
  73. data/test/dummy/config/initializers/mime_types.rb +4 -0
  74. data/test/dummy/config/initializers/workarea.rb +5 -0
  75. data/test/dummy/config/initializers/wrap_parameters.rb +9 -0
  76. data/test/dummy/config/locales/en.yml +33 -0
  77. data/test/dummy/config/puma.rb +56 -0
  78. data/test/dummy/config/routes.rb +5 -0
  79. data/test/dummy/config/secrets.yml +32 -0
  80. data/test/dummy/config/spring.rb +6 -0
  81. data/test/dummy/config.ru +5 -0
  82. data/test/dummy/db/seeds.rb +2 -0
  83. data/test/dummy/log/.keep +0 -0
  84. data/test/factories/forter.rb +132 -0
  85. data/test/integration/workarea/admin/forter_order_integration_test.rb +36 -0
  86. data/test/integration/workarea/forter_authorize_cim_response_code_integration_test.rb +69 -0
  87. data/test/integration/workarea/forter_braintree_response_code_integration_test.rb +69 -0
  88. data/test/integration/workarea/forter_checkoutdotcom_integration_test.rb +71 -0
  89. data/test/integration/workarea/forter_cybersource_response_code_integration_test.rb +69 -0
  90. data/test/integration/workarea/forter_moneris_response_code_integration_test.rb +69 -0
  91. data/test/integration/workarea/forter_payflow_pro_response_code_test.rb +69 -0
  92. data/test/integration/workarea/storefront/forter_integration_test.rb +138 -0
  93. data/test/lib/workarea/forter/gateway_test.rb +47 -0
  94. data/test/models/workarea/checkout/forter_collect_payment_test.rb +60 -0
  95. data/test/models/workarea/forter_payment_test.rb +58 -0
  96. data/test/models/workarea/payment/forter_credit_card_test.rb +19 -0
  97. data/test/models/workarea/payment/forter_saved_credit_card_test.rb +32 -0
  98. data/test/services/workarea/forter/order_test.rb +82 -0
  99. data/test/support/workarea/forter_api_config.rb +27 -0
  100. data/test/system/workarea/admin/forter_system_test.rb +31 -0
  101. data/test/system/workarea/storefront/forter_braintree_checkout_system_test.rb +79 -0
  102. data/test/system/workarea/storefront/forter_tracking_system_test.rb +20 -0
  103. data/test/system/workarea/storefront/guest_checkout_system_test.decorator +43 -0
  104. data/test/teaspoon_env.rb +6 -0
  105. data/test/test_helper.rb +11 -0
  106. data/test/vcr_cassettes/forter/get_decision.yml +66 -0
  107. data/test/vcr_cassettes/forter/integration/authorize_net_response_code.yml +410 -0
  108. data/test/vcr_cassettes/forter/integration/braintree_response_code.yml +231 -0
  109. data/test/vcr_cassettes/forter/integration/checkoutdotcom_response_code.yml +129 -0
  110. data/test/vcr_cassettes/forter/integration/cyber_response_code.yml +199 -0
  111. data/test/vcr_cassettes/forter/integration/moneris_response_code.yml +84 -0
  112. data/test/vcr_cassettes/forter/integration/payflow_pro_response_code.yml +60 -0
  113. data/test/vcr_cassettes/forter/system/braintree_approved.yml +293 -0
  114. data/test/vcr_cassettes/forter/system/braintree_declined.yml +485 -0
  115. data/test/vcr_cassettes/forter/system/braintree_not_reviewed.yml +293 -0
  116. data/test/vcr_cassettes/forter/update_status.yml +182 -0
  117. data/test/view_models/workarea/storefront/order_view_model_test.decorator +10 -0
  118. data/test/workers/forter/update_status_test.rb +22 -0
  119. data/workarea-forter.gemspec +18 -0
  120. metadata +195 -0
@@ -0,0 +1,293 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.sandbox.braintreegateway.com/merchants/qwrbf4nrdzhy93zr/transactions
6
+ body:
7
+ encoding: UTF-8
8
+ string: |
9
+ <?xml version="1.0" encoding="UTF-8"?>
10
+ <transaction>
11
+ <amount>12.84</amount>
12
+ <order-id>914188F6B5</order-id>
13
+ <customer>
14
+ <id></id>
15
+ <email>notreviewed@forter.com</email>
16
+ <phone nil="true"/>
17
+ <first-name>Ben</first-name>
18
+ <last-name>Crouse</last-name>
19
+ </customer>
20
+ <options>
21
+ <store-in-vault type="boolean">true</store-in-vault>
22
+ <submit-for-settlement nil="true"/>
23
+ <hold-in-escrow nil="true"/>
24
+ </options>
25
+ <custom-fields nil="true"/>
26
+ <merchant-account-id>weblinc</merchant-account-id>
27
+ <credit-card>
28
+ <number>4111111111111111</number>
29
+ <cvv>999</cvv>
30
+ <expiration-month>01</expiration-month>
31
+ <expiration-year>2020</expiration-year>
32
+ <cardholder-name>Ben Crouse</cardholder-name>
33
+ </credit-card>
34
+ <billing>
35
+ <street-address>22 S. 3rd St.</street-address>
36
+ <extended-address></extended-address>
37
+ <company nil="true"/>
38
+ <locality>Philadelphia</locality>
39
+ <region>PA</region>
40
+ <postal-code>19106</postal-code>
41
+ <country-code-alpha2>US</country-code-alpha2>
42
+ </billing>
43
+ <type>sale</type>
44
+ </transaction>
45
+ headers:
46
+ Accept-Encoding:
47
+ - gzip
48
+ Accept:
49
+ - application/xml
50
+ User-Agent:
51
+ - Braintree Ruby Gem 2.93.0 (ActiveMerchant 1.89.0)
52
+ X-Apiversion:
53
+ - '5'
54
+ Content-Type:
55
+ - application/xml
56
+ Authorization:
57
+ - Basic dzN2NmQ5eXRnajRqNG56ODplYjFmODliZTlmMzYzZjYxZmZmM2Y5MDI0NDQ1NmViMg==
58
+ response:
59
+ status:
60
+ code: 201
61
+ message: Created
62
+ headers:
63
+ Date:
64
+ - Fri, 18 Jan 2019 14:09:42 GMT
65
+ Content-Type:
66
+ - application/xml; charset=utf-8
67
+ Transfer-Encoding:
68
+ - chunked
69
+ X-Frame-Options:
70
+ - SAMEORIGIN
71
+ X-Xss-Protection:
72
+ - 1; mode=block
73
+ X-Content-Type-Options:
74
+ - nosniff
75
+ X-Authentication:
76
+ - basic_auth
77
+ X-User:
78
+ - nrkvc7nn7kyfbtm6
79
+ Vary:
80
+ - Accept-Encoding
81
+ Content-Encoding:
82
+ - gzip
83
+ Etag:
84
+ - W/"65dc768547474527d67d6689d840c52b"
85
+ Cache-Control:
86
+ - max-age=0, private, must-revalidate
87
+ X-Runtime:
88
+ - '0.484273'
89
+ X-Request-Id:
90
+ - 01-1547820582.259-173.161.162.1-10029041
91
+ Content-Security-Policy:
92
+ - frame-ancestors 'self'
93
+ X-Broxyid:
94
+ - 01-1547820582.259-173.161.162.1-10029041
95
+ Strict-Transport-Security:
96
+ - max-age=31536000; includeSubDomains
97
+ body:
98
+ encoding: ASCII-8BIT
99
+ string: !binary |-
100
+ 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
101
+ http_version:
102
+ recorded_at: Fri, 18 Jan 2019 14:09:42 GMT
103
+ - request:
104
+ method: get
105
+ uri: https://api.sandbox.braintreegateway.com/merchants/qwrbf4nrdzhy93zr/customers/552868996
106
+ body:
107
+ encoding: US-ASCII
108
+ string: ''
109
+ headers:
110
+ Accept-Encoding:
111
+ - gzip
112
+ Accept:
113
+ - application/xml
114
+ User-Agent:
115
+ - Braintree Ruby Gem 2.93.0 (ActiveMerchant 1.89.0)
116
+ X-Apiversion:
117
+ - '5'
118
+ Content-Type:
119
+ - application/xml
120
+ Authorization:
121
+ - Basic dzN2NmQ5eXRnajRqNG56ODplYjFmODliZTlmMzYzZjYxZmZmM2Y5MDI0NDQ1NmViMg==
122
+ response:
123
+ status:
124
+ code: 200
125
+ message: OK
126
+ headers:
127
+ Date:
128
+ - Fri, 18 Jan 2019 14:09:43 GMT
129
+ Content-Type:
130
+ - application/xml; charset=utf-8
131
+ Transfer-Encoding:
132
+ - chunked
133
+ X-Frame-Options:
134
+ - SAMEORIGIN
135
+ X-Xss-Protection:
136
+ - 1; mode=block
137
+ X-Content-Type-Options:
138
+ - nosniff
139
+ X-Authentication:
140
+ - basic_auth
141
+ X-User:
142
+ - nrkvc7nn7kyfbtm6
143
+ Vary:
144
+ - Accept-Encoding
145
+ Content-Encoding:
146
+ - gzip
147
+ Etag:
148
+ - W/"a4681feaf07fecc80e322919f4823364"
149
+ Cache-Control:
150
+ - max-age=0, private, must-revalidate
151
+ X-Runtime:
152
+ - '0.105817'
153
+ X-Request-Id:
154
+ - 01-1547820583.134-173.161.162.1-10029120
155
+ Content-Security-Policy:
156
+ - frame-ancestors 'self'
157
+ X-Broxyid:
158
+ - 01-1547820583.134-173.161.162.1-10029120
159
+ Strict-Transport-Security:
160
+ - max-age=31536000; includeSubDomains
161
+ body:
162
+ encoding: ASCII-8BIT
163
+ string: !binary |-
164
+ H4sIACfeQVwAA6RUS3ObMBC+51d4uMuA7Th2BiudtpOcemqTzuSSEWgxGguJ6GGb/PpKYB6Ok0MnnNjvsSza1SZ3x5JP9qA0k2ITxNMomIDIJGViuwke/9yjVXCHr5LMaiNLUPhqMkkYxdfXs9VytV4vk9BFHnRkVhBhkItfDyrNF0LRt6Jez99UEo5Zr86Z0gYJUgL+DiIJR7GnOemiH0paDUk4IJ7PZFkRUU8E45vAKAtB2OBQEsaxkEbBnsEB6LdcKgNq6gxJ2LJeVxVSwIU7J8cL7ACpZuZSmykgBigiZmLqCjYBdaFhJQR4FsVrFMUoXv2JF7fR+nYxe07CwdD4bUX/zz8Y2u83DUE5A051XxJlBmVEUX1KSpQideDZc75FHJYygRexf5LQv3e4FyGfAz8xTVz1fTxWFJJTUH0bJ12z3nO9R5Z+EBjh+FHshDy4zo+wQWaFUTWSOWJaWyIyGOsvyd74taa0OU6Tjs6nfAxfSLnMiHEXCD/+Hil7tNNTSJkZ/qQNBzInlneFp1JyICLAfuS8tCEHsVWuW0jB1nL/A6Ok75nOAseKqaYeVEphChy5ll+AH6hrIMod3yw6kzfomRro+9pzwv00nNheveUyJdwfZPZwf53+fbL0Ieb0odg/3693tDQSfv5KwkHWGQsg3BRuuEbjMMI6GSvJFpBVHBfGVPo2DInWYPQ0VYS52QHYupM5kNpvhbAidQnCvJRgCklfuNzKcO9mflqJ7R2IPVNSeMFGE0FTeXQLr8/ff9ENoluYKCViN5R2hnbSZo8tcHvjTkHHuVKU5KO70QG9QEFF2KjbHTAIJLVZs2VHmh7rZNqmOlOs8p08XxVhrzFyBwLT/a44zpOwjTrOCvZqAQlbps2NcMfD3CZSOJovouvVDcnnWTwn8+UqTfN1Bjc3SxovF6m7R59a+9xfW4xNjj2IUiJNd59MZM+PHMqV0d7XD0+k2RXj9XkG6AYhlCpwo3aRYFgK+OofAAAA//8DAJMZeL9yBwAA
165
+ http_version:
166
+ recorded_at: Fri, 18 Jan 2019 14:09:43 GMT
167
+ - request:
168
+ method: get
169
+ uri: https://api.sandbox.braintreegateway.com/merchants/qwrbf4nrdzhy93zr/customers/552868996
170
+ body:
171
+ encoding: US-ASCII
172
+ string: ''
173
+ headers:
174
+ Accept-Encoding:
175
+ - gzip
176
+ Accept:
177
+ - application/xml
178
+ User-Agent:
179
+ - Braintree Ruby Gem 2.93.0 (ActiveMerchant 1.89.0)
180
+ X-Apiversion:
181
+ - '5'
182
+ Content-Type:
183
+ - application/xml
184
+ Authorization:
185
+ - Basic dzN2NmQ5eXRnajRqNG56ODplYjFmODliZTlmMzYzZjYxZmZmM2Y5MDI0NDQ1NmViMg==
186
+ response:
187
+ status:
188
+ code: 200
189
+ message: OK
190
+ headers:
191
+ Date:
192
+ - Fri, 18 Jan 2019 14:09:44 GMT
193
+ Content-Type:
194
+ - application/xml; charset=utf-8
195
+ Transfer-Encoding:
196
+ - chunked
197
+ X-Frame-Options:
198
+ - SAMEORIGIN
199
+ X-Xss-Protection:
200
+ - 1; mode=block
201
+ X-Content-Type-Options:
202
+ - nosniff
203
+ X-Authentication:
204
+ - basic_auth
205
+ X-User:
206
+ - nrkvc7nn7kyfbtm6
207
+ Vary:
208
+ - Accept-Encoding
209
+ Content-Encoding:
210
+ - gzip
211
+ Etag:
212
+ - W/"d10d44ace4f07666cd057d1e46b10219"
213
+ Cache-Control:
214
+ - max-age=0, private, must-revalidate
215
+ X-Runtime:
216
+ - '0.210571'
217
+ X-Request-Id:
218
+ - 02-1547820583.623-173.161.162.1-8271151
219
+ Content-Security-Policy:
220
+ - frame-ancestors 'self'
221
+ X-Broxyid:
222
+ - 02-1547820583.623-173.161.162.1-8271151
223
+ Strict-Transport-Security:
224
+ - max-age=31536000; includeSubDomains
225
+ body:
226
+ encoding: ASCII-8BIT
227
+ string: !binary |-
228
+ H4sIACjeQVwAA6RUS3ObMBC+51d4uMuA7Th2BiudtpOcemqTzuSSEWgxGguJ6GGb/PpKYB6Ok0MnnNjvsSza1SZ3x5JP9qA0k2ITxNMomIDIJGViuwke/9yjVXCHr5LMaiNLUPhqMkkYxdfXs9VytV4vk9BFHnRkVhBhkItfDyrNF0LRt6Jez99UEo5Zr86Z0gYJUgL+DiIJR7GnOemiH0paDUk4IJ7PZFkRUU8E45vAKAtB2OBQEsaxkEbBnsEB6LdcKgNq6gxJ2LJeVxVSwIU7J8cL7ACpZuZSmykgBigiZmLqCjYBdaFhJQR4FsVrFMUoXv2JF7fR+nYxe07CwdD4bUX/zz8Y2u83DUE5A051XxJlBmVEUX1KSpQideDZc75FHJYygRexf5LQv3e4FyGfAz8xTVz1fTxWFJJTUH0bJ12z3nO9R5Z+EBjh+FHshDy4zo+wQWaFUTWSOWJaWyIyGOsvyd74taa0OU6Tjs6nfAxfSLnMiHEXCD/+Hil7tNNTSJkZ/qQNBzInlneFp1JyICLAfuS8tCEHsVWuW0jB1nL/A6Ok75nOAseKqaYeVEphChy5ll+AH6hrIMod3yw6kzfomRro+9pzwv00nNheveUyJdwfZPZwf53+fbL0Ieb0odg/3693tDQSfv5KwkHWGQsg3BRuuEbjMMI6GSvJFpBVHBfGVPo2DInWYPQ0VYS52QHYupM5kNpvhbAidQnCvJRgCklfuNzKcO9mflqJ7R2IPVNSeMFGE0FTeXQLr8/ff9ENoluYKCViN5R2hnbSZo8tcHvjTkHHuVKU5KO70QG9QEFF2KjbHTAIJLVZs2VHmh7rZNqmOlOs8p08XxVhrzFyBwLT/a44zpOwjTrOCvZqAQlbps2NcMfD3CZSOJovouvVDcnnWTwn8+UqTfN1Bjc3SxovF6m7R59a+9xfW4xNjj2IUiJNd59MZM+PHMqV0d7XD0+k2RXj9XkG6AYhlCpwo3aRYFgK+OofAAAA//8DAJMZeL9yBwAA
229
+ http_version:
230
+ recorded_at: Fri, 18 Jan 2019 14:09:44 GMT
231
+ - request:
232
+ method: post
233
+ uri: https://api.forter-secure.com/v2/orders/914188F6B5
234
+ body:
235
+ encoding: UTF-8
236
+ string: '{"orderId":"914188F6B5","orderType":"WEB","timeSentToForter":1547820585000,"checkoutTime":0,"primaryRecipient":{"personalDetails":{"firstName":"Ben","lastName":"Crouse"},"address":{"address1":"22
237
+ S. 3rd St.","city":"Philadelphia","country":"US","address2":"","zip":"19106","region":"PA"},"phone":[{"phone":"2159251800"}]},"totalAmount":{"amountUSD":"12.84"},"connectionInformation":{"customerIP":"127.0.0.1","userAgent":"Mozilla/5.0
238
+ (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko)
239
+ HeadlessChrome/71.0.3578.98 Safari/537.36","forterTokenCookie":null},"primaryDeliveryDetails":{"deliveryType":"PHYSICAL","deliveryMethod":"Ground","deliveryPrice":{"amountUSD":"7.00"},"carrier":null},"cartItems":[{"basicItemData":{"name":"Integration
240
+ Product","quantity":1,"type":"TANGIBLE","price":{"amountUSD":"5.00"},"productId":"INT_PRODUCT"}}],"payment":[{"tokenizedCard":{"token":"dvkhx3","lastFourDigits":"1111","expirationMonth":"01","expirationYear":"2020","cardBrand":"Visa","nameOnCard":"Ben
241
+ Crouse"},"billingDetails":{"personalDetails":{"firstName":"Ben","lastName":"Crouse"},"address":{"address1":"22
242
+ S. 3rd St.","address2":"","city":"Philadelphia","country":"US","zip":"19106","region":"PA"},"phone":[{"phone":"2159251800"}]}}],"accountOwner":{"firstName":"Ben","lastName":"Crouse","email":"notreviewed@forter.com"},"totalDiscount":null}'
243
+ headers:
244
+ Content-Type:
245
+ - application/json
246
+ X-Forter-Siteid:
247
+ - 4d12ac5d794c
248
+ Api-Version:
249
+ - '2.3'
250
+ User-Agent:
251
+ - Faraday v0.15.4
252
+ Authorization:
253
+ - Basic a
254
+ Accept-Encoding:
255
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
256
+ Accept:
257
+ - "*/*"
258
+ response:
259
+ status:
260
+ code: 200
261
+ message: OK
262
+ headers:
263
+ Date:
264
+ - Fri, 18 Jan 2019 14:09:45 GMT
265
+ Content-Type:
266
+ - application/json; charset=utf-8
267
+ Content-Length:
268
+ - '169'
269
+ Connection:
270
+ - keep-alive
271
+ Server:
272
+ - openresty
273
+ Strict-Transport-Security:
274
+ - max-age=86400; includeSubDomains
275
+ Surrogate-Control:
276
+ - no-store
277
+ Cache-Control:
278
+ - no-store, no-cache, must-revalidate, proxy-revalidate
279
+ Pragma:
280
+ - no-cache
281
+ Expires:
282
+ - '0'
283
+ Etag:
284
+ - W/"a9-434ZSbLxfHEHgpfb5jNMq4h3/P8"
285
+ Vary:
286
+ - Accept-Encoding
287
+ body:
288
+ encoding: UTF-8
289
+ string: '{"status":"success","transaction":"914188F6B5","action":"not reviewed","message":"
290
+ | Link in portal: https://portal.forter.com/dashboard/914188F6B5","reasonCode":"Test"}'
291
+ http_version:
292
+ recorded_at: Fri, 18 Jan 2019 14:09:45 GMT
293
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,182 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.forter-secure.com/v2/orders/statusfortertest12345
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"orderId":"statusfortertest12345","orderType":"WEB","timeSentToForter":1546030401000,"checkoutTime":1546030397,"primaryRecipient":{"personalDetails":{"firstName":"Ben","lastName":"Crouse"},"address":{"address1":"22
9
+ S. 3rd St.","city":"Philadelphia","country":"US","address2":"Second Floor","zip":"19106","region":"PA"},"phone":[{"phone":""}]},"totalAmount":{"amountUSD":"11.00"},"connectionInformation":{"customerIP":"127.0.0.1","userAgent":"Mozilla/5.0
10
+ (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0 Mozilla/5.0
11
+ (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0."},"primaryDeliveryDetails":{"deliveryType":"PHYSICAL","deliveryMethod":"Test
12
+ 0","deliveryPrice":{"amountUSD":"1.00"},"carrier":null},"cartItems":[{"basicItemData":{"name":"Test
13
+ Product","quantity":2,"type":"TANGIBLE","price":{"amountUSD":"10.00"},"productId":"BCE0E155EF"}}],"payment":[{"billingDetails":{"personalDetails":{"firstName":"Ben","lastName":"Crouse"},"address":{"address1":"22
14
+ S. 3rd St.","address2":"Second Floor","city":"Philadelphia","country":"US","zip":"19106","region":"PA"},"phone":[{"phone":""}]},"tokenizedCard":{"token":"1","lastFourDigits":"1111","expirationMonth":"01","expirationYear":"2019","cardBrand":"Visa","nameOnCard":"Ben
15
+ Crouse"}}],"accountOwner":{"firstName":"Ben","lastName":"Crouse","email":"approve@forter.com"}}'
16
+ headers:
17
+ Content-Type:
18
+ - application/json
19
+ Api-Version:
20
+ - '2.2'
21
+ User-Agent:
22
+ - Faraday v0.15.4
23
+ Authorization:
24
+ - Basic a
25
+ Accept-Encoding:
26
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
27
+ Accept:
28
+ - "*/*"
29
+ response:
30
+ status:
31
+ code: 401
32
+ message: Unauthorized
33
+ headers:
34
+ Date:
35
+ - Fri, 28 Dec 2018 20:53:21 GMT
36
+ Content-Type:
37
+ - application/json; charset=utf-8
38
+ Content-Length:
39
+ - '58'
40
+ Connection:
41
+ - keep-alive
42
+ Server:
43
+ - openresty
44
+ Strict-Transport-Security:
45
+ - max-age=86400; includeSubDomains
46
+ Surrogate-Control:
47
+ - no-store
48
+ Cache-Control:
49
+ - no-store, no-cache, must-revalidate, proxy-revalidate
50
+ Pragma:
51
+ - no-cache
52
+ Expires:
53
+ - '0'
54
+ Etag:
55
+ - W/"3a-ZqDAtEqlVbaEf6c/ziI5qiLtZfk"
56
+ Vary:
57
+ - Accept-Encoding
58
+ body:
59
+ encoding: UTF-8
60
+ string: '{"status":"failed","message":"unauthorized, invalid site"}'
61
+ http_version:
62
+ recorded_at: Fri, 28 Dec 2018 20:53:21 GMT
63
+ - request:
64
+ method: post
65
+ uri: https://api.forter-secure.com/v2/orders/statusfortertest12345
66
+ body:
67
+ encoding: UTF-8
68
+ string: '{"orderId":"statusfortertest12345","orderType":"WEB","timeSentToForter":1546030401000,"checkoutTime":1546030397,"primaryRecipient":{"personalDetails":{"firstName":"Ben","lastName":"Crouse"},"address":{"address1":"22
69
+ S. 3rd St.","city":"Philadelphia","country":"US","address2":"Second Floor","zip":"19106","region":"PA"},"phone":[{"phone":""}]},"totalAmount":{"amountUSD":"11.00"},"connectionInformation":{"customerIP":"127.0.0.1","userAgent":"Mozilla/5.0
70
+ (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0 Mozilla/5.0
71
+ (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0."},"primaryDeliveryDetails":{"deliveryType":"PHYSICAL","deliveryMethod":"Test
72
+ 0","deliveryPrice":{"amountUSD":"1.00"},"carrier":null},"cartItems":[{"basicItemData":{"name":"Test
73
+ Product","quantity":2,"type":"TANGIBLE","price":{"amountUSD":"10.00"},"productId":"BCE0E155EF"}}],"payment":[{"billingDetails":{"personalDetails":{"firstName":"Ben","lastName":"Crouse"},"address":{"address1":"22
74
+ S. 3rd St.","address2":"Second Floor","city":"Philadelphia","country":"US","zip":"19106","region":"PA"},"phone":[{"phone":""}]},"tokenizedCard":{"token":"1","lastFourDigits":"1111","expirationMonth":"01","expirationYear":"2019","cardBrand":"Visa","nameOnCard":"Ben
75
+ Crouse"}}],"accountOwner":{"firstName":"Ben","lastName":"Crouse","email":"approve@forter.com"}}'
76
+ headers:
77
+ Content-Type:
78
+ - application/json
79
+ X-Forter-Siteid:
80
+ - 4d12ac5d794c
81
+ Api-Version:
82
+ - '2.2'
83
+ User-Agent:
84
+ - Faraday v0.15.4
85
+ Authorization:
86
+ - Basic a
87
+ Accept-Encoding:
88
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
89
+ Accept:
90
+ - "*/*"
91
+ response:
92
+ status:
93
+ code: 200
94
+ message: OK
95
+ headers:
96
+ Date:
97
+ - Fri, 28 Dec 2018 20:53:21 GMT
98
+ Content-Type:
99
+ - application/json; charset=utf-8
100
+ Content-Length:
101
+ - '186'
102
+ Connection:
103
+ - keep-alive
104
+ Server:
105
+ - openresty
106
+ Strict-Transport-Security:
107
+ - max-age=86400; includeSubDomains
108
+ Surrogate-Control:
109
+ - no-store
110
+ Cache-Control:
111
+ - no-store, no-cache, must-revalidate, proxy-revalidate
112
+ Pragma:
113
+ - no-cache
114
+ Expires:
115
+ - '0'
116
+ Etag:
117
+ - W/"ba-Ef/isk7mEOWPRXN9i4trCjru7vk"
118
+ Vary:
119
+ - Accept-Encoding
120
+ body:
121
+ encoding: UTF-8
122
+ string: '{"status":"success","transaction":"statusfortertest12345","action":"approve","message":"
123
+ | Link in portal: https://portal.forter.com/dashboard/statusfortertest12345","reasonCode":"Test"}'
124
+ http_version:
125
+ recorded_at: Fri, 28 Dec 2018 20:53:21 GMT
126
+ - request:
127
+ method: put
128
+ uri: https://api.forter-secure.com/v2/status/statusfortertest12345
129
+ body:
130
+ encoding: UTF-8
131
+ string: '{"orderId":"statusfortertest12345","eventTime":1546030401000,"updatedStatus":"CANCELED_BY_MERCHANT"}'
132
+ headers:
133
+ Content-Type:
134
+ - application/json
135
+ X-Forter-Siteid:
136
+ - 4d12ac5d794c
137
+ Api-Version:
138
+ - '2.2'
139
+ User-Agent:
140
+ - Faraday v0.15.4
141
+ Authorization:
142
+ - Basic a
143
+ Accept-Encoding:
144
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
145
+ Accept:
146
+ - "*/*"
147
+ response:
148
+ status:
149
+ code: 200
150
+ message: OK
151
+ headers:
152
+ Date:
153
+ - Fri, 28 Dec 2018 20:53:21 GMT
154
+ Content-Type:
155
+ - application/json; charset=utf-8
156
+ Content-Length:
157
+ - '83'
158
+ Connection:
159
+ - keep-alive
160
+ Server:
161
+ - openresty
162
+ Strict-Transport-Security:
163
+ - max-age=86400; includeSubDomains
164
+ Surrogate-Control:
165
+ - no-store
166
+ Cache-Control:
167
+ - no-store, no-cache, must-revalidate, proxy-revalidate
168
+ Pragma:
169
+ - no-cache
170
+ Expires:
171
+ - '0'
172
+ Etag:
173
+ - W/"53-bIIPJPDkazv+tEVJKCKU0pv7x9A"
174
+ Vary:
175
+ - Accept-Encoding
176
+ body:
177
+ encoding: UTF-8
178
+ string: '{"status":"success","message":"Transaction #statusfortertest12345 status
179
+ recieved"}'
180
+ http_version:
181
+ recorded_at: Fri, 28 Dec 2018 20:53:21 GMT
182
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,10 @@
1
+ module Workarea
2
+ decorate Storefront::OrderViewModelTest, with: :forter do
3
+
4
+ def set_order
5
+ @order = Order.new
6
+ Workarea::Forter::Decision.create(id: @order.id)
7
+
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ class Forter::UpdateStatusTest < TestCase
5
+
6
+ def test_decision_status_update
7
+ decision = Workarea::Forter::Decision.create(id: '1234')
8
+
9
+ details_hash = {
10
+ orderId: 1234,
11
+ eventTime: Time.new.to_i * 1000,
12
+ updatedStatus: "CANCELED_BY_MERCHANT"
13
+ }
14
+
15
+ Workarea::Forter::UpdateStatus.new.perform(decision.id, details_hash)
16
+
17
+ decision.reload
18
+
19
+ assert_equal("CANCELED_BY_MERCHANT", decision.external_order_status)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ require "workarea/forter/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "workarea-forter"
7
+ s.version = Workarea::Forter::VERSION
8
+ s.authors = ["Jeff Yucis"]
9
+ s.email = ["jyucis@weblinc.com"]
10
+ s.homepage = "https://github.com/workarea-commerce/workarea-forter"
11
+ s.summary = "Forter Fraud Protection integration with Workarea"
12
+ s.description = "Forter Integration with Workarea for Fraud Protection "
13
+ s.files = `git ls-files`.split("\n")
14
+ s.license = 'Business Software License'
15
+
16
+ s.add_dependency 'workarea', '~> 3.x', '>= 3.4'
17
+ s.add_dependency 'faraday'
18
+ end