@rebilly/instruments 1.0.2-beta.9 → 3.0.0-beta.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 (255) hide show
  1. package/.babelrc +13 -4
  2. package/.eslintrc.js +3 -0
  3. package/.prettierrc.js +11 -0
  4. package/README.md +15 -314
  5. package/dist/events/base-event.js +6 -9
  6. package/dist/events/events.spec.js +4 -4
  7. package/dist/events/index.js +2 -1
  8. package/dist/functions/destroy.js +12 -14
  9. package/dist/functions/destroy.spec.js +3 -3
  10. package/dist/functions/mount/fetch-data.js +187 -0
  11. package/dist/functions/mount/fetch-data.spec.js +189 -0
  12. package/dist/functions/mount/index.js +164 -251
  13. package/dist/functions/mount/mount.spec.js +25 -124
  14. package/dist/functions/mount/setup-element.js +40 -0
  15. package/dist/functions/mount/setup-framepay-theme.js +95 -0
  16. package/dist/functions/mount/setup-framepay.js +46 -0
  17. package/dist/functions/mount/setup-i18n.js +33 -0
  18. package/dist/functions/mount/setup-options.js +99 -0
  19. package/dist/functions/mount/setup-options.spec.js +66 -0
  20. package/dist/functions/mount/setup-storefront.js +34 -0
  21. package/dist/functions/mount/setup-styles.js +43 -0
  22. package/dist/functions/on.js +13 -4
  23. package/dist/functions/on.spec.js +19 -5
  24. package/dist/functions/purchase.js +139 -22
  25. package/dist/functions/purchase.spec.js +23 -19
  26. package/dist/functions/setup.js +85 -0
  27. package/dist/functions/setup.spec.js +87 -0
  28. package/dist/functions/show.js +31 -14
  29. package/dist/functions/show.spec.js +47 -18
  30. package/dist/functions/update.js +53 -27
  31. package/dist/functions/update.spec.js +40 -21
  32. package/dist/i18n/en.json +5 -2
  33. package/dist/i18n/es.json +4 -1
  34. package/dist/index.js +67 -56
  35. package/dist/index.spec.js +7 -27
  36. package/dist/loader/index.js +4 -3
  37. package/dist/storefront/index.js +33 -0
  38. package/dist/storefront/invoices.js +27 -0
  39. package/dist/storefront/models/base-model.js +18 -0
  40. package/dist/storefront/models/invoice-model.js +14 -0
  41. package/dist/storefront/models/plan-model.js +4 -35
  42. package/dist/storefront/models/product-model.js +4 -23
  43. package/dist/storefront/models/summary-model.js +12 -25
  44. package/dist/storefront/models/transaction-model.js +31 -0
  45. package/dist/storefront/payment-instruments.js +47 -0
  46. package/dist/storefront/payment-instruments.spec.js +55 -0
  47. package/dist/storefront/plans.js +15 -24
  48. package/dist/storefront/plans.spec.js +17 -44
  49. package/dist/storefront/products.js +16 -20
  50. package/dist/storefront/products.spec.js +25 -49
  51. package/dist/storefront/purchase.js +28 -16
  52. package/dist/storefront/purchase.spec.js +4 -22
  53. package/dist/storefront/ready-to-pay.js +26 -22
  54. package/dist/storefront/ready-to-pay.spec.js +25 -54
  55. package/dist/storefront/storefront.spec.js +1 -1
  56. package/dist/storefront/summary.js +27 -24
  57. package/dist/storefront/summary.spec.js +44 -86
  58. package/dist/storefront/transactions.js +27 -0
  59. package/dist/style/base/__snapshots__/theme.spec.js.snap +188 -45
  60. package/dist/style/base/default-theme.js +699 -0
  61. package/dist/style/base/index.js +48 -16
  62. package/dist/style/base/theme.js +15 -48
  63. package/dist/style/base/theme.spec.js +4 -15
  64. package/dist/style/components/address.js +3 -3
  65. package/dist/style/components/button.js +32 -22
  66. package/dist/style/components/divider.js +9 -9
  67. package/dist/style/components/forms/checkbox.js +12 -9
  68. package/dist/style/components/forms/field.js +18 -6
  69. package/dist/style/components/forms/form.js +2 -2
  70. package/dist/style/components/forms/input.js +54 -13
  71. package/dist/style/components/forms/label.js +44 -18
  72. package/dist/style/components/forms/select.js +54 -22
  73. package/dist/style/components/forms/validation.js +53 -6
  74. package/dist/style/components/icons.js +4 -4
  75. package/dist/style/components/loader.js +5 -3
  76. package/dist/style/components/methods.js +52 -48
  77. package/dist/style/components/overlay.js +5 -5
  78. package/dist/style/helpers/index.js +46 -46
  79. package/dist/style/index.js +3 -1
  80. package/dist/style/payment-instruments/payment-card.js +4 -4
  81. package/dist/style/utils/border.js +47 -0
  82. package/dist/style/utils/color-values.js +37 -3
  83. package/dist/style/utils/remove-empty-null.js +20 -0
  84. package/dist/style/vendor/framepay.js +11 -8
  85. package/dist/style/vendor/postmate.js +2 -2
  86. package/dist/style/views/confirmation.js +13 -13
  87. package/dist/style/views/method-selector.js +3 -3
  88. package/dist/style/views/modal.js +8 -6
  89. package/dist/style/views/result.js +4 -4
  90. package/dist/style/views/summary.js +26 -22
  91. package/dist/utils/format-currency.js +4 -2
  92. package/dist/utils/has-valid-css-selector.js +1 -1
  93. package/dist/utils/process-property-as-dom-element.js +0 -2
  94. package/dist/views/__snapshots__/summary.spec.js.snap +72 -118
  95. package/dist/views/common/iframe/base-iframe.js +10 -2
  96. package/dist/views/common/iframe/modal-iframe.js +50 -4
  97. package/dist/views/confirmation.js +44 -20
  98. package/dist/views/method-selector/express-methods/apple-pay.js +92 -0
  99. package/dist/views/method-selector/express-methods/google-pay.js +31 -0
  100. package/dist/views/method-selector/express-methods/paypal.js +19 -0
  101. package/dist/views/method-selector/generate-digital-wallet.js +68 -0
  102. package/dist/views/method-selector/generate-digital-wallet.spec.js +135 -0
  103. package/dist/views/method-selector/get-payment-methods.js +27 -7
  104. package/dist/views/method-selector/get-payment-methods.spec.js +25 -26
  105. package/dist/views/method-selector/index.js +55 -86
  106. package/dist/views/method-selector/method-selector.spec.js +80 -69
  107. package/dist/views/method-selector/mount-express-methods.js +38 -62
  108. package/dist/views/method-selector/mount-methods.js +18 -18
  109. package/dist/views/modal.js +18 -12
  110. package/dist/views/result.js +13 -16
  111. package/dist/views/summary.js +176 -114
  112. package/dist/views/summary.spec.js +72 -76
  113. package/package.json +7 -4
  114. package/src/events/base-event.js +15 -17
  115. package/src/events/events.spec.js +6 -4
  116. package/src/events/index.js +6 -3
  117. package/src/functions/destroy.js +12 -13
  118. package/src/functions/destroy.spec.js +30 -31
  119. package/src/functions/mount/fetch-data.js +152 -0
  120. package/src/functions/mount/fetch-data.spec.js +238 -0
  121. package/src/functions/mount/index.js +131 -244
  122. package/src/functions/mount/mount.spec.js +35 -141
  123. package/src/functions/mount/setup-element.js +26 -0
  124. package/src/functions/mount/setup-framepay-theme.js +82 -0
  125. package/src/functions/mount/setup-framepay.js +41 -0
  126. package/src/functions/mount/setup-i18n.js +19 -0
  127. package/src/functions/mount/setup-options.js +103 -0
  128. package/src/functions/mount/setup-options.spec.js +60 -0
  129. package/src/functions/mount/setup-storefront.js +24 -0
  130. package/src/functions/mount/setup-styles.js +30 -0
  131. package/src/functions/on.js +13 -8
  132. package/src/functions/on.spec.js +30 -17
  133. package/src/functions/purchase.js +101 -19
  134. package/src/functions/purchase.spec.js +18 -18
  135. package/src/functions/setup.js +48 -0
  136. package/src/functions/setup.spec.js +98 -0
  137. package/src/functions/show.js +20 -10
  138. package/src/functions/show.spec.js +43 -22
  139. package/src/functions/update.js +50 -27
  140. package/src/functions/update.spec.js +57 -22
  141. package/src/i18n/en.json +5 -2
  142. package/src/i18n/es.json +4 -1
  143. package/src/i18n/i18n.spec.js +6 -4
  144. package/src/i18n/index.js +14 -11
  145. package/src/index.js +41 -52
  146. package/src/index.spec.js +8 -37
  147. package/src/loader/index.js +51 -47
  148. package/src/loader/loader.spec.js +26 -19
  149. package/src/storefront/index.js +37 -7
  150. package/src/storefront/invoices.js +11 -0
  151. package/src/storefront/models/base-model.js +10 -0
  152. package/src/storefront/models/invoice-model.js +3 -0
  153. package/src/storefront/models/plan-model.js +3 -35
  154. package/src/storefront/models/product-model.js +3 -23
  155. package/src/storefront/models/ready-to-pay-model.js +3 -3
  156. package/src/storefront/models/summary-model.js +15 -29
  157. package/src/storefront/models/transaction-model.js +19 -0
  158. package/src/storefront/payment-instruments.js +30 -0
  159. package/src/storefront/payment-instruments.spec.js +69 -0
  160. package/src/storefront/plans.js +16 -23
  161. package/src/storefront/plans.spec.js +25 -54
  162. package/src/storefront/products.js +18 -22
  163. package/src/storefront/products.spec.js +23 -54
  164. package/src/storefront/purchase.js +14 -14
  165. package/src/storefront/purchase.spec.js +17 -29
  166. package/src/storefront/ready-to-pay.js +26 -23
  167. package/src/storefront/ready-to-pay.spec.js +41 -71
  168. package/src/storefront/storefront.spec.js +1 -1
  169. package/src/storefront/summary.js +26 -22
  170. package/src/storefront/summary.spec.js +60 -109
  171. package/src/storefront/transactions.js +11 -0
  172. package/src/style/base/__snapshots__/theme.spec.js.snap +188 -45
  173. package/src/style/base/default-theme.js +674 -0
  174. package/src/style/base/index.js +48 -16
  175. package/src/style/base/theme.js +20 -48
  176. package/src/style/base/theme.spec.js +5 -15
  177. package/src/style/browserslist.js +1 -3
  178. package/src/style/components/address.js +3 -3
  179. package/src/style/components/button.js +32 -22
  180. package/src/style/components/divider.js +9 -9
  181. package/src/style/components/forms/checkbox.js +11 -9
  182. package/src/style/components/forms/field.js +18 -6
  183. package/src/style/components/forms/form.js +2 -2
  184. package/src/style/components/forms/input.js +54 -13
  185. package/src/style/components/forms/label.js +44 -18
  186. package/src/style/components/forms/select.js +54 -22
  187. package/src/style/components/forms/validation.js +53 -6
  188. package/src/style/components/icons.js +4 -4
  189. package/src/style/components/index.js +1 -1
  190. package/src/style/components/loader.js +4 -3
  191. package/src/style/components/methods.js +52 -48
  192. package/src/style/components/overlay.js +5 -5
  193. package/src/style/helpers/index.js +46 -46
  194. package/src/style/index.js +4 -2
  195. package/src/style/payment-instruments/payment-card.js +4 -4
  196. package/src/style/utils/border.js +34 -0
  197. package/src/style/utils/color-values.js +30 -4
  198. package/src/style/utils/remove-empty-null.js +10 -0
  199. package/src/style/vendor/framepay.js +12 -9
  200. package/src/style/vendor/postmate.js +3 -3
  201. package/src/style/views/confirmation.js +13 -13
  202. package/src/style/views/index.js +1 -1
  203. package/src/style/views/method-selector.js +3 -3
  204. package/src/style/views/modal.js +9 -7
  205. package/src/style/views/result.js +4 -4
  206. package/src/style/views/summary.js +26 -22
  207. package/src/utils/add-dom-element.js +12 -13
  208. package/src/utils/format-currency.js +6 -2
  209. package/src/utils/has-valid-css-selector.js +2 -2
  210. package/src/utils/is-dom-element.js +1 -1
  211. package/src/utils/process-property-as-dom-element.js +27 -24
  212. package/src/utils/sleep.js +1 -1
  213. package/src/views/__snapshots__/summary.spec.js.snap +72 -118
  214. package/src/views/common/iframe/base-iframe.js +12 -4
  215. package/src/views/common/iframe/event-listeners.js +6 -6
  216. package/src/views/common/iframe/index.js +1 -1
  217. package/src/views/common/iframe/method-iframe.js +3 -6
  218. package/src/views/common/iframe/modal-iframe.js +48 -6
  219. package/src/views/common/iframe/view-iframe.js +3 -5
  220. package/src/views/common/render-utilities.js +3 -3
  221. package/src/views/confirmation.js +34 -25
  222. package/src/views/method-selector/express-methods/apple-pay.js +78 -0
  223. package/src/views/method-selector/express-methods/google-pay.js +24 -0
  224. package/src/views/method-selector/express-methods/paypal.js +7 -0
  225. package/src/views/method-selector/generate-digital-wallet.js +51 -0
  226. package/src/views/method-selector/generate-digital-wallet.spec.js +135 -0
  227. package/src/views/method-selector/get-method-data.js +7 -4
  228. package/src/views/method-selector/get-payment-methods.js +38 -31
  229. package/src/views/method-selector/get-payment-methods.spec.js +26 -33
  230. package/src/views/method-selector/index.js +70 -99
  231. package/src/views/method-selector/method-selector.spec.js +88 -78
  232. package/src/views/method-selector/mount-express-methods.js +36 -60
  233. package/src/views/method-selector/mount-methods.js +32 -21
  234. package/src/views/modal.js +36 -22
  235. package/src/views/result.js +12 -15
  236. package/src/views/summary.js +175 -101
  237. package/src/views/summary.spec.js +99 -74
  238. package/tests/async-utilities.js +22 -0
  239. package/tests/mocks/rebilly-instruments-mock.js +89 -77
  240. package/tests/mocks/storefront-api-mock.js +8 -0
  241. package/tests/mocks/storefront-mock.js +17 -0
  242. package/dist/events/purchase-completed.js +0 -24
  243. package/dist/functions/initialize.js +0 -82
  244. package/dist/functions/initialize.spec.js +0 -34
  245. package/dist/functions/mount/fetch-summary-data.js +0 -31
  246. package/dist/functions/mount/fetch-summary-data.spec.js +0 -45
  247. package/dist/views/method-selector/process-digital-wallet-options.js +0 -35
  248. package/dist/views/method-selector/process-digital-wallet-options.spec.js +0 -80
  249. package/src/events/purchase-completed.js +0 -11
  250. package/src/functions/initialize.js +0 -74
  251. package/src/functions/initialize.spec.js +0 -38
  252. package/src/functions/mount/fetch-summary-data.js +0 -26
  253. package/src/functions/mount/fetch-summary-data.spec.js +0 -46
  254. package/src/views/method-selector/process-digital-wallet-options.js +0 -16
  255. package/src/views/method-selector/process-digital-wallet-options.spec.js +0 -94
@@ -3,25 +3,24 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.FetchReadyToPay = FetchReadyToPay;
6
+ exports.fetchReadyToPay = fetchReadyToPay;
7
7
 
8
8
  var _riskDataCollector = require("@rebilly/risk-data-collector");
9
9
 
10
10
  var _readyToPayModel = _interopRequireDefault(require("./models/ready-to-pay-model"));
11
11
 
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- async function FetchReadyToPay(riskMetadata = null) {
15
- if (!this.storefront) {
16
- throw new Error('Could not access rebilly-js-sdk instance');
17
- }
12
+ var _index = require("./index");
18
13
 
19
- if (!this.configs || !this.options) {
20
- throw new Error('Could not use Rebilly Instruments configurations or mount options to fetch Rebilly data');
21
- }
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
15
 
23
- try {
24
- var _this$configs, _this$options, _this$options$intent;
16
+ async function fetchReadyToPay({
17
+ state,
18
+ riskMetadata = null
19
+ }) {
20
+ return (0, _index.Endpoint)({
21
+ state
22
+ }, async () => {
23
+ var _state$options, _state$options2, _state$data;
25
24
 
26
25
  if (!riskMetadata) {
27
26
  const {
@@ -30,25 +29,30 @@ async function FetchReadyToPay(riskMetadata = null) {
30
29
  riskMetadata = data;
31
30
  }
32
31
 
33
- const websiteId = ((_this$configs = this.configs) === null || _this$configs === void 0 ? void 0 : _this$configs.websiteId) || null;
34
- const items = ((_this$options = this.options) === null || _this$options === void 0 ? void 0 : (_this$options$intent = _this$options.intent) === null || _this$options$intent === void 0 ? void 0 : _this$options$intent.items) || [];
32
+ const websiteId = ((_state$options = state.options) === null || _state$options === void 0 ? void 0 : _state$options.websiteId) || null;
35
33
  const data = {
36
- items,
37
34
  websiteId,
38
35
  riskMetadata
39
36
  };
37
+
38
+ if ((_state$options2 = state.options) !== null && _state$options2 !== void 0 && _state$options2.items) {
39
+ data.items = state.options.items;
40
+ }
41
+
42
+ if ((_state$data = state.data) !== null && _state$data !== void 0 && _state$data.amountAndCurrency) {
43
+ const money = state.data.amountAndCurrency;
44
+ data.amount = money.amount;
45
+ data.currency = money.currency;
46
+ }
47
+
40
48
  const {
41
49
  fields: readyToPayFields
42
- } = await this.storefront.purchase.readyToPay({
50
+ } = await state.storefront.purchase.readyToPay({
43
51
  data
44
52
  });
45
53
  return Object.values(readyToPayFields).map((fields, index) => new _readyToPayModel.default({
46
54
  index,
47
55
  ...fields
48
56
  }));
49
- } catch (error) {
50
- throw error;
51
- }
52
- }
53
-
54
- ;
57
+ });
58
+ }
@@ -1,36 +1,22 @@
1
1
  "use strict";
2
2
 
3
- var _storefrontMock = require("tests/mocks/storefront-mock");
3
+ var _storefrontMock = require("../../tests/mocks/storefront-mock");
4
4
 
5
5
  var _mswWhenThen = require("msw-when-then");
6
6
 
7
- var _server = require("tests/msw/server");
7
+ var _server = require("../../tests/msw/server");
8
8
 
9
- var _storefrontApiMock = require("tests/mocks/storefront-api-mock");
9
+ var _storefrontApiMock = require("../../tests/mocks/storefront-api-mock");
10
10
 
11
11
  var _readyToPay = require("./ready-to-pay");
12
12
 
13
13
  var _readyToPayModel = _interopRequireDefault(require("./models/ready-to-pay-model"));
14
14
 
15
+ var _asyncUtilities = require("../../tests/async-utilities");
16
+
15
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
18
 
17
19
  describe('Storefront API Ready to Pay', () => {
18
- class TestReadyToPayInstance {
19
- constructor({
20
- configs = {},
21
- options = {}
22
- } = {}) {
23
- this.configs = configs;
24
- this.options = options;
25
- this.storefront = (0, _storefrontMock.MockStorefront)();
26
- }
27
-
28
- fetchReadyToPay(...args) {
29
- return _readyToPay.FetchReadyToPay.apply(this, args);
30
- }
31
-
32
- }
33
-
34
20
  it('can fetch ready to pay', async () => {
35
21
  const readyToPayPayload = [{
36
22
  method: 'payment-card',
@@ -38,29 +24,28 @@ describe('Storefront API Ready to Pay', () => {
38
24
  brands: ['Visa'],
39
25
  filters: []
40
26
  }];
41
- const configs = {
42
- websiteId: 'test-website-id'
43
- };
44
27
  const options = {
45
- intent: {
46
- items: [{
47
- planId: 'test-plan-id',
48
- quantity: 1
49
- }]
50
- }
28
+ websiteId: 'test-website-id',
29
+ items: [{
30
+ planId: 'test-plan-id',
31
+ quantity: 1
32
+ }]
51
33
  };
52
34
  (0, _server.when)((0, _mswWhenThen.post)(`${_storefrontApiMock.storefrontURL}/ready-to-pay`)).thenReturn((0, _mswWhenThen.ok)(readyToPayPayload));
53
- const instance = new TestReadyToPayInstance({
54
- configs,
35
+ const instance = (0, _storefrontMock.StorefontTestingInstance)({
55
36
  options
56
37
  });
57
38
  jest.spyOn(instance.storefront.purchase, 'readyToPay');
58
- const response = await instance.fetchReadyToPay();
39
+ const riskMetadata = null;
40
+ const response = await (0, _readyToPay.fetchReadyToPay)({
41
+ state: instance,
42
+ riskMetadata
43
+ });
59
44
  expect(instance.storefront.purchase.readyToPay).toBeCalledTimes(1);
60
45
  expect(instance.storefront.purchase.readyToPay).toBeCalledWith({
61
46
  data: {
62
- items: options.intent.items,
63
- websiteId: configs.websiteId,
47
+ items: options.items,
48
+ websiteId: options.websiteId,
64
49
  riskMetadata: {}
65
50
  }
66
51
  });
@@ -71,28 +56,14 @@ describe('Storefront API Ready to Pay', () => {
71
56
  ...readyToPayPayload[0]
72
57
  })]);
73
58
  });
74
- it('should throw errors with no configs or options', () => {
75
- const NoConfigOrOptionsError = new Error('Could not use Rebilly Instruments configurations or mount options to fetch Rebilly data');
76
- const noConfigOrOptionsInstance = new TestReadyToPayInstance({
77
- configs: null,
78
- options: null
79
- });
80
- const noConfigInstance = new TestReadyToPayInstance({
81
- configs: null,
82
- options: {}
83
- });
84
- const noOptionsInstance = new TestReadyToPayInstance({
85
- configs: {},
59
+ it('should throw errors with no options', async () => {
60
+ const riskMetadata = null;
61
+ const noConfigOrOptionsInstance = new _storefrontMock.StorefontTestingInstance({
86
62
  options: null
87
63
  });
88
- expect(async () => {
89
- await noConfigOrOptionsInstance.fetchReadyToPay();
90
- }).rejects.toEqual(NoConfigOrOptionsError);
91
- expect(async () => {
92
- await noConfigInstance.fetchReadyToPay();
93
- }).rejects.toEqual(NoConfigOrOptionsError);
94
- expect(async () => {
95
- await noOptionsInstance.fetchReadyToPay();
96
- }).rejects.toEqual(NoConfigOrOptionsError);
64
+ await (0, _asyncUtilities.expectConfigurationError)((0, _readyToPay.fetchReadyToPay)({
65
+ riskMetadata,
66
+ state: noConfigOrOptionsInstance
67
+ }));
97
68
  });
98
69
  });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _storefrontMock = require("tests/mocks/storefront-mock");
3
+ var _storefrontMock = require("../../tests/mocks/storefront-mock");
4
4
 
5
5
  describe('Storefront application programming interface', () => {
6
6
  it('can create rebilly-js-sdk instance', () => {
@@ -3,35 +3,40 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.FetchSummary = FetchSummary;
6
+ exports.fetchSummary = fetchSummary;
7
7
 
8
8
  var _summaryModel = _interopRequireDefault(require("./models/summary-model"));
9
9
 
10
+ var _index = require("./index");
11
+
10
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
13
 
12
- async function FetchSummary({
13
- data = null
14
+ async function fetchSummary({
15
+ data = null,
16
+ state = null
14
17
  } = {}) {
15
- if (!this.storefront) {
16
- throw new Error('Could not access rebilly-js-sdk instance');
17
- }
18
-
19
- if (!this.configs || !this.options) {
20
- throw new Error('Could not use Rebilly Instruments configurations or mount options to fetch Rebilly data');
21
- }
22
-
23
- try {
24
- var _this$configs, _this$options, _this$options$intent;
18
+ return (0, _index.Endpoint)({
19
+ state
20
+ }, async () => {
21
+ var _state$options, _state$options2, _state$data;
25
22
 
26
- const websiteId = ((_this$configs = this.configs) === null || _this$configs === void 0 ? void 0 : _this$configs.websiteId) || null;
27
- const items = ((_this$options = this.options) === null || _this$options === void 0 ? void 0 : (_this$options$intent = _this$options.intent) === null || _this$options$intent === void 0 ? void 0 : _this$options$intent.items) || [];
23
+ const websiteId = ((_state$options = state.options) === null || _state$options === void 0 ? void 0 : _state$options.websiteId) || null;
28
24
  const payload = {
29
25
  data: {
30
- websiteId,
31
- items
26
+ websiteId
32
27
  }
33
28
  };
34
29
 
30
+ if ((_state$options2 = state.options) !== null && _state$options2 !== void 0 && _state$options2.items) {
31
+ payload.data.items = state.options.items;
32
+ }
33
+
34
+ if ((_state$data = state.data) !== null && _state$data !== void 0 && _state$data.amountAndCurrency) {
35
+ payload.data = { ...payload.data,
36
+ ...state.data.amountAndCurrency
37
+ };
38
+ }
39
+
35
40
  if (data !== null && data !== void 0 && data.billingAddress) {
36
41
  payload.data.billingAddress = data.billingAddress;
37
42
  }
@@ -42,11 +47,9 @@ async function FetchSummary({
42
47
 
43
48
  const {
44
49
  fields: summaryFields
45
- } = await this.storefront.purchase.preview(payload);
46
- return new _summaryModel.default(summaryFields);
47
- } catch (error) {
48
- throw error;
49
- }
50
- }
50
+ } = await state.storefront.purchase.preview(payload); // In case of preview purchase gets call again for updating the values
51
51
 
52
- ;
52
+ state.data.previewPurchase = summaryFields;
53
+ return new _summaryModel.default(summaryFields);
54
+ });
55
+ }
@@ -1,48 +1,29 @@
1
1
  "use strict";
2
2
 
3
- var _storefrontMock = require("tests/mocks/storefront-mock");
3
+ var _storefrontMock = require("../../tests/mocks/storefront-mock");
4
4
 
5
5
  var _mswWhenThen = require("msw-when-then");
6
6
 
7
- var _server = require("tests/msw/server");
7
+ var _server = require("../../tests/msw/server");
8
8
 
9
- var _storefrontApiMock = require("tests/mocks/storefront-api-mock");
9
+ var _storefrontApiMock = require("../../tests/mocks/storefront-api-mock");
10
10
 
11
11
  var _summary = require("./summary");
12
12
 
13
- var _summaryModel = _interopRequireDefault(require("@/storefront/models/summary-model"));
13
+ var _summaryModel = _interopRequireDefault(require("./models/summary-model"));
14
+
15
+ var _asyncUtilities = require("../../tests/async-utilities");
14
16
 
15
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
18
 
17
19
  describe('Storefront API Summary', () => {
18
- class TestSummaryInstance {
19
- constructor({
20
- configs = {},
21
- options = {},
22
- storefront = null
23
- } = {}) {
24
- this.configs = configs;
25
- this.options = options;
26
- this.storefront = storefront === null ? (0, _storefrontMock.MockStorefront)() : storefront;
27
- }
28
-
29
- fetchSummary(...args) {
30
- return _summary.FetchSummary.apply(this, args);
31
- }
32
-
33
- }
34
-
35
20
  it('can fetch preview', async () => {
36
- const configs = {
37
- websiteId: 'test-website-id'
38
- };
39
21
  const options = {
40
- intent: {
41
- items: [{
42
- planId: 'test-plan-id',
43
- quantity: 1
44
- }]
45
- }
22
+ websiteId: 'test-website-id',
23
+ items: [{
24
+ planId: 'test-plan-id',
25
+ quantity: 1
26
+ }]
46
27
  };
47
28
  const testSummary = {
48
29
  currency: 'USD',
@@ -53,114 +34,91 @@ describe('Storefront API Summary', () => {
53
34
  }]
54
35
  };
55
36
  (0, _server.when)((0, _mswWhenThen.post)(`${_storefrontApiMock.storefrontURL}/preview-purchase`)).thenReturn((0, _mswWhenThen.ok)(testSummary));
56
- const instance = new TestSummaryInstance({
57
- configs,
37
+ const instance = (0, _storefrontMock.StorefontTestingInstance)({
58
38
  options
59
39
  });
60
40
  jest.spyOn(instance.storefront.purchase, 'preview');
61
- const response = await instance.fetchSummary();
41
+ const response = await (0, _summary.fetchSummary)({
42
+ state: instance
43
+ });
62
44
  expect(instance.storefront.purchase.preview).toBeCalledTimes(1);
63
45
  expect(instance.storefront.purchase.preview).toBeCalledWith({
64
46
  data: {
65
- items: options.intent.items,
66
- websiteId: configs.websiteId
47
+ items: options.items,
48
+ websiteId: options.websiteId
67
49
  }
68
50
  });
69
51
  expect(response).toBeInstanceOf(_summaryModel.default);
70
52
  expect(response).toEqual(new _summaryModel.default(testSummary));
71
53
  });
72
54
  it('Adds billing address to preview payload', async () => {
73
- const configs = {
74
- websiteId: 'test-website-id'
75
- };
76
55
  const options = {
77
- intent: {
78
- items: [{
79
- planId: 'test-plan-id',
80
- quantity: 1
81
- }]
82
- }
56
+ websiteId: 'test-website-id',
57
+ items: [{
58
+ planId: 'test-plan-id',
59
+ quantity: 1
60
+ }]
83
61
  };
84
62
  const billingAddress = {
85
63
  firstName: 'Test',
86
64
  lastName: 'Customer'
87
65
  };
88
- const instance = new TestSummaryInstance({
89
- configs,
66
+ const instance = (0, _storefrontMock.StorefontTestingInstance)({
90
67
  options
91
68
  });
92
69
  jest.spyOn(instance.storefront.purchase, 'preview');
93
- await instance.fetchSummary({
70
+ await (0, _summary.fetchSummary)({
94
71
  data: {
95
72
  billingAddress
96
- }
73
+ },
74
+ state: instance
97
75
  });
98
76
  expect(instance.storefront.purchase.preview).toBeCalledTimes(1);
99
77
  expect(instance.storefront.purchase.preview).toBeCalledWith({
100
78
  data: {
101
- items: options.intent.items,
102
- websiteId: configs.websiteId,
79
+ items: options.items,
80
+ websiteId: options.websiteId,
103
81
  billingAddress
104
82
  }
105
83
  });
106
84
  });
107
85
  it('Adds delivery address to preview payload', async () => {
108
- const configs = {
109
- websiteId: 'test-website-id'
110
- };
111
86
  const options = {
112
- intent: {
113
- items: [{
114
- planId: 'test-plan-id',
115
- quantity: 1
116
- }]
117
- }
87
+ websiteId: 'test-website-id',
88
+ items: [{
89
+ planId: 'test-plan-id',
90
+ quantity: 1
91
+ }]
118
92
  };
119
93
  const deliveryAddress = {
120
94
  firstName: 'Test',
121
95
  lastName: 'Customer'
122
96
  };
123
- const instance = new TestSummaryInstance({
124
- configs,
97
+ const instance = (0, _storefrontMock.StorefontTestingInstance)({
125
98
  options
126
99
  });
127
100
  jest.spyOn(instance.storefront.purchase, 'preview');
128
- await instance.fetchSummary({
101
+ await (0, _summary.fetchSummary)({
129
102
  data: {
130
103
  deliveryAddress
131
- }
104
+ },
105
+ state: instance
132
106
  });
133
107
  expect(instance.storefront.purchase.preview).toBeCalledTimes(1);
134
108
  expect(instance.storefront.purchase.preview).toBeCalledWith({
135
109
  data: {
136
- items: options.intent.items,
137
- websiteId: configs.websiteId,
110
+ items: options.items,
111
+ websiteId: options.websiteId,
138
112
  deliveryAddress
139
113
  }
140
114
  });
141
115
  });
142
- it('should throw errors with no configs or options', () => {
143
- const NoConfigOrOptionsError = new Error('Could not use Rebilly Instruments configurations or mount options to fetch Rebilly data');
144
- const noConfigOrOptionsInstance = new TestSummaryInstance({
145
- configs: null,
146
- options: null
147
- });
148
- const noConfigInstance = new TestSummaryInstance({
149
- configs: null,
150
- options: {}
151
- });
152
- const noOptionsInstance = new TestSummaryInstance({
153
- configs: {},
116
+ it('should throw errors with no options', async () => {
117
+ const noConfigOrOptionsInstance = (0, _storefrontMock.StorefontTestingInstance)({
154
118
  options: null
155
119
  });
156
- expect(async () => {
157
- await noConfigOrOptionsInstance.fetchSummary();
158
- }).rejects.toEqual(NoConfigOrOptionsError);
159
- expect(async () => {
160
- await noConfigInstance.fetchSummary();
161
- }).rejects.toEqual(NoConfigOrOptionsError);
162
- expect(async () => {
163
- await noOptionsInstance.fetchSummary();
164
- }).rejects.toEqual(NoConfigOrOptionsError);
120
+ await (0, _asyncUtilities.expectConfigurationError)((0, _summary.fetchSummary)({
121
+ state: noConfigOrOptionsInstance
122
+ }));
165
123
  });
166
124
  });
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fetchTransaction = fetchTransaction;
7
+
8
+ var _transactionModel = _interopRequireDefault(require("./models/transaction-model"));
9
+
10
+ var _index = require("./index");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ async function fetchTransaction({
15
+ data = null,
16
+ state = null
17
+ }) {
18
+ return (0, _index.Endpoint)({
19
+ state
20
+ }, async () => {
21
+ state.storefront.setSessionToken(state.options.customerJwt);
22
+ const {
23
+ fields
24
+ } = await state.storefront.transactions.get(data);
25
+ return new _transactionModel.default(fields);
26
+ });
27
+ }