@financial-times/n-conversion-forms 23.0.5 → 23.0.6

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 (36) hide show
  1. package/__mocks__/@financial-times/o-expander.js +9 -0
  2. package/__mocks__/@financial-times/o-forms-input.js +11 -0
  3. package/__mocks__/@financial-times/o-forms.js +40 -0
  4. package/build-state/npm-shrinkwrap.json +74 -167
  5. package/components/delivery-security-instructions.spec.js +3 -3
  6. package/components/graduation-date.spec.js +8 -8
  7. package/components/payment-term.spec.js +3 -3
  8. package/helpers/index.spec.js +11 -0
  9. package/helpers/ncf-common-data.spec.js +34 -0
  10. package/helpers/ncf-countries.spec.js +136 -0
  11. package/jest.config.js +3 -0
  12. package/package.json +2 -1
  13. package/utils/app-banner.spec.js +68 -0
  14. package/utils/apple-pay.spec.js +177 -0
  15. package/utils/billing-country.spec.js +87 -0
  16. package/utils/billing-postcode.spec.js +138 -0
  17. package/utils/company-name.spec.js +3 -7
  18. package/utils/country.spec.js +87 -0
  19. package/utils/delivery-address-type.spec.js +24 -11
  20. package/utils/delivery-option-messages.spec.js +3 -3
  21. package/utils/delivery-option.spec.js +100 -15
  22. package/utils/delivery-postcode.spec.js +138 -0
  23. package/utils/delivery-start-date.spec.js +177 -0
  24. package/utils/email.spec.js +210 -0
  25. package/utils/event-notifier.spec.js +116 -0
  26. package/utils/form-element.spec.js +71 -0
  27. package/utils/loader.spec.js +161 -0
  28. package/utils/password.spec.js +65 -0
  29. package/utils/payment-term.spec.js +198 -0
  30. package/utils/payment-type.spec.js +136 -0
  31. package/utils/postcode.spec.js +122 -0
  32. package/utils/salesforce.spec.js +30 -0
  33. package/utils/submit.spec.js +81 -0
  34. package/utils/tracking.spec.js +174 -0
  35. package/utils/validation.spec.js +234 -0
  36. package/utils/zuora.spec.js +249 -0
@@ -0,0 +1,249 @@
1
+ jest.mock('./form-element');
2
+ const PaymentType = require('./payment-type');
3
+ const Zuora = require('./zuora');
4
+
5
+ let fixtures = {
6
+ render: {
7
+ code: 'firstNameRequired',
8
+ key: 'firstName',
9
+ message: 'firstName required',
10
+ },
11
+ };
12
+
13
+ describe('Zuora', () => {
14
+ let window;
15
+ let zuora;
16
+
17
+ beforeEach(() => {
18
+ window = {
19
+ Z: {
20
+ prepopulate: jest.fn(),
21
+ runAfterRender: jest.fn(),
22
+ renderWithErrorHandler: jest.fn(),
23
+ sendErrorMessageToHpm: jest.fn(),
24
+ setEventHandler: jest.fn(),
25
+ submit: jest.fn(),
26
+ validate: jest.fn(),
27
+ },
28
+ };
29
+ zuora = new Zuora(window);
30
+ });
31
+
32
+ afterEach(() => {
33
+ jest.clearAllMocks();
34
+ });
35
+
36
+ describe('constructor', () => {
37
+ it('sets up global listeners', () => {
38
+ expect(window.Z.setEventHandler).toHaveBeenNthCalledWith(
39
+ 1,
40
+ 'blur_mode_enabled',
41
+ expect.anything()
42
+ );
43
+ expect(window.Z.setEventHandler).toHaveBeenNthCalledWith(
44
+ 2,
45
+ 'blur_mode_disabled',
46
+ expect.anything()
47
+ );
48
+ });
49
+
50
+ it('sets up dom elements', () => {
51
+ expect(zuora.iframe).toBeDefined();
52
+ expect(zuora.overlay).toBeDefined();
53
+ });
54
+
55
+ it('gets Z from window and adds to class scope', () => {
56
+ expect(zuora.Z).toEqual(window.Z);
57
+ });
58
+ });
59
+
60
+ describe('render', () => {
61
+ const params = { foo: 'bar' };
62
+ const prepopulatedFields = { firstName: 'John' };
63
+ const renderCallback = () => {};
64
+
65
+ it('calls relevant Zuora functions', async () => {
66
+ await zuora.render({ params, prepopulatedFields, renderCallback });
67
+
68
+ expect(window.Z.renderWithErrorHandler).toHaveBeenCalled();
69
+ });
70
+
71
+ it('sets up error handler that calls sendErrorMessageToHpm', async () => {
72
+ await zuora.render({ params, prepopulatedFields, renderCallback });
73
+ const handler = window.Z.renderWithErrorHandler.mock.calls[0][3];
74
+
75
+ handler();
76
+ expect(window.Z.sendErrorMessageToHpm).toHaveBeenCalled();
77
+ });
78
+
79
+ it('sets up error handler that calls sendErrorMessageToHpm with correct error', async () => {
80
+ await zuora.render({ params, prepopulatedFields, renderCallback });
81
+ const handler = window.Z.renderWithErrorHandler.mock.calls[0][3];
82
+
83
+ handler(
84
+ fixtures.render.key,
85
+ fixtures.render.code,
86
+ fixtures.render.message
87
+ );
88
+ expect(window.Z.sendErrorMessageToHpm).toHaveBeenCalledWith(
89
+ 'firstName',
90
+ 'First Name is invalid'
91
+ );
92
+ });
93
+
94
+ it('binds the renderCallback to Zuora`s runAfterRender function', async () => {
95
+ await zuora.render({ params, prepopulatedFields, renderCallback });
96
+
97
+ expect(window.Z.runAfterRender).toHaveBeenCalled();
98
+ });
99
+ });
100
+
101
+ describe('submit', () => {
102
+ it('rejects if paymentType is not valid', async () => {
103
+ let error;
104
+ try {
105
+ await zuora.submit('');
106
+ } catch (e) {
107
+ error = e;
108
+ }
109
+
110
+ expect(error instanceof Zuora.ZuoraErrorInvalidPaymentType).toBe(true);
111
+ });
112
+
113
+ describe(PaymentType.CREDITCARD, () => {
114
+ it('calls validate', async () => {
115
+ window.Z.validate.mockImplementation((callback) =>
116
+ callback({ success: true })
117
+ );
118
+ await zuora.submit(PaymentType.CREDITCARD);
119
+
120
+ expect(window.Z.validate).toHaveBeenCalled();
121
+ });
122
+
123
+ it('rejects if the validation fails', async () => {
124
+ let error;
125
+ window.Z.validate.mockImplementation((callback) =>
126
+ callback({ success: false })
127
+ );
128
+ try {
129
+ await zuora.submit(PaymentType.CREDITCARD);
130
+ } catch (e) {
131
+ error = e;
132
+ }
133
+
134
+ expect(error instanceof Zuora.ZuoraErrorValidation).toBe(true);
135
+ });
136
+
137
+ it('calls submit if validation passes', async () => {
138
+ window.Z.validate.mockImplementation((callback) =>
139
+ callback({ success: true })
140
+ );
141
+ await zuora.submit(PaymentType.CREDITCARD);
142
+
143
+ expect(window.Z.submit).toHaveBeenCalled();
144
+ });
145
+ });
146
+
147
+ describe(PaymentType.DIRECTDEBIT, () => {
148
+ it('calls validate', async () => {
149
+ zuora.onDirectDebitConfirmation = jest.fn((callback) => callback(true));
150
+ window.Z.validate.mockImplementation((callback) =>
151
+ callback({ success: true })
152
+ );
153
+ await zuora.submit(PaymentType.DIRECTDEBIT);
154
+
155
+ expect(window.Z.validate).toHaveBeenCalled();
156
+ });
157
+
158
+ it('rejects if the validation fails', async () => {
159
+ let error;
160
+ zuora.onDirectDebitConfirmation = jest.fn((callback) => callback(true));
161
+ window.Z.validate.mockImplementation((callback) =>
162
+ callback({ success: false })
163
+ );
164
+ try {
165
+ await zuora.submit(PaymentType.DIRECTDEBIT);
166
+ } catch (e) {
167
+ error = e;
168
+ }
169
+
170
+ expect(error instanceof Zuora.ZuoraErrorValidation).toBe(true);
171
+ });
172
+
173
+ it('calls submit if validation passes', async () => {
174
+ zuora.onDirectDebitConfirmation = jest.fn((callback) => callback(true));
175
+ window.Z.validate.mockImplementation((callback) =>
176
+ callback({ success: true })
177
+ );
178
+ await zuora.submit(PaymentType.DIRECTDEBIT);
179
+
180
+ expect(window.Z.submit).toHaveBeenCalled();
181
+ });
182
+
183
+ it('rejects if the direct debit is not confirmed', async () => {
184
+ let error;
185
+ zuora.onDirectDebitConfirmation = jest.fn((callback) =>
186
+ callback(false)
187
+ );
188
+ window.Z.validate.mockImplementation((callback) =>
189
+ callback({ success: true })
190
+ );
191
+ try {
192
+ await zuora.submit(PaymentType.DIRECTDEBIT);
193
+ } catch (e) {
194
+ error = e;
195
+ }
196
+
197
+ expect(error instanceof Zuora.ZuoraErrorMandateCancel).toBe(true);
198
+ });
199
+ });
200
+ });
201
+
202
+ describe('onAgreementCheckboxChange', () => {
203
+ let callbackStub;
204
+
205
+ beforeEach(() => {
206
+ callbackStub = jest.fn();
207
+ });
208
+
209
+ it('sets up agreement checkbox event handlers', () => {
210
+ zuora.onAgreementCheckboxChange(callbackStub);
211
+
212
+ // The first 2 calls to this happen in setupListeners
213
+ expect(window.Z.setEventHandler).toHaveBeenNthCalledWith(
214
+ 3,
215
+ 'agreement_checked',
216
+ expect.any(Function)
217
+ );
218
+ expect(window.Z.setEventHandler).toHaveBeenNthCalledWith(
219
+ 4,
220
+ 'agreement_unchecked',
221
+ expect.any(Function)
222
+ );
223
+ });
224
+ });
225
+
226
+ describe('onDirectDebitConfirmation', () => {
227
+ let callbackStub;
228
+
229
+ beforeEach(() => {
230
+ callbackStub = jest.fn();
231
+ });
232
+
233
+ it('sets up mandate confirmation event handlers', () => {
234
+ zuora.onDirectDebitConfirmation(callbackStub);
235
+
236
+ // The first 2 calls to this happen in setupListeners
237
+ expect(window.Z.setEventHandler).toHaveBeenNthCalledWith(
238
+ 3,
239
+ 'mandate_confirmed',
240
+ expect.any(Function)
241
+ );
242
+ expect(window.Z.setEventHandler).toHaveBeenNthCalledWith(
243
+ 4,
244
+ 'mandate_cancelled',
245
+ expect.any(Function)
246
+ );
247
+ });
248
+ });
249
+ });