@rebilly/instruments 3.0.0-beta.0 → 3.1.2-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 (169) hide show
  1. package/dist/index.js +88 -107
  2. package/dist/index.min.js +88 -0
  3. package/package.json +17 -6
  4. package/rollup.config.js +84 -0
  5. package/src/functions/mount/fetch-data.js +13 -1
  6. package/src/functions/mount/index.js +6 -42
  7. package/src/functions/mount/setup-framepay-theme.js +2 -2
  8. package/src/functions/mount/setup-options.js +3 -0
  9. package/src/functions/mount/setup-user-flow.js +49 -0
  10. package/src/functions/purchase.js +1 -1
  11. package/src/functions/setup.js +1 -1
  12. package/src/functions/show.spec.js +1 -1
  13. package/src/i18n/en.json +3 -0
  14. package/src/i18n/index.js +1 -1
  15. package/src/index.js +1 -61
  16. package/src/instance.js +65 -0
  17. package/src/{index.spec.js → instance.spec.js} +2 -1
  18. package/src/loader/index.js +21 -1
  19. package/src/storefront/models/ready-to-pay-model.js +13 -2
  20. package/src/storefront/plans.js +8 -4
  21. package/src/storefront/plans.spec.js +8 -2
  22. package/src/storefront/products.js +8 -4
  23. package/src/storefront/products.spec.js +8 -2
  24. package/src/storefront/ready-to-pay.js +5 -4
  25. package/src/style/base/__snapshots__/theme.spec.js.snap +34 -2
  26. package/src/style/base/default-theme.js +106 -3
  27. package/src/style/components/button.js +17 -1
  28. package/src/style/components/forms/label.js +0 -5
  29. package/src/style/components/loader.js +2 -1
  30. package/src/style/payment-instruments/payment-card.js +2 -1
  31. package/src/style/utils/remove-empty-null.js +9 -9
  32. package/src/style/vendor/postmate.js +13 -0
  33. package/src/style/views/confirmation.js +2 -1
  34. package/src/views/common/iframe/base-iframe.js +2 -0
  35. package/src/views/common/iframe/event-listeners.js +10 -0
  36. package/src/views/common/iframe/method-iframe.js +3 -1
  37. package/src/views/confirmation.js +1 -0
  38. package/src/views/method-selector/express-methods/{google-pay.js → index.js} +3 -2
  39. package/src/views/method-selector/mount-express-methods.js +6 -18
  40. package/src/views/result.js +1 -0
  41. package/tests/mocks/rebilly-instruments-mock.js +2 -2
  42. package/dist/events/base-event.js +0 -66
  43. package/dist/events/events.spec.js +0 -18
  44. package/dist/events/index.js +0 -22
  45. package/dist/functions/destroy.js +0 -34
  46. package/dist/functions/destroy.spec.js +0 -69
  47. package/dist/functions/mount/fetch-data.js +0 -187
  48. package/dist/functions/mount/fetch-data.spec.js +0 -189
  49. package/dist/functions/mount/index.js +0 -218
  50. package/dist/functions/mount/mount.spec.js +0 -64
  51. package/dist/functions/mount/setup-element.js +0 -40
  52. package/dist/functions/mount/setup-framepay-theme.js +0 -95
  53. package/dist/functions/mount/setup-framepay.js +0 -46
  54. package/dist/functions/mount/setup-i18n.js +0 -33
  55. package/dist/functions/mount/setup-options.js +0 -99
  56. package/dist/functions/mount/setup-options.spec.js +0 -66
  57. package/dist/functions/mount/setup-storefront.js +0 -34
  58. package/dist/functions/mount/setup-styles.js +0 -43
  59. package/dist/functions/on.js +0 -40
  60. package/dist/functions/on.spec.js +0 -55
  61. package/dist/functions/purchase.js +0 -158
  62. package/dist/functions/purchase.spec.js +0 -74
  63. package/dist/functions/setup.js +0 -85
  64. package/dist/functions/setup.spec.js +0 -87
  65. package/dist/functions/show.js +0 -55
  66. package/dist/functions/show.spec.js +0 -61
  67. package/dist/functions/update.js +0 -74
  68. package/dist/functions/update.spec.js +0 -86
  69. package/dist/i18n/en.json +0 -22
  70. package/dist/i18n/es.json +0 -22
  71. package/dist/i18n/i18n.spec.js +0 -22
  72. package/dist/i18n/index.js +0 -72
  73. package/dist/index.spec.js +0 -35
  74. package/dist/loader/index.js +0 -94
  75. package/dist/loader/loader.spec.js +0 -69
  76. package/dist/storefront/index.js +0 -73
  77. package/dist/storefront/invoices.js +0 -27
  78. package/dist/storefront/models/base-model.js +0 -18
  79. package/dist/storefront/models/invoice-model.js +0 -14
  80. package/dist/storefront/models/plan-model.js +0 -14
  81. package/dist/storefront/models/product-model.js +0 -14
  82. package/dist/storefront/models/ready-to-pay-model.js +0 -46
  83. package/dist/storefront/models/summary-model.js +0 -79
  84. package/dist/storefront/models/transaction-model.js +0 -31
  85. package/dist/storefront/payment-instruments.js +0 -47
  86. package/dist/storefront/payment-instruments.spec.js +0 -55
  87. package/dist/storefront/plans.js +0 -37
  88. package/dist/storefront/plans.spec.js +0 -64
  89. package/dist/storefront/products.js +0 -40
  90. package/dist/storefront/products.spec.js +0 -65
  91. package/dist/storefront/purchase.js +0 -43
  92. package/dist/storefront/purchase.spec.js +0 -48
  93. package/dist/storefront/ready-to-pay.js +0 -58
  94. package/dist/storefront/ready-to-pay.spec.js +0 -69
  95. package/dist/storefront/storefront.spec.js +0 -15
  96. package/dist/storefront/summary.js +0 -55
  97. package/dist/storefront/summary.spec.js +0 -124
  98. package/dist/storefront/transactions.js +0 -27
  99. package/dist/style/base/__snapshots__/theme.spec.js.snap +0 -195
  100. package/dist/style/base/default-theme.js +0 -699
  101. package/dist/style/base/index.js +0 -104
  102. package/dist/style/base/theme.js +0 -41
  103. package/dist/style/base/theme.spec.js +0 -19
  104. package/dist/style/browserslist.js +0 -8
  105. package/dist/style/components/address.js +0 -64
  106. package/dist/style/components/button.js +0 -71
  107. package/dist/style/components/divider.js +0 -48
  108. package/dist/style/components/forms/checkbox.js +0 -86
  109. package/dist/style/components/forms/field.js +0 -65
  110. package/dist/style/components/forms/form.js +0 -28
  111. package/dist/style/components/forms/input.js +0 -86
  112. package/dist/style/components/forms/label.js +0 -69
  113. package/dist/style/components/forms/select.js +0 -95
  114. package/dist/style/components/forms/validation.js +0 -81
  115. package/dist/style/components/icons.js +0 -22
  116. package/dist/style/components/index.js +0 -57
  117. package/dist/style/components/loader.js +0 -50
  118. package/dist/style/components/methods.js +0 -108
  119. package/dist/style/components/overlay.js +0 -33
  120. package/dist/style/helpers/index.js +0 -59
  121. package/dist/style/index.js +0 -50
  122. package/dist/style/payment-instruments/content.js +0 -17
  123. package/dist/style/payment-instruments/index.js +0 -20
  124. package/dist/style/payment-instruments/payment-card.js +0 -35
  125. package/dist/style/utils/border.js +0 -47
  126. package/dist/style/utils/color-values.js +0 -58
  127. package/dist/style/utils/remove-empty-null.js +0 -20
  128. package/dist/style/vendor/framepay.js +0 -37
  129. package/dist/style/vendor/postmate.js +0 -17
  130. package/dist/style/views/confirmation.js +0 -85
  131. package/dist/style/views/index.js +0 -29
  132. package/dist/style/views/method-selector.js +0 -20
  133. package/dist/style/views/modal.js +0 -93
  134. package/dist/style/views/result.js +0 -61
  135. package/dist/style/views/summary.js +0 -127
  136. package/dist/utils/add-dom-element.js +0 -26
  137. package/dist/utils/format-currency.js +0 -15
  138. package/dist/utils/has-valid-css-selector.js +0 -11
  139. package/dist/utils/index.js +0 -55
  140. package/dist/utils/is-dom-element.js +0 -10
  141. package/dist/utils/process-property-as-dom-element.js +0 -38
  142. package/dist/utils/sleep.js +0 -10
  143. package/dist/views/__snapshots__/summary.spec.js.snap +0 -246
  144. package/dist/views/common/iframe/base-iframe.js +0 -59
  145. package/dist/views/common/iframe/event-listeners.js +0 -50
  146. package/dist/views/common/iframe/index.js +0 -19
  147. package/dist/views/common/iframe/method-iframe.js +0 -33
  148. package/dist/views/common/iframe/modal-iframe.js +0 -84
  149. package/dist/views/common/iframe/view-iframe.js +0 -31
  150. package/dist/views/common/render-utilities.js +0 -11
  151. package/dist/views/confirmation.js +0 -92
  152. package/dist/views/method-selector/__snapshots__/method-selector.spec.js.snap +0 -3
  153. package/dist/views/method-selector/express-methods/apple-pay.js +0 -92
  154. package/dist/views/method-selector/express-methods/google-pay.js +0 -31
  155. package/dist/views/method-selector/express-methods/paypal.js +0 -19
  156. package/dist/views/method-selector/generate-digital-wallet.js +0 -68
  157. package/dist/views/method-selector/generate-digital-wallet.spec.js +0 -135
  158. package/dist/views/method-selector/get-method-data.js +0 -25
  159. package/dist/views/method-selector/get-payment-methods.js +0 -66
  160. package/dist/views/method-selector/get-payment-methods.spec.js +0 -46
  161. package/dist/views/method-selector/index.js +0 -122
  162. package/dist/views/method-selector/method-selector.spec.js +0 -124
  163. package/dist/views/method-selector/mount-express-methods.js +0 -69
  164. package/dist/views/method-selector/mount-methods.js +0 -74
  165. package/dist/views/modal.js +0 -88
  166. package/dist/views/result.js +0 -40
  167. package/dist/views/summary.js +0 -215
  168. package/dist/views/summary.spec.js +0 -134
  169. package/src/views/method-selector/express-methods/paypal.js +0 -7
@@ -1,158 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.makePayment = makePayment;
7
- exports.makePurchase = makePurchase;
8
- exports.handleApprovalUrl = handleApprovalUrl;
9
- exports.purchase = purchase;
10
-
11
- var _purchase = require("../storefront/purchase");
12
-
13
- var _events = _interopRequireDefault(require("../events"));
14
-
15
- var _modal = require("../views/modal");
16
-
17
- var _fetchData = require("./mount/fetch-data");
18
-
19
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
-
21
- async function makePayment({
22
- state,
23
- payload
24
- }) {
25
- const {
26
- _raw: {
27
- id: token
28
- }
29
- } = payload;
30
- const data = {
31
- token,
32
- ...payload
33
- };
34
-
35
- if (state.options.invoiceId) {
36
- data.invoiceId = state.options.invoiceId;
37
- }
38
-
39
- if (state.options.transactionId) {
40
- data.transactionId = state.options.transactionId;
41
- }
42
-
43
- if (state.options.money) {
44
- data.websiteId = state.options.websiteId;
45
- data.amount = state.options.money.amount;
46
- data.currency = state.options.money.currency;
47
- }
48
-
49
- let {
50
- fields
51
- } = await (0, _purchase.postPayment)({
52
- state,
53
- data
54
- });
55
- fields = {
56
- transaction: fields,
57
- token: fields.token || state.options.customerJwt
58
- };
59
-
60
- if (state.data.invoice) {
61
- fields.invoice = state.data.invoice;
62
- }
63
-
64
- return fields;
65
- }
66
-
67
- async function makePurchase({
68
- state,
69
- payload
70
- }) {
71
- const {
72
- fields
73
- } = await (0, _purchase.postPurchase)({
74
- state,
75
- data: {
76
- websiteId: state.options.websiteId,
77
- items: state.options.items,
78
- paymentInstruction: {
79
- token: payload._raw.id
80
- },
81
- ...payload
82
- }
83
- });
84
- return fields;
85
- }
86
-
87
- function handleApprovalUrl({
88
- state,
89
- fields
90
- }) {
91
- const {
92
- paymentMethodsUrl
93
- } = state.options._computed;
94
- const model = {};
95
-
96
- if (state.data.isPayment) {
97
- model.payment = fields;
98
- } else {
99
- model.purchase = fields;
100
- }
101
-
102
- state.data = new _fetchData.DataInstance({
103
- state,
104
- ...fields
105
- });
106
- (0, _modal.mountModal)({
107
- state,
108
- name: 'rebilly-instruments-approval-url',
109
- url: `${paymentMethodsUrl}/approval-url`,
110
- model,
111
- close: updatedPurchase => {
112
- _events.default.purchaseCompleted.dispatch(updatedPurchase);
113
- }
114
- });
115
- }
116
-
117
- async function purchase({
118
- state,
119
- payload
120
- }) {
121
- try {
122
- var _fields$transaction;
123
-
124
- let fields;
125
-
126
- if (state.data.isPayment) {
127
- fields = await makePayment({
128
- state,
129
- payload
130
- });
131
- } else {
132
- fields = await makePurchase({
133
- state,
134
- payload
135
- });
136
- }
137
-
138
- if ((_fields$transaction = fields.transaction) !== null && _fields$transaction !== void 0 && _fields$transaction.approvalUrl) {
139
- handleApprovalUrl({
140
- state,
141
- fields
142
- });
143
- } else {
144
- _events.default.purchaseCompleted.dispatch(fields);
145
- }
146
-
147
- return fields;
148
- } catch (error) {
149
- // TODO: Display error to customer
150
- console.error(error);
151
-
152
- if (error.status === 422) {
153
- error.details.forEach(e => console.error(e));
154
- }
155
-
156
- return error;
157
- }
158
- }
@@ -1,74 +0,0 @@
1
- "use strict";
2
-
3
- var _rebillyInstrumentsMock = require("../../tests/mocks/rebilly-instruments-mock");
4
-
5
- var _mswWhenThen = require("msw-when-then");
6
-
7
- var _server = require("../../tests/msw/server");
8
-
9
- var _storefrontApiMock = require("../../tests/mocks/storefront-api-mock");
10
-
11
- var _events = _interopRequireDefault(require("../events"));
12
-
13
- var _asyncUtilities = require("../../tests/async-utilities");
14
-
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
-
17
- describe('RebillyInstruments purchase', () => {
18
- it('should be able to make a purchase', async () => {
19
- const options = {
20
- websiteId: 'test-website-id',
21
- items: [{
22
- planId: 'test-plan-id',
23
- quantity: 1
24
- }]
25
- };
26
- const token = {
27
- id: 'test-token-id'
28
- };
29
- const billingAddress = {
30
- billing: 'address'
31
- };
32
- const deliveryAddress = {
33
- delivery: 'address'
34
- };
35
- const fields = {
36
- orderId: 'test-order-id',
37
- invoice: {
38
- id: 'test-invoice-id'
39
- },
40
- transaction: {
41
- id: 'test-transaction-id'
42
- }
43
- };
44
- (0, _server.when)((0, _mswWhenThen.post)(`${_storefrontApiMock.storefrontURL}/purchase`)).thenReturn((0, _mswWhenThen.ok)(fields));
45
- const rebillyInstruments = await (0, _rebillyInstrumentsMock.RenderMockRebillyInstruments)(options);
46
- const spyStorefrontPurchase = jest.spyOn(rebillyInstruments.state.storefront.purchase, 'purchase');
47
- jest.spyOn(_events.default.purchaseCompleted, 'dispatch');
48
- const purchaseCompletedListener = jest.fn();
49
- rebillyInstruments.on('purchase-completed', purchaseCompletedListener);
50
- const purchasePayload = {
51
- billingAddress,
52
- deliveryAddress,
53
- _raw: token
54
- };
55
- const purchasePayloadParsed = {
56
- websiteId: rebillyInstruments.state.options.websiteId,
57
- items: rebillyInstruments.state.options.items,
58
- billingAddress,
59
- deliveryAddress,
60
- paymentInstruction: {
61
- token: token.id
62
- }
63
- };
64
- await rebillyInstruments.purchase(purchasePayload);
65
- expect(spyStorefrontPurchase).toBeCalledTimes(1);
66
- expect(spyStorefrontPurchase).toBeCalledWith(expect.objectContaining({
67
- data: purchasePayloadParsed
68
- }));
69
- expect(_events.default.purchaseCompleted.dispatch).toBeCalledTimes(1);
70
- expect(purchaseCompletedListener).toBeCalledTimes(1);
71
- expect(purchaseCompletedListener).toBeCalledWith(expect.objectContaining(fields));
72
- await (0, _asyncUtilities.avoidUnhandledPromises)();
73
- });
74
- });
@@ -1,85 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.setup = setup;
7
-
8
- var _paymentInstruments = require("../storefront/payment-instruments");
9
-
10
- var _events = _interopRequireDefault(require("../events"));
11
-
12
- var _modal = require("../views/modal");
13
-
14
- var _fetchData = require("./mount/fetch-data");
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- async function setup({
19
- state,
20
- payload
21
- }) {
22
- try {
23
- var _state$options;
24
-
25
- const {
26
- instrument,
27
- transaction
28
- } = await (0, _paymentInstruments.setupPaymentInstrument)({
29
- state,
30
- data: {
31
- token: payload._raw.id,
32
- websiteId: (_state$options = state.options) === null || _state$options === void 0 ? void 0 : _state$options.websiteId,
33
- ...payload
34
- }
35
- });
36
- state.data = new _fetchData.DataInstance({
37
- state,
38
- instrument,
39
- transaction
40
- });
41
-
42
- if (transaction.approvalUrl) {
43
- const {
44
- paymentMethodsUrl
45
- } = state.options._computed;
46
- (0, _modal.mountModal)({
47
- state,
48
- name: 'rebilly-instruments-approval-url',
49
- url: `${paymentMethodsUrl}/approval-url`,
50
- model: {
51
- setup: {
52
- transaction
53
- }
54
- },
55
- close: ({
56
- transaction: updatedTransaction = transaction
57
- }) => {
58
- _events.default.setupCompleted.dispatch({
59
- instrument,
60
- transaction: updatedTransaction
61
- });
62
- }
63
- });
64
- } else {
65
- _events.default.setupCompleted.dispatch({
66
- instrument,
67
- transaction
68
- });
69
- }
70
-
71
- return {
72
- instrument,
73
- transaction
74
- };
75
- } catch (error) {
76
- // TODO: Display error to customer
77
- console.error(error);
78
-
79
- if (error.status === 422) {
80
- error.details.forEach(e => console.error(e));
81
- }
82
-
83
- return error;
84
- }
85
- }
@@ -1,87 +0,0 @@
1
- "use strict";
2
-
3
- var _rebillyInstrumentsMock = require("../../tests/mocks/rebilly-instruments-mock");
4
-
5
- var _mswWhenThen = require("msw-when-then");
6
-
7
- var _server = require("../../tests/msw/server");
8
-
9
- var _storefrontApiMock = require("../../tests/mocks/storefront-api-mock");
10
-
11
- var _events = _interopRequireDefault(require("../events"));
12
-
13
- var _asyncUtilities = require("../../tests/async-utilities");
14
-
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
-
17
- describe('RebillyInstruments setup', () => {
18
- it('should be able to setup a payment instrument', async () => {
19
- const options = {
20
- websiteId: 'test-website-id',
21
- money: {
22
- amount: 30,
23
- currency: 'USD'
24
- },
25
- transactionType: 'setup'
26
- };
27
- const token = {
28
- id: 'test-token-id'
29
- };
30
- const billingAddress = {
31
- billing: 'address'
32
- };
33
- const deliveryAddress = {
34
- delivery: 'address'
35
- };
36
- const paymentInstrumentFields = {
37
- id: 'payment-instrument-id'
38
- };
39
- const paymentInstrumentSetupFields = {
40
- id: 'payment-instrument-id',
41
- approvalUrl: null
42
- };
43
- (0, _server.when)((0, _mswWhenThen.post)(`${_storefrontApiMock.storefrontURL}/payment-instruments`)).thenReturn((0, _mswWhenThen.ok)(paymentInstrumentFields));
44
- (0, _server.when)((0, _mswWhenThen.post)(`${_storefrontApiMock.storefrontURL}/payment-instruments/*/setup`)).thenReturn((0, _mswWhenThen.ok)(paymentInstrumentSetupFields));
45
- const rebillyInstruments = await (0, _rebillyInstrumentsMock.RenderMockRebillyInstruments)(options);
46
- const spyCreatePaymentInstrument = jest.spyOn(rebillyInstruments.state.storefront.paymentInstruments, 'create');
47
- const spySetupPaymentInstrument = jest.spyOn(rebillyInstruments.state.storefront.paymentInstruments, 'setup');
48
- const spyDispatchSetupCompleted = jest.spyOn(_events.default.setupCompleted, 'dispatch');
49
- const setupCompletedListener = jest.fn();
50
- rebillyInstruments.on('setup-completed', setupCompletedListener);
51
- const setupPayload = {
52
- billingAddress,
53
- deliveryAddress,
54
- ...options.money,
55
- _raw: token
56
- };
57
- rebillyInstruments.mock.data({
58
- previewPurchase: {
59
- currency: 'USD',
60
- total: 30
61
- }
62
- });
63
- await rebillyInstruments.setup(setupPayload);
64
- expect(spyCreatePaymentInstrument).toBeCalledTimes(1);
65
- expect(spyCreatePaymentInstrument).toBeCalledWith(expect.objectContaining({
66
- data: expect.objectContaining({
67
- token: token.id
68
- })
69
- }));
70
- expect(spySetupPaymentInstrument).toBeCalledTimes(1);
71
- expect(spySetupPaymentInstrument).toBeCalledWith(expect.objectContaining({
72
- id: expect.stringContaining(paymentInstrumentFields.id),
73
- data: expect.objectContaining({
74
- websiteId: rebillyInstruments.state.options.websiteId,
75
- currency: 'USD',
76
- amount: 30
77
- })
78
- }));
79
- expect(spyDispatchSetupCompleted).toBeCalledTimes(1);
80
- expect(setupCompletedListener).toBeCalledTimes(1);
81
- expect(setupCompletedListener).toBeCalledWith(expect.objectContaining({
82
- instrument: paymentInstrumentFields,
83
- transaction: paymentInstrumentSetupFields
84
- }));
85
- await (0, _asyncUtilities.avoidUnhandledPromises)();
86
- });
87
- });
@@ -1,55 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.show = show;
7
-
8
- var _confirmation = require("../views/confirmation");
9
-
10
- var _result = require("../views/result");
11
-
12
- /**
13
- @typedef ShowParams
14
- @type {Object}
15
- @property {string} componentName - The name of the component to render to the form.
16
- @property {object} payload - The extra data to provide the component.
17
- @property {object} state - The global state.
18
- */
19
-
20
- /**
21
- * Register events that will be triggered
22
- * @param {ShowParams} params
23
- */
24
- async function show({
25
- componentName,
26
- payload,
27
- state
28
- }) {
29
- switch (componentName) {
30
- case 'result':
31
- state.iframeComponents = state.iframeComponents.filter(iframe => {
32
- iframe.destroy();
33
- return false;
34
- });
35
- (0, _result.mountResult)({
36
- payload,
37
- state
38
- });
39
- break;
40
-
41
- case 'confirmation':
42
- state.iframeComponents = state.iframeComponents.filter(iframe => {
43
- iframe.destroy();
44
- return false;
45
- });
46
- (0, _confirmation.mountConfirmation)({
47
- payload,
48
- state
49
- });
50
- break;
51
-
52
- default:
53
- throw new Error(`'${componentName}' not a supported component`);
54
- }
55
- }
@@ -1,61 +0,0 @@
1
- "use strict";
2
-
3
- var result = _interopRequireWildcard(require("../views/result"));
4
-
5
- var confirmation = _interopRequireWildcard(require("../views/confirmation"));
6
-
7
- var _rebillyInstrumentsMock = require("../../tests/mocks/rebilly-instruments-mock");
8
-
9
- var _index = require("../index");
10
-
11
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
-
13
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
-
15
- const iframeMock = {
16
- destroy: jest.fn()
17
- };
18
- describe('RebillyInstruments show', () => {
19
- it('should show result component', async () => {
20
- const mountResult = jest.spyOn(result, 'mountResult').mockReturnValue(Promise.resolve());
21
- const instance = new _index.RebillyInstrumentsInstance();
22
- instance.state.iframeComponents.push(iframeMock);
23
- const payload = {
24
- test: 'value'
25
- };
26
- await instance.show('result', payload);
27
- expect(mountResult).toBeCalledTimes(1);
28
- expect(mountResult).toBeCalledWith({
29
- payload,
30
- state: instance.state
31
- });
32
- expect(instance.state.iframeComponents).toEqual([]);
33
- });
34
- it('should show confirmation component', async () => {
35
- const mountConfirmation = jest.spyOn(confirmation, 'mountConfirmation').mockReturnValue(Promise.resolve());
36
- const instance = new _index.RebillyInstrumentsInstance();
37
- instance.state.iframeComponents.push(iframeMock);
38
- const payload = {
39
- test: 'value'
40
- };
41
- await instance.show('confirmation', payload);
42
- expect(mountConfirmation).toBeCalledTimes(1);
43
- expect(mountConfirmation).toBeCalledWith({
44
- payload,
45
- state: instance.state
46
- });
47
- expect(instance.state.iframeComponents).toEqual([]);
48
- });
49
- it('should fail for non supported component', async () => {
50
- const rebillyInstruments = new _index.RebillyInstrumentsInstance();
51
- let error;
52
-
53
- try {
54
- await rebillyInstruments.show('not-a-component', 'any payload');
55
- } catch (e) {
56
- error = e;
57
- }
58
-
59
- expect(error.toString()).toBe(`Error: 'not-a-component' not a supported component`);
60
- });
61
- });
@@ -1,74 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.update = update;
7
-
8
- var _lodash = _interopRequireDefault(require("lodash.merge"));
9
-
10
- var _destroy = require("./destroy");
11
-
12
- var _mount = require("./mount");
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- function sanitizeOldPurchaseData({
17
- newOptions
18
- }) {
19
- let purchaseData = {};
20
- const hasPurchaseDataKeys = Object.keys(newOptions).some(key => ['items', 'money', 'invoiceId', 'transactionId'].includes(key));
21
- purchaseData = hasPurchaseDataKeys ? {
22
- items: null,
23
- money: null,
24
- invoiceId: null,
25
- transactionId: null
26
- } : purchaseData;
27
- return purchaseData;
28
- }
29
-
30
- ;
31
-
32
- async function update({
33
- state,
34
- newOptions = {}
35
- }) {
36
- if (!state.hasMounted) {
37
- throw Error('Update method cannot be called before mounting instruments');
38
- }
39
- /**
40
- * Framepay locale option is almost but not fully updatable yet:
41
- * https://github.com/Rebilly/framepay/issues/450
42
- * That's why this toggle disables real time locale update until that issue is fixed.
43
- */
44
- // const updatingJustLocale =
45
- // newOptions?.options && isEqual(Object.keys(newOptions), ['locale']);
46
- // if (updatingJustLocale) {
47
- // const updatedOptions = merge(state.options, newOptions);
48
- // const newLocale = newOptions?.locale;
49
- // state.options = updatedOptions;
50
- // state.translate.updateTranslationsToNewLocale(newLocale);
51
- // state.iframeComponents.forEach((iframe) =>
52
- // iframe.component.call('changeLocale', newLocale)
53
- // );
54
- // return;
55
- // }
56
-
57
-
58
- const oldOptions = { ...state.options,
59
- ...sanitizeOldPurchaseData({
60
- newOptions
61
- })
62
- };
63
- const updatedOptions = (0, _lodash.default)({ ...oldOptions
64
- }, newOptions);
65
- await (0, _destroy.destroy)({
66
- state
67
- });
68
- (0, _mount.mount)({
69
- state,
70
- form: state.form,
71
- summary: state.summary,
72
- ...updatedOptions
73
- });
74
- }
@@ -1,86 +0,0 @@
1
- "use strict";
2
-
3
- var _rebillyInstrumentsMock = require("../../tests/mocks/rebilly-instruments-mock");
4
-
5
- var _asyncUtilities = require("../../tests/async-utilities");
6
-
7
- describe('RebillyInstruments Update', () => {
8
- it('should throw an error when methods are not mounted', async () => {
9
- const rebillyInstruments = await (0, _rebillyInstrumentsMock.RenderMockRebillyInstruments)();
10
- rebillyInstruments.state.hasMounted = false;
11
- let error;
12
-
13
- try {
14
- await rebillyInstruments.update();
15
- } catch (e) {
16
- error = e;
17
- }
18
-
19
- expect(error).toEqual(new Error('Update method cannot be called before mounting instruments'));
20
- }); // TODO: Un skip this test when we activate real time update (currently disabled by feature toggle in update.js)
21
-
22
- it.skip('should call changeLocale when updating locale options', async () => {
23
- const rebillyInstruments = await (0, _rebillyInstrumentsMock.RenderMockRebillyInstruments)();
24
- const call = jest.fn(); // Simulate mounted iframe
25
-
26
- const fakeIFrameComponent = {
27
- destroy: jest.fn(),
28
- component: {
29
- call
30
- }
31
- };
32
- rebillyInstruments.state.iframeComponents = [fakeIFrameComponent];
33
- await rebillyInstruments.update({
34
- locale: 'ja'
35
- });
36
- expect(call).toBeCalledWith('changeLocale', 'ja'); // It would be better to match real UI instead of implementation state
37
-
38
- expect(rebillyInstruments.state.options.locale).toBe('ja');
39
- expect(rebillyInstruments.state.translate.locale).toBe('ja');
40
- });
41
- it('should destroy and update when updating options different than locale', async () => {
42
- const rebillyInstruments = await (0, _rebillyInstrumentsMock.RenderMockRebillyInstruments)();
43
- const formElement = document.querySelector('.form-selector');
44
- const summaryElement = document.querySelector('.summary-selector');
45
- expect(formElement.innerHTML).not.toEqual('');
46
- expect(summaryElement.innerHTML).not.toEqual('');
47
- const call = jest.fn(); // Simulate mounted iframe
48
-
49
- const fakeIFrameComponent = {
50
- destroy: jest.fn(),
51
- component: {
52
- call
53
- }
54
- };
55
- rebillyInstruments.state.iframeComponents = [fakeIFrameComponent];
56
- await rebillyInstruments.update({
57
- countryCode: 'ES'
58
- });
59
- expect(rebillyInstruments.state.options.countryCode).toEqual('ES');
60
- await (0, _asyncUtilities.avoidUnhandledPromises)();
61
- });
62
- it('should replace the items with different options', async () => {
63
- const rebillyInstruments = await (0, _rebillyInstrumentsMock.RenderMockRebillyInstruments)();
64
- const formElement = document.querySelector('.form-selector');
65
- const summaryElement = document.querySelector('.summary-selector');
66
- expect(formElement.innerHTML).not.toEqual('');
67
- expect(summaryElement.innerHTML).not.toEqual('');
68
- const call = jest.fn(); // Simulate mounted iframe
69
-
70
- const fakeIFrameComponent = {
71
- destroy: jest.fn(),
72
- component: {
73
- call
74
- }
75
- };
76
- rebillyInstruments.iframeComponents = [fakeIFrameComponent];
77
- await rebillyInstruments.update({
78
- items: [{
79
- planId: 'test-plan-id-1',
80
- quantity: 5
81
- }]
82
- });
83
- expect(rebillyInstruments.state.options.items[0].quantity).toEqual(5);
84
- await (0, _asyncUtilities.avoidUnhandledPromises)();
85
- });
86
- });