@internetarchive/donation-form 0.5.20 → 0.5.21-a2
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.
- package/dist/demo/braintree-endpoint-manager.js +0 -1
- package/dist/demo/braintree-endpoint-manager.js.map +1 -1
- package/dist/demo/demo-analytics-handler.js.map +1 -1
- package/dist/demo/submit-form-with.js.map +1 -1
- package/dist/src/braintree-manager/braintree-manager.js +33 -35
- package/dist/src/braintree-manager/braintree-manager.js.map +1 -1
- package/dist/src/braintree-manager/payment-clients.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-interface.js +1 -0
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-delegate.js +1 -0
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource-interface.js +1 -0
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay-session-datasource.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js +15 -14
- package/dist/src/braintree-manager/payment-providers/apple-pay/apple-pay.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/credit-card/credit-card-interface.js +1 -0
- package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js +3 -3
- package/dist/src/braintree-manager/payment-providers/credit-card/credit-card.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js +6 -6
- package/dist/src/braintree-manager/payment-providers/credit-card/hosted-field-container.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/google-pay-interface.js +1 -0
- package/dist/src/braintree-manager/payment-providers/google-pay.js +15 -15
- package/dist/src/braintree-manager/payment-providers/google-pay.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/paypal/paypal-interface.js +1 -0
- package/dist/src/braintree-manager/payment-providers/paypal/paypal.js +1 -3
- package/dist/src/braintree-manager/payment-providers/paypal/paypal.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers/venmo-interface.js +1 -0
- package/dist/src/braintree-manager/payment-providers/venmo.js +9 -8
- package/dist/src/braintree-manager/payment-providers/venmo.js.map +1 -1
- package/dist/src/braintree-manager/payment-providers-interface.d.ts +1 -1
- package/dist/src/braintree-manager/payment-providers-interface.js +1 -0
- package/dist/src/braintree-manager/payment-providers.js +3 -3
- package/dist/src/braintree-manager/payment-providers.js.map +1 -1
- package/dist/src/donation-form-controller.js +6 -5
- package/dist/src/donation-form-controller.js.map +1 -1
- package/dist/src/donation-form.js +10 -10
- package/dist/src/donation-form.js.map +1 -1
- package/dist/src/form-elements/badged-input.js +1 -5
- package/dist/src/form-elements/badged-input.js.map +1 -1
- package/dist/src/form-elements/contact-form/autocomplete-field-options.d.ts +1 -1
- package/dist/src/form-elements/contact-form/autocomplete-field-options.js +1 -0
- package/dist/src/form-elements/contact-form/contact-form.js +12 -10
- package/dist/src/form-elements/contact-form/contact-form.js.map +1 -1
- package/dist/src/form-elements/header/donation-form-header.js +1 -3
- package/dist/src/form-elements/header/donation-form-header.js.map +1 -1
- package/dist/src/form-elements/header/donation-summary.js.map +1 -1
- package/dist/src/form-elements/payment-selector.js +4 -4
- package/dist/src/form-elements/payment-selector.js.map +1 -1
- package/dist/src/form-elements/total-amount.js.map +1 -1
- package/dist/src/modals/confirm-donation-modal-content.js +13 -3
- package/dist/src/modals/confirm-donation-modal-content.js.map +1 -1
- package/dist/src/modals/error-modal-content.js.map +1 -1
- package/dist/src/modals/upsell-modal-content.js +5 -15
- package/dist/src/modals/upsell-modal-content.js.map +1 -1
- package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js +8 -19
- package/dist/src/payment-flow-handlers/donation-flow-modal-manager.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/applepay-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/creditcard-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/googlepay-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js +6 -6
- package/dist/src/payment-flow-handlers/handlers/paypal-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js +2 -1
- package/dist/src/payment-flow-handlers/handlers/venmo-flow-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/handlers/venmo-restoration-state-handler.js.map +1 -1
- package/dist/src/payment-flow-handlers/payment-flow-handlers.js +11 -11
- package/dist/src/payment-flow-handlers/payment-flow-handlers.js.map +1 -1
- package/dist/test/mocks/flow-handlers/individual-handlers/mock-creditcard-flow-handler.js.map +1 -1
- package/dist/test/mocks/flow-handlers/individual-handlers/mock-googlepay-flow-handler.js.map +1 -1
- package/dist/test/mocks/flow-handlers/mock-payment-flow-handlers.js.map +1 -1
- package/dist/test/mocks/mock-braintree-manager.js.map +1 -1
- package/dist/test/mocks/mock-modal-manager.js.map +1 -1
- package/dist/test/mocks/mock-payment-clients.js +68 -58
- package/dist/test/mocks/mock-payment-clients.js.map +1 -1
- package/dist/test/mocks/models/mock-custom-fields.js +0 -1
- package/dist/test/mocks/models/mock-custom-fields.js.map +1 -1
- package/dist/test/mocks/models/mock-success-response.js +0 -1
- package/dist/test/mocks/models/mock-success-response.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-client.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-paymentauthorizedevent.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js +3 -3
- package/dist/test/mocks/payment-clients/mock-applepay-sessionmanager.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-googlepay-library.js +4 -4
- package/dist/test/mocks/payment-clients/mock-googlepay-library.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-grecaptcha.js +8 -9
- package/dist/test/mocks/payment-clients/mock-grecaptcha.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-hostedfields-client.js +6 -6
- package/dist/test/mocks/payment-clients/mock-hostedfields-client.js.map +1 -1
- package/dist/test/mocks/payment-clients/mock-venmo-client.js +5 -5
- package/dist/test/mocks/payment-clients/mock-venmo-client.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js +13 -13
- package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js.map +1 -1
- package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map +1 -1
- package/dist/test/mocks/payment-providers/mock-payment-providers.js +2 -1
- package/dist/test/mocks/payment-providers/mock-payment-providers.js.map +1 -1
- package/dist/test/tests/braintree-manager.test.js +0 -1
- package/dist/test/tests/braintree-manager.test.js.map +1 -1
- package/dist/test/tests/donation-form-controller.test.js +1 -3
- package/dist/test/tests/donation-form-controller.test.js.map +1 -1
- package/dist/test/tests/donation-form.test.js +4 -12
- package/dist/test/tests/donation-form.test.js.map +1 -1
- package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js +7 -8
- package/dist/test/tests/flow-handlers/donation-flow-modal-manager.test.js.map +1 -1
- package/dist/test/tests/form-elements/donation-summary.test.js +2 -6
- package/dist/test/tests/form-elements/donation-summary.test.js.map +1 -1
- package/dist/test/tests/form-elements/payment-selector.test.js +5 -15
- package/dist/test/tests/form-elements/payment-selector.test.js.map +1 -1
- package/dist/test/tests/modals/error-modal-content.test.js.map +1 -1
- package/dist/test/tests/modals/upsell-modal-content.test.js.map +1 -1
- package/dist/test/tests/payment-clients.test.js.map +1 -1
- package/dist/test/tests/payment-providers/applepay.test.js +1 -1
- package/dist/test/tests/payment-providers/applepay.test.js.map +1 -1
- package/dist/test/tests/payment-providers/paypal-button-datasource.test.js.map +1 -1
- package/dist/test/tests/payment-providers/venmo.test.js +1 -1
- package/dist/test/tests/payment-providers/venmo.test.js.map +1 -1
- package/dist/test/tests/recaptcha-manager.test.js +4 -12
- package/dist/test/tests/recaptcha-manager.test.js.map +1 -1
- package/package.json +31 -25
- package/src/braintree-manager/braintree-manager.ts +0 -2
- package/src/braintree-manager/payment-clients.ts +1 -2
- package/src/braintree-manager/payment-providers/paypal/paypal-button-datasource.ts +1 -1
- package/src/braintree-manager/payment-providers/paypal/paypal.ts +3 -3
- package/src/donation-form-controller.ts +10 -9
- package/src/donation-form.ts +13 -16
- package/src/form-elements/badged-input.ts +1 -5
- package/src/form-elements/contact-form/contact-form.ts +25 -23
- package/src/form-elements/header/donation-form-header.ts +1 -3
- package/src/form-elements/payment-selector.ts +4 -4
- package/src/modals/confirm-donation-modal-content.ts +16 -6
- package/src/modals/upsell-modal-content.ts +5 -15
- package/src/payment-flow-handlers/donation-flow-modal-manager.ts +12 -22
- package/src/payment-flow-handlers/handlers/applepay-flow-handler.ts +2 -1
- package/src/payment-flow-handlers/handlers/creditcard-flow-handler.ts +2 -1
- package/src/payment-flow-handlers/handlers/googlepay-flow-handler.ts +4 -6
- package/src/payment-flow-handlers/handlers/paypal-flow-handler.ts +7 -6
- package/src/payment-flow-handlers/handlers/venmo-flow-handler.ts +2 -1
- package/src/payment-flow-handlers/payment-flow-handlers.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-grecaptcha.js","sourceRoot":"","sources":["../../../../test/mocks/payment-clients/mock-grecaptcha.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,
|
|
1
|
+
{"version":3,"file":"mock-grecaptcha.js","sourceRoot":"","sources":["../../../../test/mocks/payment-clients/mock-grecaptcha.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,sDAAsD;AAEtD,MAAM,CAAN,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC5B,iEAAO,CAAA;IACP,iEAAO,CAAA;IACP,6DAAK,CAAA;AACP,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,QAI7B;AAED,MAAM,OAAO,cAAc;IAazB,MAAM,CACJ,SAA+B,EAC/B,UAA+C,EAC/C,OAA6B;;QAE7B,IAAI,CAAC,QAAQ,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,0CAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,gBAAgB,CAAC,0CAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,kBAAkB,CAAC,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,kBAAkB,CAAC,0CAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,KAAK,CAAC,aAAkC;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,WAAW,CAAC,aAAkC;QAC5C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,aAAkC;QACxC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;SACpC;aAAM;YACL,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;IACH,CAAC;IAEO,YAAY;QAClB,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,kBAAkB,CAAC,OAAO;gBAC7B,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;iBACtB;gBACD,MAAM;YACR,KAAK,kBAAkB,CAAC,KAAK;gBAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE;oBAC1B,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;iBAC1B;gBACD,MAAM;YACR,KAAK,kBAAkB,CAAC,OAAO;gBAC7B,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE;oBAC5B,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;iBAC5B;gBACD,MAAM;SACT;IACH,CAAC;IAED,YAAY,IAAwB,EAAE,QAAQ,GAAG,KAAK;QA5DtD,iBAAY,GAAG,KAAK,CAAC;QACrB,kBAAa,GAAG,KAAK,CAAC;QACtB,gBAAW,GAAG,KAAK,CAAC;QACpB,sBAAiB,GAAG,KAAK,CAAC;QA0DxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nexport enum MockGrecaptchaMode {\n Success,\n Expired,\n Error,\n}\n\nexport class MockGrecaptcha implements ReCaptchaV2.ReCaptcha {\n renderCalled = false;\n executeCalled = false;\n resetCalled = false;\n getResponseCalled = false;\n\n mode: MockGrecaptchaMode;\n addDelay: boolean;\n\n callback?: (response: string) => void;\n 'expired-callback'?: () => void;\n 'error-callback'?: () => void;\n\n render(\n container: string | HTMLElement,\n parameters?: ReCaptchaV2.Parameters | undefined,\n inherit?: boolean | undefined,\n ): number {\n this.callback = parameters?.callback?.bind(this);\n this['error-callback'] = parameters?.['error-callback']?.bind(this);\n this['expired-callback'] = parameters?.['expired-callback']?.bind(this);\n this.renderCalled = true;\n return 1;\n }\n reset(opt_widget_id?: number | undefined): void {\n this.resetCalled = true;\n }\n getResponse(opt_widget_id?: number | undefined): string {\n this.getResponseCalled = true;\n return 'foo';\n }\n execute(opt_widget_id?: number | undefined): void {\n this.executeCalled = true;\n\n if (this.addDelay) {\n setTimeout(this.callCallback, 100);\n } else {\n this.callCallback();\n }\n }\n\n private callCallback(): void {\n switch (this.mode) {\n case MockGrecaptchaMode.Success:\n if (this.callback) {\n this.callback('foo');\n }\n break;\n case MockGrecaptchaMode.Error:\n if (this['error-callback']) {\n this['error-callback']();\n }\n break;\n case MockGrecaptchaMode.Expired:\n if (this['expired-callback']) {\n this['expired-callback']();\n }\n break;\n }\n }\n\n constructor(mode: MockGrecaptchaMode, addDelay = false) {\n this.mode = mode;\n this.addDelay = addDelay;\n }\n}\n"]}
|
|
@@ -4,12 +4,6 @@ import { mockHostedFieldTokenizePayload } from './mock-hostedfieldtokenizepayloa
|
|
|
4
4
|
import { getMockStateObject } from './mock-hostedfieldstateobject-generator';
|
|
5
5
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
6
6
|
export class MockHostedFieldsClient {
|
|
7
|
-
constructor(options) {
|
|
8
|
-
var _a;
|
|
9
|
-
this.VERSION = 'foo';
|
|
10
|
-
this.changeHandlers = {};
|
|
11
|
-
this.mockPayload = (_a = options === null || options === void 0 ? void 0 : options.mockHostedFieldTokenizePayload) !== null && _a !== void 0 ? _a : mockHostedFieldTokenizePayload;
|
|
12
|
-
}
|
|
13
7
|
emitValidityChangedEvent(valid) {
|
|
14
8
|
const handler = this.changeHandlers['validityChange'];
|
|
15
9
|
if (!handler) {
|
|
@@ -51,5 +45,11 @@ export class MockHostedFieldsClient {
|
|
|
51
45
|
getState() {
|
|
52
46
|
throw new Error('Method not implemented.');
|
|
53
47
|
}
|
|
48
|
+
constructor(options) {
|
|
49
|
+
var _a;
|
|
50
|
+
this.VERSION = 'foo';
|
|
51
|
+
this.changeHandlers = {};
|
|
52
|
+
this.mockPayload = (_a = options === null || options === void 0 ? void 0 : options.mockHostedFieldTokenizePayload) !== null && _a !== void 0 ? _a : mockHostedFieldTokenizePayload;
|
|
53
|
+
}
|
|
54
54
|
}
|
|
55
55
|
//# sourceMappingURL=mock-hostedfields-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-hostedfields-client.js","sourceRoot":"","sources":["../../../../test/mocks/payment-clients/mock-hostedfields-client.ts"],"names":[],"mappings":"AAAA,uDAAuD;;AAEvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAQ7E,sDAAsD;AACtD,MAAM,OAAO,sBAAsB;
|
|
1
|
+
{"version":3,"file":"mock-hostedfields-client.js","sourceRoot":"","sources":["../../../../test/mocks/payment-clients/mock-hostedfields-client.ts"],"names":[],"mappings":"AAAA,uDAAuD;;AAEvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAQ7E,sDAAsD;AACtD,MAAM,OAAO,sBAAsB;IACjC,wBAAwB,CAAC,KAAc;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QACD,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC;IAEK,MAAM,CAAC,OAKZ;;YACC,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAUD,EAAE,CACA,KAAqC,EACrC,OAA2D;QAE3D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAEK,QAAQ;;YACZ,OAAO;QACT,CAAC;KAAA;IAEK,QAAQ,CAAC,OAId;;YACC,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;KAAA;IAED,QAAQ,CAAC,KAAa,EAAE,SAAiB,EAAE,QAAyC;QAClF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,SAAiB,EAAE,QAAyC;QACrF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc,CACZ,KAAa,EACb,WAAmB,EACnB,QAAyC;QAEzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,QAAyC;QAC5D,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,YAAY,OAAmF;;QAjD/F,YAAO,GAAG,KAAK,CAAC;QAER,mBAAc,GAElB,EAAE,CAAC;QA8CL,IAAI,CAAC,WAAW,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,8BAA8B,mCAAI,8BAA8B,CAAC;IAC/F,CAAC;CAGF","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { mockHostedFieldTokenizePayload } from './mock-hostedfieldtokenizepayload';\nimport { getMockStateObject } from './mock-hostedfieldstateobject-generator';\n\nexport interface MockHostedFieldsClientEvents {\n validityChanged: (event: braintree.HostedFieldsStateObject) => void;\n focus: (event: braintree.HostedFieldsStateObject) => void;\n blur: (event: braintree.HostedFieldsStateObject) => void;\n}\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\nexport class MockHostedFieldsClient implements braintree.HostedFields {\n emitValidityChangedEvent(valid: boolean): void {\n const handler = this.changeHandlers['validityChange'];\n if (!handler) {\n return;\n }\n const stateObject = getMockStateObject(valid);\n handler(stateObject);\n }\n\n async create(options: {\n client?: braintree.Client | undefined;\n authorization?: string | undefined;\n fields: braintree.HostedFieldFieldOptions;\n styles?: any;\n }): Promise<braintree.HostedFields> {\n return this;\n }\n\n styleOptions: any;\n\n VERSION = 'foo';\n\n private changeHandlers: {\n [key: string]: (event: braintree.HostedFieldsStateObject) => void;\n } = {};\n\n on(\n event: braintree.HostedFieldEventType,\n handler: (event: braintree.HostedFieldsStateObject) => void,\n ): void {\n this.changeHandlers[event] = handler.bind(this);\n }\n\n async teardown(): Promise<void> {\n return;\n }\n\n async tokenize(options?: {\n vault?: boolean;\n cardholderName?: string;\n billingAddress?: any;\n }): Promise<braintree.HostedFieldsTokenizePayload> {\n return this.mockPayload;\n }\n\n addClass(field: string, classname: string, callback?: braintree.callback | undefined): void {\n throw new Error('Method not implemented.');\n }\n\n removeClass(field: string, classname: string, callback?: braintree.callback | undefined): void {\n throw new Error('Method not implemented.');\n }\n\n setPlaceholder(\n field: string,\n placeholder: string,\n callback?: braintree.callback | undefined,\n ): void {\n throw new Error('Method not implemented.');\n }\n\n clear(field: string, callback?: braintree.callback | undefined): void {\n throw new Error('Method not implemented.');\n }\n\n getState(): any {\n throw new Error('Method not implemented.');\n }\n\n constructor(options?: { mockHostedFieldTokenizePayload: braintree.HostedFieldsTokenizePayload }) {\n this.mockPayload = options?.mockHostedFieldTokenizePayload ?? mockHostedFieldTokenizePayload;\n }\n\n private mockPayload: braintree.HostedFieldsTokenizePayload;\n}\n"]}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
3
3
|
export class MockVenmoClient {
|
|
4
|
-
constructor(options) {
|
|
5
|
-
this.tokenizeCalled = false;
|
|
6
|
-
this.VERSION = 'foo';
|
|
7
|
-
this.browserSupported = options.isBrowserSupported;
|
|
8
|
-
}
|
|
9
4
|
create(options) {
|
|
10
5
|
return __awaiter(this, void 0, void 0, function* () {
|
|
11
6
|
return this;
|
|
@@ -33,5 +28,10 @@ export class MockVenmoClient {
|
|
|
33
28
|
return;
|
|
34
29
|
});
|
|
35
30
|
}
|
|
31
|
+
constructor(options) {
|
|
32
|
+
this.tokenizeCalled = false;
|
|
33
|
+
this.VERSION = 'foo';
|
|
34
|
+
this.browserSupported = options.isBrowserSupported;
|
|
35
|
+
}
|
|
36
36
|
}
|
|
37
37
|
//# sourceMappingURL=mock-venmo-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-venmo-client.js","sourceRoot":"","sources":["../../../../test/mocks/payment-clients/mock-venmo-client.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,MAAM,OAAO,eAAe;
|
|
1
|
+
{"version":3,"file":"mock-venmo-client.js","sourceRoot":"","sources":["../../../../test/mocks/payment-clients/mock-venmo-client.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,MAAM,OAAO,eAAe;IAGpB,MAAM,CAAC,OAOZ;;YACC,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAID,kBAAkB;QAChB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,qBAAqB;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAEK,QAAQ,CACZ,OAAkE;;YAElE,MAAM,OAAO,GAAG;gBACd,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;aAC7B,CAAC;YAEF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAE3B,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;IAEK,QAAQ;;YACZ,OAAO;QACT,CAAC;KAAA;IAED,YAAY,OAAwC;QAzCpD,mBAAc,GAAG,KAAK,CAAC;QAavB,YAAO,GAAG,KAAK,CAAC;QA6Bd,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IACrD,CAAC;CAGF","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nexport class MockVenmoClient implements braintree.Venmo {\n tokenizeCalled = false;\n\n async create(options: {\n client?: braintree.Client | undefined;\n authorization?: string | undefined;\n allowNewBrowserTab?: boolean | undefined;\n ignoreHistoryChanges?: boolean | undefined;\n profileId?: string | undefined;\n deepLinkReturnUrl?: string | undefined;\n }): Promise<braintree.Venmo> {\n return this;\n }\n\n VERSION = 'foo';\n\n isBrowserSupported(): boolean {\n return this.browserSupported;\n }\n\n hasTokenizationResult(): boolean {\n return false;\n }\n\n async tokenize(\n options?: { processResultsDelay?: number | undefined } | undefined,\n ): Promise<braintree.VenmoTokenizePayload> {\n const payload = {\n nonce: 'foo',\n type: 'bar',\n details: { username: 'boo' },\n };\n\n this.tokenizeCalled = true;\n\n return payload;\n }\n\n async teardown(): Promise<void> {\n return;\n }\n\n constructor(options: { isBrowserSupported: boolean }) {\n this.browserSupported = options.isBrowserSupported;\n }\n\n private browserSupported: boolean;\n}\n"]}
|
|
@@ -5,19 +5,6 @@ import { MockHostedFieldsClient } from '../../payment-clients/mock-hostedfields-
|
|
|
5
5
|
import { mockHostedFieldTokenizePayload } from '../../payment-clients/mock-hostedfieldtokenizepayload';
|
|
6
6
|
import { createNanoEvents } from 'nanoevents';
|
|
7
7
|
export class MockCreditCardHandler {
|
|
8
|
-
constructor(options) {
|
|
9
|
-
var _a;
|
|
10
|
-
this.instance = new PromisedSingleton({
|
|
11
|
-
generator: () => new Promise(resolve => {
|
|
12
|
-
const client = new MockHostedFieldsClient({
|
|
13
|
-
mockHostedFieldTokenizePayload: this.mockPayload,
|
|
14
|
-
});
|
|
15
|
-
resolve(client);
|
|
16
|
-
}),
|
|
17
|
-
});
|
|
18
|
-
this.emitter = createNanoEvents();
|
|
19
|
-
this.mockPayload = (_a = options === null || options === void 0 ? void 0 : options.mockPayload) !== null && _a !== void 0 ? _a : mockHostedFieldTokenizePayload;
|
|
20
|
-
}
|
|
21
8
|
tokenizeHostedFields() {
|
|
22
9
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23
10
|
return this.mockPayload;
|
|
@@ -35,6 +22,19 @@ export class MockCreditCardHandler {
|
|
|
35
22
|
hideErrorMessage() {
|
|
36
23
|
throw new Error('Method not implemented.');
|
|
37
24
|
}
|
|
25
|
+
constructor(options) {
|
|
26
|
+
var _a;
|
|
27
|
+
this.instance = new PromisedSingleton({
|
|
28
|
+
generator: () => new Promise(resolve => {
|
|
29
|
+
const client = new MockHostedFieldsClient({
|
|
30
|
+
mockHostedFieldTokenizePayload: this.mockPayload,
|
|
31
|
+
});
|
|
32
|
+
resolve(client);
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
this.emitter = createNanoEvents();
|
|
36
|
+
this.mockPayload = (_a = options === null || options === void 0 ? void 0 : options.mockPayload) !== null && _a !== void 0 ? _a : mockHostedFieldTokenizePayload;
|
|
37
|
+
}
|
|
38
38
|
on(event, callback) {
|
|
39
39
|
return this.emitter.on(event, callback);
|
|
40
40
|
}
|
package/dist/test/mocks/payment-providers/individual-providers/mock-creditcard-handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-creditcard-handler.js","sourceRoot":"","sources":["../../../../../test/mocks/payment-providers/individual-providers/mock-creditcard-handler.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAC;AAKvG,OAAO,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAE3D,MAAM,OAAO,qBAAqB;
|
|
1
|
+
{"version":3,"file":"mock-creditcard-handler.js","sourceRoot":"","sources":["../../../../../test/mocks/payment-providers/individual-providers/mock-creditcard-handler.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAC;AAKvG,OAAO,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAE3D,MAAM,OAAO,qBAAqB;IAW1B,oBAAoB;;YACxB,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;KAAA;IAED,eAAe,CAAC,MAAyB;QACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,iBAAiB,CAAC,MAAyB;QACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB,CAAC,OAA4B;QAC3C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB;QACd,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,YAAY,OAAgE;;QA9B5E,aAAQ,GAAG,IAAI,iBAAiB,CAAyB;YACvD,SAAS,EAAE,GAAoC,EAAE,CAC/C,IAAI,OAAO,CAAyB,OAAO,CAAC,EAAE;gBAC5C,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC;oBACxC,8BAA8B,EAAE,IAAI,CAAC,WAAW;iBACjD,CAAC,CAAC;gBACH,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;SACL,CAAC,CAAC;QA0BK,YAAO,GAAG,gBAAgB,EAA2B,CAAC;QAH5D,IAAI,CAAC,WAAW,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,mCAAI,8BAA8B,CAAC;IAC5E,CAAC;IAID,EAAE,CACA,KAAQ,EACR,QAAoC;QAEpC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;CAGF","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { HostedFieldName } from '../../../../src/braintree-manager/payment-providers/credit-card/hosted-field-container';\nimport { MockHostedFieldsClient } from '../../payment-clients/mock-hostedfields-client';\nimport { mockHostedFieldTokenizePayload } from '../../payment-clients/mock-hostedfieldtokenizepayload';\nimport {\n CreditCardHandlerEvents,\n CreditCardHandlerInterface,\n} from '../../../../src/braintree-manager/payment-providers/credit-card/credit-card-interface';\nimport { createNanoEvents, Unsubscribe } from 'nanoevents';\n\nexport class MockCreditCardHandler implements CreditCardHandlerInterface {\n instance = new PromisedSingleton<braintree.HostedFields>({\n generator: (): Promise<braintree.HostedFields> =>\n new Promise<braintree.HostedFields>(resolve => {\n const client = new MockHostedFieldsClient({\n mockHostedFieldTokenizePayload: this.mockPayload,\n });\n resolve(client);\n }),\n });\n\n async tokenizeHostedFields(): Promise<braintree.HostedFieldsTokenizePayload | undefined> {\n return this.mockPayload;\n }\n\n markFieldErrors(fields: HostedFieldName[]): void {\n throw new Error('Method not implemented.');\n }\n\n removeFieldErrors(fields: HostedFieldName[]): void {\n throw new Error('Method not implemented.');\n }\n\n showErrorMessage(message?: string | undefined): void {\n throw new Error('Method not implemented.');\n }\n\n hideErrorMessage(): void {\n throw new Error('Method not implemented.');\n }\n\n constructor(options?: { mockPayload: braintree.HostedFieldsTokenizePayload }) {\n this.mockPayload = options?.mockPayload ?? mockHostedFieldTokenizePayload;\n }\n\n private emitter = createNanoEvents<CreditCardHandlerEvents>();\n\n on<E extends keyof CreditCardHandlerEvents>(\n event: E,\n callback: CreditCardHandlerEvents[E],\n ): Unsubscribe {\n return this.emitter.on(event, callback);\n }\n\n mockPayload: braintree.HostedFieldsTokenizePayload;\n}\n"]}
|
package/dist/test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-paypal-button-datasource.js","sourceRoot":"","sources":["../../../../../test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"mock-paypal-button-datasource.js","sourceRoot":"","sources":["../../../../../test/mocks/payment-providers/individual-providers/mock-paypal-button-datasource.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAU/F,MAAM,OAAO,0BAA0B;IAAvC;QAEE,iBAAY,GAAwB,IAAI,mBAAmB,CAAC;YAC1D,YAAY,EAAE,YAAY,CAAC,OAAO;YAClC,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IAmBL,CAAC;IAlBO,OAAO;;;YACX,MAAA,IAAI,CAAC,QAAQ,0CAAE,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC;;KACd;IACK,WAAW;;;YACf,MAAA,IAAI,CAAC,QAAQ,0CAAE,uBAAuB,CAAC,IAAI,EAAE;gBAC3C,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE;aACvF,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;;KAClB;IACD,QAAQ,CAAC,IAAsB;;QAC7B,MAAA,IAAI,CAAC,QAAQ,0CAAE,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,KAAa;;QACnB,MAAA,IAAI,CAAC,QAAQ,0CAAE,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;CACF","sourcesContent":["import { DonationPaymentInfo, DonationType } from '@internetarchive/donation-form-data-models';\nimport {\n TokenizePayload,\n CancellationData,\n} from '../../../../src/@types/paypal-checkout-components';\nimport {\n PayPalButtonDataSourceDelegate,\n PayPalButtonDataSourceInterface,\n} from '../../../../src/braintree-manager/payment-providers/paypal/paypal-button-datasource';\n\nexport class MockPayPalButtonDataSource implements PayPalButtonDataSourceInterface {\n delegate?: PayPalButtonDataSourceDelegate | undefined;\n donationInfo: DonationPaymentInfo = new DonationPaymentInfo({\n donationType: DonationType.OneTime,\n amount: 5,\n coverFees: false,\n });\n async payment(): Promise<string> {\n this.delegate?.payPalPaymentStarted(this, {});\n return 'foo';\n }\n async onAuthorize(): Promise<TokenizePayload | undefined> {\n this.delegate?.payPalPaymentAuthorized(this, {\n nonce: 'foo',\n type: 'bar',\n details: { email: 'foo@bar.com', payerId: '1234', firstName: 'Joe', lastName: 'Boop' },\n });\n return undefined;\n }\n onCancel(data: CancellationData): void {\n this.delegate?.payPalPaymentCancelled(this, data);\n }\n onError(error: string): void {\n this.delegate?.payPalPaymentError(this, error);\n }\n}\n"]}
|
|
@@ -37,7 +37,8 @@ export class MockPaymentProviders {
|
|
|
37
37
|
}),
|
|
38
38
|
});
|
|
39
39
|
this.emitter = createNanoEvents();
|
|
40
|
-
this.mockHostedFieldTokenizePayload =
|
|
40
|
+
this.mockHostedFieldTokenizePayload =
|
|
41
|
+
(_a = options === null || options === void 0 ? void 0 : options.mockHostedFieldTokenizePayload) !== null && _a !== void 0 ? _a : mockHostedFieldTokenizePayload;
|
|
41
42
|
}
|
|
42
43
|
on(event, callback) {
|
|
43
44
|
return this.emitter.on(event, callback);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-payment-providers.js","sourceRoot":"","sources":["../../../../test/mocks/payment-providers/mock-payment-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;
|
|
1
|
+
{"version":3,"file":"mock-payment-providers.js","sourceRoot":"","sources":["../../../../test/mocks/payment-providers/mock-payment-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AAUpG,OAAO,EAAE,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAE3D,MAAM,OAAO,oBAAoB;IAwC/B,YAAY,OAEX;;QAzCD,sBAAiB,GAAG,IAAI,iBAAiB,CAA6B;YACpE,SAAS,EAAE,GAAwC,EAAE,CACnD,IAAI,OAAO,CAA6B,OAAO,CAAC,EAAE;gBAChD,OAAO,CACL,IAAI,qBAAqB,CAAC;oBACxB,WAAW,EAAE,IAAI,CAAC,8BAA8B;iBACjD,CAAC,CACH,CAAC;YACJ,CAAC,CAAC;SACL,CAAC,CAAC;QAEH,oBAAe,GAAG,IAAI,iBAAiB,CAA2B;YAChE,SAAS,EAAE,GAAsC,EAAE,CACjD,IAAI,OAAO,CAA2B,OAAO,CAAC,EAAE;gBAC9C,OAAO,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;YACrC,CAAC,CAAC;SACL,CAAC,CAAC;QAEH,kBAAa,GAAG,IAAI,iBAAiB,CAAyB;YAC5D,SAAS,EAAE,GAAoC,EAAE,CAC/C,IAAI,OAAO,CAAyB,OAAO,CAAC,EAAE;gBAC5C,OAAO,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;YACnC,CAAC,CAAC;SACL,CAAC,CAAC;QAEH,qBAAgB,GAAG,IAAI,iBAAiB,CAA4B;YAClE,SAAS,EAAE,GAAuC,EAAE,CAClD,IAAI,OAAO,CAA4B,OAAO,CAAC,EAAE;gBAC/C,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;YACtC,CAAC,CAAC;SACL,CAAC,CAAC;QAEH,iBAAY,GAAG,IAAI,iBAAiB,CAAwB;YAC1D,SAAS,EAAE,GAAmC,EAAE,CAC9C,IAAI,OAAO,CAAwB,OAAO,CAAC,EAAE;gBAC3C,OAAO,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;YAClC,CAAC,CAAC;SACL,CAAC,CAAC;QASK,YAAO,GAAG,gBAAgB,EAA0B,CAAC;QAJ3D,IAAI,CAAC,8BAA8B;YACjC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,8BAA8B,mCAAI,8BAA8B,CAAC;IAC9E,CAAC;IAID,EAAE,CACA,KAAQ,EACR,QAAmC;QAEnC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;CAGF","sourcesContent":["import { PromisedSingleton } from '@internetarchive/promised-singleton';\nimport { MockVenmoHandler } from './individual-providers/mock-venmo-handler';\nimport { MockCreditCardHandler } from './individual-providers/mock-creditcard-handler';\nimport { MockApplePayHandler } from './individual-providers/mock-applepay-handler';\nimport { MockPayPalHandler } from './individual-providers/mock-paypal-handler';\nimport { MockGooglePayHandler } from './individual-providers/mock-googlepay-handler';\nimport { mockHostedFieldTokenizePayload } from '../payment-clients/mock-hostedfieldtokenizepayload';\nimport {\n PaymentProvidersEvents,\n PaymentProvidersInterface,\n} from '../../../src/braintree-manager/payment-providers-interface';\nimport { CreditCardHandlerInterface } from '../../../src/braintree-manager/payment-providers/credit-card/credit-card-interface';\nimport { ApplePayHandlerInterface } from '../../../src/braintree-manager/payment-providers/apple-pay/apple-pay-interface';\nimport { PayPalHandlerInterface } from '../../../src/braintree-manager/payment-providers/paypal/paypal-interface';\nimport { GooglePayHandlerInterface } from '../../../src/braintree-manager/payment-providers/google-pay-interface';\nimport { VenmoHandlerInterface } from '../../../src/braintree-manager/payment-providers/venmo-interface';\nimport { createNanoEvents, Unsubscribe } from 'nanoevents';\n\nexport class MockPaymentProviders implements PaymentProvidersInterface {\n creditCardHandler = new PromisedSingleton<CreditCardHandlerInterface>({\n generator: (): Promise<CreditCardHandlerInterface> =>\n new Promise<CreditCardHandlerInterface>(resolve => {\n resolve(\n new MockCreditCardHandler({\n mockPayload: this.mockHostedFieldTokenizePayload,\n }),\n );\n }),\n });\n\n applePayHandler = new PromisedSingleton<ApplePayHandlerInterface>({\n generator: (): Promise<ApplePayHandlerInterface> =>\n new Promise<ApplePayHandlerInterface>(resolve => {\n resolve(new MockApplePayHandler());\n }),\n });\n\n paypalHandler = new PromisedSingleton<PayPalHandlerInterface>({\n generator: (): Promise<PayPalHandlerInterface> =>\n new Promise<PayPalHandlerInterface>(resolve => {\n resolve(new MockPayPalHandler());\n }),\n });\n\n googlePayHandler = new PromisedSingleton<GooglePayHandlerInterface>({\n generator: (): Promise<GooglePayHandlerInterface> =>\n new Promise<GooglePayHandlerInterface>(resolve => {\n resolve(new MockGooglePayHandler());\n }),\n });\n\n venmoHandler = new PromisedSingleton<VenmoHandlerInterface>({\n generator: (): Promise<VenmoHandlerInterface> =>\n new Promise<VenmoHandlerInterface>(resolve => {\n resolve(new MockVenmoHandler());\n }),\n });\n\n constructor(options?: {\n mockHostedFieldTokenizePayload?: braintree.HostedFieldsTokenizePayload;\n }) {\n this.mockHostedFieldTokenizePayload =\n options?.mockHostedFieldTokenizePayload ?? mockHostedFieldTokenizePayload;\n }\n\n private emitter = createNanoEvents<PaymentProvidersEvents>();\n\n on<E extends keyof PaymentProvidersEvents>(\n event: E,\n callback: PaymentProvidersEvents[E],\n ): Unsubscribe {\n return this.emitter.on(event, callback);\n }\n\n mockHostedFieldTokenizePayload: braintree.HostedFieldsTokenizePayload;\n}\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
/* eslint-disable @typescript-eslint/camelcase */
|
|
3
2
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
3
|
import { expect } from '@open-wc/testing';
|
|
5
4
|
import { BraintreeManager } from '../../src/braintree-manager/braintree-manager';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"braintree-manager.test.js","sourceRoot":"","sources":["../../../test/tests/braintree-manager.test.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,sDAAsD;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,oBAAoB,EAAE,GAAS,EAAE;QAClC,MAAM,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAElD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC5C,kBAAkB,EAAE,KAAK;YACzB,cAAc;YACd,eAAe;YACf,iBAAiB,EAAE,qBAAqB;YACxC,kBAAkB,EAAE,kBAAkB,CAAC,WAAW;SACnD,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAS,EAAE;;QAC9D,MAAM,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAElD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC5C,kBAAkB,EAAE,KAAK;YACzB,cAAc;YACd,eAAe;YACf,iBAAiB,EAAE,qBAAqB;YACxC,kBAAkB,EAAE,kBAAkB,CAAC,WAAW;SACnD,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAEjC,MAAM,gBAAgB,CAAC,cAAc,CAAC;YACpC,KAAK,EAAE,MAAM;YACb,eAAe,EAAE,eAAe,CAAC,UAAU;YAC3C,YAAY,EAAE,IAAI,gBAAgB,EAAE;YACpC,WAAW,EAAE,eAAe;YAC5B,YAAY,EAAE,gBAAgB;SAC/B,CAAC,CAAC;QAEH,MAAM,OAAC,eAAe,CAAC,gBAAgB,0CAAE,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAC3D,uBAAuB,CAAC,cAAc,CACvC,CAAC;IACJ,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAS,EAAE;;QAClE,MAAM,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAElD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC5C,kBAAkB,EAAE,KAAK;YACzB,cAAc;YACd,eAAe;YACf,iBAAiB,EAAE,qBAAqB;YACxC,kBAAkB,EAAE,kBAAkB,CAAC,WAAW;SACnD,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,cAAc,CAAC;YACpC,KAAK,EAAE,MAAM;YACb,eAAe,EAAE,eAAe,CAAC,UAAU;YAC3C,YAAY,EAAE,IAAI,gBAAgB,EAAE;YACpC,WAAW,EAAE,eAAe;YAC5B,YAAY,EAAE,gBAAgB;SAC/B,CAAC,CAAC;QAEH,MAAM,OAAC,eAAe,CAAC,gBAAgB,0CAAE,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,GAAS,EAAE;;QACtG,MAAM,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAElD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC5C,kBAAkB,EAAE,KAAK;YACzB,cAAc;YACd,eAAe;YACf,iBAAiB,EAAE,qBAAqB;YACxC,kBAAkB,EAAE,kBAAkB,CAAC,WAAW;SACnD,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,cAAc,CAAC;YACpC,KAAK,EAAE,MAAM;YACb,eAAe,EAAE,eAAe,CAAC,UAAU;YAC3C,YAAY,EAAE,IAAI,gBAAgB,EAAE;YACpC,WAAW,EAAE,eAAe;YAC5B,YAAY,EAAE,gBAAgB;SAC/B,CAAC,CAAC;QAEH,uBAAuB;QACvB,MAAM,OAAC,eAAe,CAAC,gBAAgB,0CAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpF,MAAM,OAAC,eAAe,CAAC,gBAAgB,0CAAE,YAAY,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE1F,gBAAgB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC7C,gBAAgB,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAC7C,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAEzC,MAAM,gBAAgB,CAAC,cAAc,CAAC;YACpC,KAAK,EAAE,MAAM;YACb,eAAe,EAAE,eAAe,CAAC,UAAU;YAC3C,YAAY,EAAE,IAAI,gBAAgB,EAAE;YACpC,WAAW,EAAE,eAAe;YAC5B,YAAY,EAAE,gBAAgB;SAC/B,CAAC,CAAC;QAEH,MAAM,OAAC,eAAe,CAAC,gBAAgB,0CAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACzF,MAAM,OAAC,eAAe,CAAC,gBAAgB,0CAAE,YAAY,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3F,MAAM,OAAC,eAAe,CAAC,gBAAgB,0CAAE,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvF,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,GAAS,EAAE;;QAC7G,MAAM,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAElD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC5C,kBAAkB,EAAE,KAAK;YACzB,cAAc;YACd,eAAe;YACf,iBAAiB,EAAE,qBAAqB;YACxC,kBAAkB,EAAE,kBAAkB,CAAC,WAAW;YAClD,YAAY,EAAE,UAAU;YACxB,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,YAAY;SACrB,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,cAAc,CAAC;YACpC,KAAK,EAAE,MAAM;YACb,eAAe,EAAE,eAAe,CAAC,UAAU;YAC3C,YAAY,EAAE,IAAI,gBAAgB,EAAE;YACpC,WAAW,EAAE,eAAe;YAC5B,YAAY,EAAE,gBAAgB;SAC/B,CAAC,CAAC;QAEH,MAAM,OAAC,eAAe,CAAC,gBAAgB,0CAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACzF,MAAM,OAAC,eAAe,CAAC,gBAAgB,0CAAE,YAAY,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3F,MAAM,OAAC,eAAe,CAAC,gBAAgB,0CAAE,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvF,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAS,EAAE;QACnD,MAAM,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAElD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC5C,kBAAkB,EAAE,KAAK;YACzB,cAAc;YACd,eAAe;YACf,iBAAiB,EAAE,qBAAqB;YACxC,kBAAkB,EAAE,kBAAkB,CAAC,WAAW;SACnD,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,oBAAoB,CAAC;YAC1C,uBAAuB,EAAE,mBAAmB;YAC5C,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,CAAC;QAE1D,MAAM,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAS,EAAE;QAC3C,MAAM,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAElD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC5C,kBAAkB,EAAE,KAAK;YACzB,cAAc;YACd,eAAe;YACf,iBAAiB,EAAE,qBAAqB;YACxC,kBAAkB,EAAE,kBAAkB,CAAC,WAAW;SACnD,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,kBAAkB,CAAC;YACxC,eAAe,EAAE,mBAAmB;SACrC,CAAC,CAAC;QAEH,MAAM,wBAAwB,GAAG,eAAe,CAAC,wBAAwB,CAAC;QAE1E,MAAM,CAAC,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CAAE,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9E,MAAM,CAAC,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CAAE,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/camelcase */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { expect } from '@open-wc/testing';\n\nimport { BraintreeManager } from '../../src/braintree-manager/braintree-manager';\nimport { HostingEnvironment } from '../../src/braintree-manager/braintree-interfaces';\nimport { MockPaymentClients } from '../mocks/mock-payment-clients';\nimport { MockEndpointManager } from '../mocks/mock-endpoint-manager';\nimport { mockHostedFieldConfig } from '../mocks/mock-hosted-fields-config';\nimport { PaymentProvider, DonationType } from '@internetarchive/donation-form-data-models';\nimport { mockBillingInfo } from '../mocks/models/mock-billing-info';\nimport { mockCustomerInfo } from '../mocks/models/mock-customer-info';\nimport { MockDeviceDataCollector } from '../mocks/payment-clients/mock-data-collector';\nimport { mockSuccessResponse } from '../mocks/models/mock-success-response';\nimport { MockDonationInfo } from '../mocks/mock-donation-info';\n\ndescribe('Braintree Manager', () => {\n it('can be initialized', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n expect(braintreeManager).to.not.equal(undefined);\n });\n\n it('collects device data on startup and submits it', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n await braintreeManager.startup();\n\n await braintreeManager.submitDonation({\n nonce: 'boop',\n paymentProvider: PaymentProvider.CreditCard,\n donationInfo: new MockDonationInfo(),\n billingInfo: mockBillingInfo,\n customerInfo: mockCustomerInfo,\n });\n\n expect(endpointManager.requestSubmitted?.deviceData).to.equal(\n MockDeviceDataCollector.mockDeviceData,\n );\n });\n\n it('does not collect device data if startup not called', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n await braintreeManager.submitDonation({\n nonce: 'boop',\n paymentProvider: PaymentProvider.CreditCard,\n donationInfo: new MockDonationInfo(),\n billingInfo: mockBillingInfo,\n customerInfo: mockCustomerInfo,\n });\n\n expect(endpointManager.requestSubmitted?.deviceData).to.equal(undefined);\n });\n\n it('can properly set referrer, origin, and logged in user and submits them to the endpoint', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n await braintreeManager.submitDonation({\n nonce: 'boop',\n paymentProvider: PaymentProvider.CreditCard,\n donationInfo: new MockDonationInfo(),\n billingInfo: mockBillingInfo,\n customerInfo: mockCustomerInfo,\n });\n\n // verify they're empty\n expect(endpointManager.requestSubmitted?.customFields.referrer).to.equal(undefined);\n expect(endpointManager.requestSubmitted?.customFields.logged_in_user).to.equal(undefined);\n\n braintreeManager.setLoggedInUser('foo-user');\n braintreeManager.setReferrer('foo-referrer');\n braintreeManager.setOrigin('foo-origin');\n\n await braintreeManager.submitDonation({\n nonce: 'boop',\n paymentProvider: PaymentProvider.CreditCard,\n donationInfo: new MockDonationInfo(),\n billingInfo: mockBillingInfo,\n customerInfo: mockCustomerInfo,\n });\n\n expect(endpointManager.requestSubmitted?.customFields.referrer).to.equal('foo-referrer');\n expect(endpointManager.requestSubmitted?.customFields.logged_in_user).to.equal('foo-user');\n expect(endpointManager.requestSubmitted?.customFields.origin).to.equal('foo-origin');\n });\n\n it('can be initialized with referrer, origin, and logged in user and submits them to the endpoint', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n loggedInUser: 'foo-user',\n referrer: 'foo-referrer',\n origin: 'foo-origin',\n });\n\n await braintreeManager.submitDonation({\n nonce: 'boop',\n paymentProvider: PaymentProvider.CreditCard,\n donationInfo: new MockDonationInfo(),\n billingInfo: mockBillingInfo,\n customerInfo: mockCustomerInfo,\n });\n\n expect(endpointManager.requestSubmitted?.customFields.referrer).to.equal('foo-referrer');\n expect(endpointManager.requestSubmitted?.customFields.logged_in_user).to.equal('foo-user');\n expect(endpointManager.requestSubmitted?.customFields.origin).to.equal('foo-origin');\n });\n\n it('properly submits an upsell donation', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n await braintreeManager.submitUpsellDonation({\n oneTimeDonationResponse: mockSuccessResponse,\n amount: 3.5,\n });\n\n const requestSubmitted = endpointManager.requestSubmitted;\n\n expect(requestSubmitted?.donationType).to.equal(DonationType.Upsell);\n expect(requestSubmitted?.amount).to.equal(3.5);\n expect(requestSubmitted?.customFields.fee_amount_covered).to.equal(0);\n });\n\n it('handles successful donation', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n await braintreeManager.donationSuccessful({\n successResponse: mockSuccessResponse,\n });\n\n const successResponseSubmitted = endpointManager.successResponseSubmitted;\n\n expect(successResponseSubmitted?.donationType).to.equal(DonationType.OneTime);\n expect(successResponseSubmitted?.amount).to.equal(5);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"braintree-manager.test.js","sourceRoot":"","sources":["../../../test/tests/braintree-manager.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { expect } from '@open-wc/testing';\n\nimport { BraintreeManager } from '../../src/braintree-manager/braintree-manager';\nimport { HostingEnvironment } from '../../src/braintree-manager/braintree-interfaces';\nimport { MockPaymentClients } from '../mocks/mock-payment-clients';\nimport { MockEndpointManager } from '../mocks/mock-endpoint-manager';\nimport { mockHostedFieldConfig } from '../mocks/mock-hosted-fields-config';\nimport { PaymentProvider, DonationType } from '@internetarchive/donation-form-data-models';\nimport { mockBillingInfo } from '../mocks/models/mock-billing-info';\nimport { mockCustomerInfo } from '../mocks/models/mock-customer-info';\nimport { MockDeviceDataCollector } from '../mocks/payment-clients/mock-data-collector';\nimport { mockSuccessResponse } from '../mocks/models/mock-success-response';\nimport { MockDonationInfo } from '../mocks/mock-donation-info';\n\ndescribe('Braintree Manager', () => {\n it('can be initialized', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n expect(braintreeManager).to.not.equal(undefined);\n });\n\n it('collects device data on startup and submits it', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n await braintreeManager.startup();\n\n await braintreeManager.submitDonation({\n nonce: 'boop',\n paymentProvider: PaymentProvider.CreditCard,\n donationInfo: new MockDonationInfo(),\n billingInfo: mockBillingInfo,\n customerInfo: mockCustomerInfo,\n });\n\n expect(endpointManager.requestSubmitted?.deviceData).to.equal(\n MockDeviceDataCollector.mockDeviceData,\n );\n });\n\n it('does not collect device data if startup not called', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n await braintreeManager.submitDonation({\n nonce: 'boop',\n paymentProvider: PaymentProvider.CreditCard,\n donationInfo: new MockDonationInfo(),\n billingInfo: mockBillingInfo,\n customerInfo: mockCustomerInfo,\n });\n\n expect(endpointManager.requestSubmitted?.deviceData).to.equal(undefined);\n });\n\n it('can properly set referrer, origin, and logged in user and submits them to the endpoint', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n await braintreeManager.submitDonation({\n nonce: 'boop',\n paymentProvider: PaymentProvider.CreditCard,\n donationInfo: new MockDonationInfo(),\n billingInfo: mockBillingInfo,\n customerInfo: mockCustomerInfo,\n });\n\n // verify they're empty\n expect(endpointManager.requestSubmitted?.customFields.referrer).to.equal(undefined);\n expect(endpointManager.requestSubmitted?.customFields.logged_in_user).to.equal(undefined);\n\n braintreeManager.setLoggedInUser('foo-user');\n braintreeManager.setReferrer('foo-referrer');\n braintreeManager.setOrigin('foo-origin');\n\n await braintreeManager.submitDonation({\n nonce: 'boop',\n paymentProvider: PaymentProvider.CreditCard,\n donationInfo: new MockDonationInfo(),\n billingInfo: mockBillingInfo,\n customerInfo: mockCustomerInfo,\n });\n\n expect(endpointManager.requestSubmitted?.customFields.referrer).to.equal('foo-referrer');\n expect(endpointManager.requestSubmitted?.customFields.logged_in_user).to.equal('foo-user');\n expect(endpointManager.requestSubmitted?.customFields.origin).to.equal('foo-origin');\n });\n\n it('can be initialized with referrer, origin, and logged in user and submits them to the endpoint', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n loggedInUser: 'foo-user',\n referrer: 'foo-referrer',\n origin: 'foo-origin',\n });\n\n await braintreeManager.submitDonation({\n nonce: 'boop',\n paymentProvider: PaymentProvider.CreditCard,\n donationInfo: new MockDonationInfo(),\n billingInfo: mockBillingInfo,\n customerInfo: mockCustomerInfo,\n });\n\n expect(endpointManager.requestSubmitted?.customFields.referrer).to.equal('foo-referrer');\n expect(endpointManager.requestSubmitted?.customFields.logged_in_user).to.equal('foo-user');\n expect(endpointManager.requestSubmitted?.customFields.origin).to.equal('foo-origin');\n });\n\n it('properly submits an upsell donation', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n await braintreeManager.submitUpsellDonation({\n oneTimeDonationResponse: mockSuccessResponse,\n amount: 3.5,\n });\n\n const requestSubmitted = endpointManager.requestSubmitted;\n\n expect(requestSubmitted?.donationType).to.equal(DonationType.Upsell);\n expect(requestSubmitted?.amount).to.equal(3.5);\n expect(requestSubmitted?.customFields.fee_amount_covered).to.equal(0);\n });\n\n it('handles successful donation', async () => {\n const paymentClients = new MockPaymentClients();\n const endpointManager = new MockEndpointManager();\n\n const braintreeManager = new BraintreeManager({\n authorizationToken: 'foo',\n paymentClients,\n endpointManager,\n hostedFieldConfig: mockHostedFieldConfig,\n hostingEnvironment: HostingEnvironment.Development,\n });\n\n await braintreeManager.donationSuccessful({\n successResponse: mockSuccessResponse,\n });\n\n const successResponseSubmitted = endpointManager.successResponseSubmitted;\n\n expect(successResponseSubmitted?.donationType).to.equal(DonationType.OneTime);\n expect(successResponseSubmitted?.amount).to.equal(5);\n });\n});\n"]}
|
|
@@ -31,9 +31,7 @@ describe('Donation Form Controller', () => {
|
|
|
31
31
|
<donation-form-controller .analyticsHandler=${mockAnalytics}> </donation-form-controller>
|
|
32
32
|
`));
|
|
33
33
|
// configure the donation-form-controller
|
|
34
|
-
const recaptchaElement = (yield fixture(html `
|
|
35
|
-
<div></div>
|
|
36
|
-
`));
|
|
34
|
+
const recaptchaElement = (yield fixture(html ` <div></div> `));
|
|
37
35
|
const endpointManager = new MockEndpointManager();
|
|
38
36
|
const paymentClients = new MockPaymentClients();
|
|
39
37
|
const modalManager = new MockModalManager();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"donation-form-controller.test.js","sourceRoot":"","sources":["../../../test/tests/donation-form-controller.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { html, fixture, expect, elementUpdated, oneEvent } from '@open-wc/testing';\n\nimport '../../src/donation-form-controller';\nimport { DonationFormController } from '../../src/donation-form-controller';\nimport { MockGrecaptcha, MockGrecaptchaMode } from '../mocks/payment-clients/mock-grecaptcha';\nimport { HostingEnvironment } from '../../src/braintree-manager/braintree-interfaces';\nimport { MockEndpointManager } from '../mocks/mock-endpoint-manager';\nimport { MockPaymentClients } from '../mocks/mock-payment-clients';\nimport { ContactForm } from '../../src/form-elements/contact-form/contact-form';\nimport { fillInContactForm } from '../helpers/fillInContactForm';\nimport { promisedSleep } from '../../src/util/promisedSleep';\nimport { MockModalManager } from '../mocks/mock-modal-manager';\nimport { MockHostedFieldsClient } from '../mocks/payment-clients/mock-hostedfields-client';\nimport { DonationForm } from '../../src/donation-form';\nimport { PaymentSelector } from '../../src/form-elements/payment-selector';\nimport { DonationFormHeader } from '../../src/form-elements/header/donation-form-header';\nimport { DonationFormEditDonation } from '@internetarchive/donation-form-edit-donation';\nimport { MockPaymentFlowHandlers } from '../mocks/flow-handlers/mock-payment-flow-handlers';\nimport { MockAnalyticsManager } from '@internetarchive/analytics-manager/dist/test/mock-analytics-manager';\n\ndescribe('Donation Form Controller', () => {\n beforeEach(() => {\n (window['grecaptcha' as any] as any) = new MockGrecaptcha(MockGrecaptchaMode.Success);\n });\n\n afterEach(() => {\n delete window['grecaptcha' as any];\n });\n\n it('has no shadowRoot', async () => {\n const el = (await fixture(html`\n <donation-form-controller></donation-form-controller>\n `)) as DonationFormController;\n\n expect(el.shadowRoot).to.equal(null);\n });\n\n it('can submit a donation', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const controller = (await fixture(html`\n <donation-form-controller .analyticsHandler=${mockAnalytics}> </donation-form-controller>\n `)) as DonationFormController;\n\n // configure the donation-form-controller\n const recaptchaElement = (await fixture(\n html`\n <div></div>\n `,\n )) as HTMLElement;\n const endpointManager = new MockEndpointManager();\n const paymentClients = new MockPaymentClients();\n const modalManager = new MockModalManager();\n controller.paymentClients = paymentClients;\n controller.modalManager = modalManager;\n controller.environment = HostingEnvironment.Development;\n controller.recaptchaElement = recaptchaElement;\n controller.endpointManager = endpointManager;\n controller.braintreeAuthToken = 'foo';\n controller.recaptchaSiteKey = 'bar';\n controller.venmoProfileId = 'baz';\n controller.referrer = 'test-referrer';\n controller.loggedInUser = 'test-user';\n\n // grab some internal elements to interact with\n const donationForm: DonationForm = controller.querySelector('donation-form') as DonationForm;\n const paymentSelector: PaymentSelector = donationForm?.shadowRoot?.querySelector(\n 'payment-selector',\n ) as PaymentSelector;\n const creditCardButton = paymentSelector?.shadowRoot?.querySelector('.credit-card-button');\n\n // click on the credit card button\n const ccClickEvent = new MouseEvent('click');\n creditCardButton?.dispatchEvent(ccClickEvent);\n\n // clicking on the credit card button will show the contact form so wait for it to be updated\n await elementUpdated(donationForm);\n await promisedSleep(100);\n const contactForm = document.querySelector('contact-form') as ContactForm;\n await fillInContactForm(contactForm);\n\n // verify the Donate button is still disabled\n const donateButton = donationForm?.shadowRoot?.querySelector(\n '#donate-button',\n ) as HTMLButtonElement;\n\n // simulates after the user has input all of the credit card fields\n const hostedFields = (await paymentClients.hostedFields.get()) as MockHostedFieldsClient;\n hostedFields.emitValidityChangedEvent(true);\n await promisedSleep(100);\n\n // verify that the donate button has become enabled and no request has been submitted\n expect(donateButton.disabled).to.equal(false);\n expect(endpointManager.requestSubmitted).to.equal(undefined);\n\n // click the donate button\n const donateClickEvent = new MouseEvent('click');\n donateButton?.dispatchEvent(donateClickEvent);\n await promisedSleep(100);\n\n expect(mockAnalytics.sendEventOptions?.action).to.equal('PaymentFlowStarted');\n\n // verify that a payload has been requested to be submitted to the backend\n expect(endpointManager.requestSubmitted).to.not.equal(undefined);\n });\n\n it('sends Viewed analytics when it first updates', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const analyticsCategory = 'FooCategory';\n (await fixture(html`\n <donation-form-controller\n ?showCreditCardButtonText=${true}\n .analyticsCategory=${analyticsCategory}\n .analyticsHandler=${mockAnalytics}\n >\n </donation-form-controller>\n `)) as DonationFormController;\n expect(mockAnalytics.sendEventOptions?.category).to.equal(analyticsCategory);\n expect(mockAnalytics.sendEventOptions?.action).to.equal('Viewed');\n });\n\n it('sends DonationInfoChanged analytics when donation info changes', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const analyticsCategory = 'FooCategory';\n const controller = (await fixture(html`\n <donation-form-controller\n ?showCreditCardButtonText=${true}\n .analyticsCategory=${analyticsCategory}\n .analyticsHandler=${mockAnalytics}\n >\n </donation-form-controller>\n `)) as DonationFormController;\n\n const donationForm: DonationForm = controller.querySelector('donation-form') as DonationForm;\n const donationHeader = donationForm.shadowRoot?.querySelector(\n 'donation-form-header',\n ) as DonationFormHeader;\n const editDonation = donationHeader?.shadowRoot?.querySelector(\n 'donation-form-edit-donation',\n ) as DonationFormEditDonation;\n const monthlyOption = editDonation?.shadowRoot?.querySelector('#donationType-monthly-option');\n const clickEvent = new MouseEvent('click');\n monthlyOption?.dispatchEvent(clickEvent);\n\n expect(mockAnalytics.sendEventOptions?.category).to.equal(analyticsCategory);\n expect(mockAnalytics.sendEventOptions?.action).to.equal('DonationInfoChanged');\n });\n\n it('sends ProviderSelected analytics', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const analyticsCategory = 'FooCategory';\n const controller = (await fixture(html`\n <donation-form-controller\n ?showCreditCardButtonText=${true}\n .analyticsCategory=${analyticsCategory}\n .analyticsHandler=${mockAnalytics}\n >\n </donation-form-controller>\n `)) as DonationFormController;\n\n const donationForm: DonationForm = controller.querySelector('donation-form') as DonationForm;\n const paymentSelector = donationForm.shadowRoot?.querySelector(\n 'payment-selector',\n ) as PaymentSelector;\n\n // on the first payment provider chosen, the previousPaymentProvider is undefined\n const creditCardButton = paymentSelector.shadowRoot?.querySelector(\n '.credit-card-button',\n ) as HTMLButtonElement;\n setTimeout(() => {\n const ccClickEvent = new MouseEvent('click');\n creditCardButton.dispatchEvent(ccClickEvent);\n });\n await oneEvent(donationForm, 'paymentProviderSelected');\n expect(mockAnalytics.sendEventOptions?.action).to.equal('ProviderFirstSelected-CreditCard');\n\n // on subsequent payment provider choices, the previousPaymentProvider is populated\n const venmoButton = paymentSelector.shadowRoot?.querySelector('.venmo') as HTMLButtonElement;\n setTimeout(() => {\n const venmoClickEvent = new MouseEvent('click');\n venmoButton.dispatchEvent(venmoClickEvent);\n });\n await oneEvent(donationForm, 'paymentProviderSelected');\n expect(mockAnalytics.sendEventOptions?.action).to.equal('ProviderChangedTo-Venmo');\n });\n\n it('sends PaymentFlowCancelled analytics', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const analyticsCategory = 'FooCategory';\n const controller = (await fixture(html`\n <donation-form-controller\n ?showCreditCardButtonText=${true}\n .analyticsCategory=${analyticsCategory}\n .analyticsHandler=${mockAnalytics}\n >\n </donation-form-controller>\n `)) as DonationFormController;\n\n const donationForm: DonationForm = controller.querySelector('donation-form') as DonationForm;\n const flowHandlers = new MockPaymentFlowHandlers();\n donationForm.paymentFlowHandlers = flowHandlers;\n await elementUpdated(donationForm);\n await promisedSleep(250);\n flowHandlers.paypalHandler.emitPaymentCancelledEvent();\n expect(mockAnalytics.sendEventOptions?.action).to.equal('PaymentFlowCancelled');\n expect(mockAnalytics.sendEventOptions?.label).to.equal('PayPal');\n });\n\n it('sends PaymentFlowError analytics', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const analyticsCategory = 'FooCategory';\n const controller = (await fixture(html`\n <donation-form-controller\n ?showCreditCardButtonText=${true}\n .analyticsCategory=${analyticsCategory}\n .analyticsHandler=${mockAnalytics}\n >\n </donation-form-controller>\n `)) as DonationFormController;\n\n const donationForm: DonationForm = controller.querySelector('donation-form') as DonationForm;\n const flowHandlers = new MockPaymentFlowHandlers();\n donationForm.paymentFlowHandlers = flowHandlers;\n await elementUpdated(donationForm);\n await promisedSleep(250);\n flowHandlers.paypalHandler.emitPaymentErrorEvent();\n expect(mockAnalytics.sendEventOptions?.action).to.equal('PaymentFlowError');\n expect(mockAnalytics.sendEventOptions?.label).to.equal('PayPal-foo-error');\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"donation-form-controller.test.js","sourceRoot":"","sources":["../../../test/tests/donation-form-controller.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { html, fixture, expect, elementUpdated, oneEvent } from '@open-wc/testing';\n\nimport '../../src/donation-form-controller';\nimport { DonationFormController } from '../../src/donation-form-controller';\nimport { MockGrecaptcha, MockGrecaptchaMode } from '../mocks/payment-clients/mock-grecaptcha';\nimport { HostingEnvironment } from '../../src/braintree-manager/braintree-interfaces';\nimport { MockEndpointManager } from '../mocks/mock-endpoint-manager';\nimport { MockPaymentClients } from '../mocks/mock-payment-clients';\nimport { ContactForm } from '../../src/form-elements/contact-form/contact-form';\nimport { fillInContactForm } from '../helpers/fillInContactForm';\nimport { promisedSleep } from '../../src/util/promisedSleep';\nimport { MockModalManager } from '../mocks/mock-modal-manager';\nimport { MockHostedFieldsClient } from '../mocks/payment-clients/mock-hostedfields-client';\nimport { DonationForm } from '../../src/donation-form';\nimport { PaymentSelector } from '../../src/form-elements/payment-selector';\nimport { DonationFormHeader } from '../../src/form-elements/header/donation-form-header';\nimport { DonationFormEditDonation } from '@internetarchive/donation-form-edit-donation';\nimport { MockPaymentFlowHandlers } from '../mocks/flow-handlers/mock-payment-flow-handlers';\nimport { MockAnalyticsManager } from '@internetarchive/analytics-manager/dist/test/mock-analytics-manager';\n\ndescribe('Donation Form Controller', () => {\n beforeEach(() => {\n (window['grecaptcha' as any] as any) = new MockGrecaptcha(MockGrecaptchaMode.Success);\n });\n\n afterEach(() => {\n delete window['grecaptcha' as any];\n });\n\n it('has no shadowRoot', async () => {\n const el = (await fixture(html`\n <donation-form-controller></donation-form-controller>\n `)) as DonationFormController;\n\n expect(el.shadowRoot).to.equal(null);\n });\n\n it('can submit a donation', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const controller = (await fixture(html`\n <donation-form-controller .analyticsHandler=${mockAnalytics}> </donation-form-controller>\n `)) as DonationFormController;\n\n // configure the donation-form-controller\n const recaptchaElement = (await fixture(html` <div></div> `)) as HTMLElement;\n const endpointManager = new MockEndpointManager();\n const paymentClients = new MockPaymentClients();\n const modalManager = new MockModalManager();\n controller.paymentClients = paymentClients;\n controller.modalManager = modalManager;\n controller.environment = HostingEnvironment.Development;\n controller.recaptchaElement = recaptchaElement;\n controller.endpointManager = endpointManager;\n controller.braintreeAuthToken = 'foo';\n controller.recaptchaSiteKey = 'bar';\n controller.venmoProfileId = 'baz';\n controller.referrer = 'test-referrer';\n controller.loggedInUser = 'test-user';\n\n // grab some internal elements to interact with\n const donationForm: DonationForm = controller.querySelector('donation-form') as DonationForm;\n const paymentSelector: PaymentSelector = donationForm?.shadowRoot?.querySelector(\n 'payment-selector',\n ) as PaymentSelector;\n const creditCardButton = paymentSelector?.shadowRoot?.querySelector('.credit-card-button');\n\n // click on the credit card button\n const ccClickEvent = new MouseEvent('click');\n creditCardButton?.dispatchEvent(ccClickEvent);\n\n // clicking on the credit card button will show the contact form so wait for it to be updated\n await elementUpdated(donationForm);\n await promisedSleep(100);\n const contactForm = document.querySelector('contact-form') as ContactForm;\n await fillInContactForm(contactForm);\n\n // verify the Donate button is still disabled\n const donateButton = donationForm?.shadowRoot?.querySelector(\n '#donate-button',\n ) as HTMLButtonElement;\n\n // simulates after the user has input all of the credit card fields\n const hostedFields = (await paymentClients.hostedFields.get()) as MockHostedFieldsClient;\n hostedFields.emitValidityChangedEvent(true);\n await promisedSleep(100);\n\n // verify that the donate button has become enabled and no request has been submitted\n expect(donateButton.disabled).to.equal(false);\n expect(endpointManager.requestSubmitted).to.equal(undefined);\n\n // click the donate button\n const donateClickEvent = new MouseEvent('click');\n donateButton?.dispatchEvent(donateClickEvent);\n await promisedSleep(100);\n\n expect(mockAnalytics.sendEventOptions?.action).to.equal('PaymentFlowStarted');\n\n // verify that a payload has been requested to be submitted to the backend\n expect(endpointManager.requestSubmitted).to.not.equal(undefined);\n });\n\n it('sends Viewed analytics when it first updates', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const analyticsCategory = 'FooCategory';\n (await fixture(html`\n <donation-form-controller\n ?showCreditCardButtonText=${true}\n .analyticsCategory=${analyticsCategory}\n .analyticsHandler=${mockAnalytics}\n >\n </donation-form-controller>\n `)) as DonationFormController;\n expect(mockAnalytics.sendEventOptions?.category).to.equal(analyticsCategory);\n expect(mockAnalytics.sendEventOptions?.action).to.equal('Viewed');\n });\n\n it('sends DonationInfoChanged analytics when donation info changes', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const analyticsCategory = 'FooCategory';\n const controller = (await fixture(html`\n <donation-form-controller\n ?showCreditCardButtonText=${true}\n .analyticsCategory=${analyticsCategory}\n .analyticsHandler=${mockAnalytics}\n >\n </donation-form-controller>\n `)) as DonationFormController;\n\n const donationForm: DonationForm = controller.querySelector('donation-form') as DonationForm;\n const donationHeader = donationForm.shadowRoot?.querySelector(\n 'donation-form-header',\n ) as DonationFormHeader;\n const editDonation = donationHeader?.shadowRoot?.querySelector(\n 'donation-form-edit-donation',\n ) as DonationFormEditDonation;\n const monthlyOption = editDonation?.shadowRoot?.querySelector('#donationType-monthly-option');\n const clickEvent = new MouseEvent('click');\n monthlyOption?.dispatchEvent(clickEvent);\n\n expect(mockAnalytics.sendEventOptions?.category).to.equal(analyticsCategory);\n expect(mockAnalytics.sendEventOptions?.action).to.equal('DonationInfoChanged');\n });\n\n it('sends ProviderSelected analytics', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const analyticsCategory = 'FooCategory';\n const controller = (await fixture(html`\n <donation-form-controller\n ?showCreditCardButtonText=${true}\n .analyticsCategory=${analyticsCategory}\n .analyticsHandler=${mockAnalytics}\n >\n </donation-form-controller>\n `)) as DonationFormController;\n\n const donationForm: DonationForm = controller.querySelector('donation-form') as DonationForm;\n const paymentSelector = donationForm.shadowRoot?.querySelector(\n 'payment-selector',\n ) as PaymentSelector;\n\n // on the first payment provider chosen, the previousPaymentProvider is undefined\n const creditCardButton = paymentSelector.shadowRoot?.querySelector(\n '.credit-card-button',\n ) as HTMLButtonElement;\n setTimeout(() => {\n const ccClickEvent = new MouseEvent('click');\n creditCardButton.dispatchEvent(ccClickEvent);\n });\n await oneEvent(donationForm, 'paymentProviderSelected');\n expect(mockAnalytics.sendEventOptions?.action).to.equal('ProviderFirstSelected-CreditCard');\n\n // on subsequent payment provider choices, the previousPaymentProvider is populated\n const venmoButton = paymentSelector.shadowRoot?.querySelector('.venmo') as HTMLButtonElement;\n setTimeout(() => {\n const venmoClickEvent = new MouseEvent('click');\n venmoButton.dispatchEvent(venmoClickEvent);\n });\n await oneEvent(donationForm, 'paymentProviderSelected');\n expect(mockAnalytics.sendEventOptions?.action).to.equal('ProviderChangedTo-Venmo');\n });\n\n it('sends PaymentFlowCancelled analytics', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const analyticsCategory = 'FooCategory';\n const controller = (await fixture(html`\n <donation-form-controller\n ?showCreditCardButtonText=${true}\n .analyticsCategory=${analyticsCategory}\n .analyticsHandler=${mockAnalytics}\n >\n </donation-form-controller>\n `)) as DonationFormController;\n\n const donationForm: DonationForm = controller.querySelector('donation-form') as DonationForm;\n const flowHandlers = new MockPaymentFlowHandlers();\n donationForm.paymentFlowHandlers = flowHandlers;\n await elementUpdated(donationForm);\n await promisedSleep(250);\n flowHandlers.paypalHandler.emitPaymentCancelledEvent();\n expect(mockAnalytics.sendEventOptions?.action).to.equal('PaymentFlowCancelled');\n expect(mockAnalytics.sendEventOptions?.label).to.equal('PayPal');\n });\n\n it('sends PaymentFlowError analytics', async () => {\n const mockAnalytics = new MockAnalyticsManager();\n const analyticsCategory = 'FooCategory';\n const controller = (await fixture(html`\n <donation-form-controller\n ?showCreditCardButtonText=${true}\n .analyticsCategory=${analyticsCategory}\n .analyticsHandler=${mockAnalytics}\n >\n </donation-form-controller>\n `)) as DonationFormController;\n\n const donationForm: DonationForm = controller.querySelector('donation-form') as DonationForm;\n const flowHandlers = new MockPaymentFlowHandlers();\n donationForm.paymentFlowHandlers = flowHandlers;\n await elementUpdated(donationForm);\n await promisedSleep(250);\n flowHandlers.paypalHandler.emitPaymentErrorEvent();\n expect(mockAnalytics.sendEventOptions?.action).to.equal('PaymentFlowError');\n expect(mockAnalytics.sendEventOptions?.label).to.equal('PayPal-foo-error');\n });\n});\n"]}
|
|
@@ -9,9 +9,7 @@ import { MockDonationInfo } from '../mocks/mock-donation-info';
|
|
|
9
9
|
describe('Donation Form', () => {
|
|
10
10
|
describe('Configuration', () => {
|
|
11
11
|
it('has no configuration', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
-
const el = (yield fixture(html `
|
|
13
|
-
<donation-form></donation-form>
|
|
14
|
-
`));
|
|
12
|
+
const el = (yield fixture(html ` <donation-form></donation-form> `));
|
|
15
13
|
expect(el.braintreeManager).to.equal(undefined);
|
|
16
14
|
expect(el.donationRequest).to.equal(undefined);
|
|
17
15
|
}));
|
|
@@ -31,9 +29,7 @@ describe('Donation Form', () => {
|
|
|
31
29
|
});
|
|
32
30
|
it('shows the contact form when Credit Card is selected', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
31
|
var _a, _b, _c;
|
|
34
|
-
const el = (yield fixture(html `
|
|
35
|
-
<donation-form></donation-form>
|
|
36
|
-
`));
|
|
32
|
+
const el = (yield fixture(html ` <donation-form></donation-form> `));
|
|
37
33
|
const contactFormSection = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.contact-form-section');
|
|
38
34
|
const paymentSelector = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('payment-selector');
|
|
39
35
|
const creditCardButton = (_c = paymentSelector.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('.credit-card-button');
|
|
@@ -45,9 +41,7 @@ describe('Donation Form', () => {
|
|
|
45
41
|
}));
|
|
46
42
|
it('shows the contact form when Venmo is selected', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
47
43
|
var _d, _e, _f;
|
|
48
|
-
const el = (yield fixture(html `
|
|
49
|
-
<donation-form></donation-form>
|
|
50
|
-
`));
|
|
44
|
+
const el = (yield fixture(html ` <donation-form></donation-form> `));
|
|
51
45
|
const braintreeManager = new MockBraintreeManager();
|
|
52
46
|
el.braintreeManager = braintreeManager;
|
|
53
47
|
yield elementUpdated(el);
|
|
@@ -77,9 +71,7 @@ describe('Donation Form', () => {
|
|
|
77
71
|
}));
|
|
78
72
|
it('emits paymentProviderSelected when the selected provider changes', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
73
|
var _g, _h;
|
|
80
|
-
const el = (yield fixture(html `
|
|
81
|
-
<donation-form></donation-form>
|
|
82
|
-
`));
|
|
74
|
+
const el = (yield fixture(html ` <donation-form></donation-form> `));
|
|
83
75
|
const braintreeManager = new MockBraintreeManager();
|
|
84
76
|
el.braintreeManager = braintreeManager;
|
|
85
77
|
yield elementUpdated(el);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"donation-form.test.js","sourceRoot":"","sources":["../../../test/tests/donation-form.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, fixture, expect, elementUpdated, oneEvent } from '@open-wc/testing';\n\nimport '../../src/donation-form';\nimport { DonationForm } from '../../src/donation-form';\nimport {\n DonationType,\n DonationPaymentInfo,\n PaymentProvider,\n} from '@internetarchive/donation-form-data-models';\nimport { PaymentSelector } from '../../src/form-elements/payment-selector';\nimport { MockBraintreeManager } from '../mocks/mock-braintree-manager';\nimport { MockPaymentFlowHandlers } from '../mocks/flow-handlers/mock-payment-flow-handlers';\nimport { promisedSleep } from '../../src/util/promisedSleep';\nimport { MockDonationInfo } from '../mocks/mock-donation-info';\n\ndescribe('Donation Form', () => {\n describe('Configuration', () => {\n it('has no configuration', async () => {\n const el = (await fixture(html`\n <donation-form></donation-form>\n `)) as DonationForm;\n\n expect(el.braintreeManager).to.equal(undefined);\n expect(el.donationRequest).to.equal(undefined);\n });\n\n it('updates donationInfo when user changes donation info', async () => {\n const el = (await fixture(html`\n <donation-form .donationInfo=${new MockDonationInfo()}></donation-form>\n `)) as DonationForm;\n const donationHeader = el.shadowRoot?.querySelector('donation-form-header');\n const editDonation = donationHeader?.shadowRoot?.querySelector('donation-form-edit-donation');\n const monthlyOption = editDonation?.shadowRoot?.querySelector('#donationType-monthly-option');\n const clickEvent = new MouseEvent('click');\n monthlyOption?.dispatchEvent(clickEvent);\n await elementUpdated(el);\n expect(el.donationInfo?.donationType).to.equal(DonationType.Monthly);\n });\n });\n\n it('shows the contact form when Credit Card is selected', async () => {\n const el = (await fixture(html`\n <donation-form></donation-form>\n `)) as DonationForm;\n const contactFormSection = el.shadowRoot?.querySelector('.contact-form-section');\n const paymentSelector = el.shadowRoot?.querySelector('payment-selector') as PaymentSelector;\n const creditCardButton = paymentSelector.shadowRoot?.querySelector(\n '.credit-card-button',\n ) as HTMLButtonElement;\n expect(contactFormSection?.classList.contains('hidden')).to.be.true;\n const clickEvent = new MouseEvent('click');\n creditCardButton.dispatchEvent(clickEvent);\n await elementUpdated(el);\n expect(contactFormSection?.classList.contains('hidden')).to.be.false;\n });\n\n it('shows the contact form when Venmo is selected', async () => {\n const el = (await fixture(html`\n <donation-form></donation-form>\n `)) as DonationForm;\n const braintreeManager = new MockBraintreeManager();\n el.braintreeManager = braintreeManager;\n await elementUpdated(el);\n const contactFormSection = el.shadowRoot?.querySelector('.contact-form-section');\n const paymentSelector = el.shadowRoot?.querySelector('payment-selector') as PaymentSelector;\n const venmoButton = paymentSelector.shadowRoot?.querySelector('.venmo') as HTMLButtonElement;\n expect(contactFormSection?.classList.contains('hidden')).to.be.true;\n const clickEvent = new MouseEvent('click');\n venmoButton.dispatchEvent(clickEvent);\n await elementUpdated(el);\n expect(contactFormSection?.classList.contains('hidden')).to.be.false;\n });\n\n it('properly configures the flow handlers when they are set', async () => {\n const donationInfo = new DonationPaymentInfo({\n donationType: DonationType.Monthly,\n amount: 3.5,\n coverFees: false,\n });\n const el = (await fixture(html`\n <donation-form .donationInfo=${donationInfo}></donation-form>\n `)) as DonationForm;\n const flowHandlers = new MockPaymentFlowHandlers();\n el.paymentFlowHandlers = flowHandlers;\n await elementUpdated(el);\n await promisedSleep(250);\n expect(flowHandlers.paypalHandler.donationInfo).to.equal(donationInfo);\n });\n\n it('emits paymentProviderSelected when the selected provider changes', async () => {\n const el = (await fixture(html`\n <donation-form></donation-form>\n `)) as DonationForm;\n const braintreeManager = new MockBraintreeManager();\n el.braintreeManager = braintreeManager;\n await elementUpdated(el);\n const paymentSelector = el.shadowRoot?.querySelector('payment-selector') as PaymentSelector;\n const creditCardButton = paymentSelector.shadowRoot?.querySelector(\n '.credit-card-button',\n ) as HTMLButtonElement;\n\n // on the first payment provider chosen, the previousPaymentProvider is undefined\n setTimeout(() => {\n const ccClickEvent = new MouseEvent('click');\n creditCardButton.dispatchEvent(ccClickEvent);\n });\n const ccResponse = await oneEvent(el, 'paymentProviderSelected');\n expect(ccResponse).to.exist;\n expect(ccResponse.detail.paymentProvider).to.equal(PaymentProvider.CreditCard);\n expect(ccResponse.detail.previousPaymentProvider).to.equal(undefined);\n\n // on subsequent payment provider choices, the previousPaymentProvider is populated\n setTimeout(() => {\n const venmoButton = paymentSelector.shadowRoot?.querySelector('.venmo') as HTMLButtonElement;\n const venmoClickEvent = new MouseEvent('click');\n venmoButton.dispatchEvent(venmoClickEvent);\n });\n const venmoResponse = await oneEvent(el, 'paymentProviderSelected');\n expect(venmoResponse).to.exist;\n expect(venmoResponse.detail.paymentProvider).to.equal(PaymentProvider.Venmo);\n expect(venmoResponse.detail.previousPaymentProvider).to.equal(PaymentProvider.CreditCard);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"donation-form.test.js","sourceRoot":"","sources":["../../../test/tests/donation-form.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, fixture, expect, elementUpdated, oneEvent } from '@open-wc/testing';\n\nimport '../../src/donation-form';\nimport { DonationForm } from '../../src/donation-form';\nimport {\n DonationType,\n DonationPaymentInfo,\n PaymentProvider,\n} from '@internetarchive/donation-form-data-models';\nimport { PaymentSelector } from '../../src/form-elements/payment-selector';\nimport { MockBraintreeManager } from '../mocks/mock-braintree-manager';\nimport { MockPaymentFlowHandlers } from '../mocks/flow-handlers/mock-payment-flow-handlers';\nimport { promisedSleep } from '../../src/util/promisedSleep';\nimport { MockDonationInfo } from '../mocks/mock-donation-info';\n\ndescribe('Donation Form', () => {\n describe('Configuration', () => {\n it('has no configuration', async () => {\n const el = (await fixture(html` <donation-form></donation-form> `)) as DonationForm;\n\n expect(el.braintreeManager).to.equal(undefined);\n expect(el.donationRequest).to.equal(undefined);\n });\n\n it('updates donationInfo when user changes donation info', async () => {\n const el = (await fixture(html`\n <donation-form .donationInfo=${new MockDonationInfo()}></donation-form>\n `)) as DonationForm;\n const donationHeader = el.shadowRoot?.querySelector('donation-form-header');\n const editDonation = donationHeader?.shadowRoot?.querySelector('donation-form-edit-donation');\n const monthlyOption = editDonation?.shadowRoot?.querySelector('#donationType-monthly-option');\n const clickEvent = new MouseEvent('click');\n monthlyOption?.dispatchEvent(clickEvent);\n await elementUpdated(el);\n expect(el.donationInfo?.donationType).to.equal(DonationType.Monthly);\n });\n });\n\n it('shows the contact form when Credit Card is selected', async () => {\n const el = (await fixture(html` <donation-form></donation-form> `)) as DonationForm;\n const contactFormSection = el.shadowRoot?.querySelector('.contact-form-section');\n const paymentSelector = el.shadowRoot?.querySelector('payment-selector') as PaymentSelector;\n const creditCardButton = paymentSelector.shadowRoot?.querySelector(\n '.credit-card-button',\n ) as HTMLButtonElement;\n expect(contactFormSection?.classList.contains('hidden')).to.be.true;\n const clickEvent = new MouseEvent('click');\n creditCardButton.dispatchEvent(clickEvent);\n await elementUpdated(el);\n expect(contactFormSection?.classList.contains('hidden')).to.be.false;\n });\n\n it('shows the contact form when Venmo is selected', async () => {\n const el = (await fixture(html` <donation-form></donation-form> `)) as DonationForm;\n const braintreeManager = new MockBraintreeManager();\n el.braintreeManager = braintreeManager;\n await elementUpdated(el);\n const contactFormSection = el.shadowRoot?.querySelector('.contact-form-section');\n const paymentSelector = el.shadowRoot?.querySelector('payment-selector') as PaymentSelector;\n const venmoButton = paymentSelector.shadowRoot?.querySelector('.venmo') as HTMLButtonElement;\n expect(contactFormSection?.classList.contains('hidden')).to.be.true;\n const clickEvent = new MouseEvent('click');\n venmoButton.dispatchEvent(clickEvent);\n await elementUpdated(el);\n expect(contactFormSection?.classList.contains('hidden')).to.be.false;\n });\n\n it('properly configures the flow handlers when they are set', async () => {\n const donationInfo = new DonationPaymentInfo({\n donationType: DonationType.Monthly,\n amount: 3.5,\n coverFees: false,\n });\n const el = (await fixture(html`\n <donation-form .donationInfo=${donationInfo}></donation-form>\n `)) as DonationForm;\n const flowHandlers = new MockPaymentFlowHandlers();\n el.paymentFlowHandlers = flowHandlers;\n await elementUpdated(el);\n await promisedSleep(250);\n expect(flowHandlers.paypalHandler.donationInfo).to.equal(donationInfo);\n });\n\n it('emits paymentProviderSelected when the selected provider changes', async () => {\n const el = (await fixture(html` <donation-form></donation-form> `)) as DonationForm;\n const braintreeManager = new MockBraintreeManager();\n el.braintreeManager = braintreeManager;\n await elementUpdated(el);\n const paymentSelector = el.shadowRoot?.querySelector('payment-selector') as PaymentSelector;\n const creditCardButton = paymentSelector.shadowRoot?.querySelector(\n '.credit-card-button',\n ) as HTMLButtonElement;\n\n // on the first payment provider chosen, the previousPaymentProvider is undefined\n setTimeout(() => {\n const ccClickEvent = new MouseEvent('click');\n creditCardButton.dispatchEvent(ccClickEvent);\n });\n const ccResponse = await oneEvent(el, 'paymentProviderSelected');\n expect(ccResponse).to.exist;\n expect(ccResponse.detail.paymentProvider).to.equal(PaymentProvider.CreditCard);\n expect(ccResponse.detail.previousPaymentProvider).to.equal(undefined);\n\n // on subsequent payment provider choices, the previousPaymentProvider is populated\n setTimeout(() => {\n const venmoButton = paymentSelector.shadowRoot?.querySelector('.venmo') as HTMLButtonElement;\n const venmoClickEvent = new MouseEvent('click');\n venmoButton.dispatchEvent(venmoClickEvent);\n });\n const venmoResponse = await oneEvent(el, 'paymentProviderSelected');\n expect(venmoResponse).to.exist;\n expect(venmoResponse.detail.paymentProvider).to.equal(PaymentProvider.Venmo);\n expect(venmoResponse.detail.previousPaymentProvider).to.equal(PaymentProvider.CreditCard);\n });\n});\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
/* eslint-disable @typescript-eslint/camelcase */
|
|
3
2
|
import { html, fixture, expect } from '@open-wc/testing';
|
|
4
3
|
import { DonationFlowModalManager } from '../../../src/payment-flow-handlers/donation-flow-modal-manager';
|
|
5
4
|
import '../../mocks/mock-modal-manager';
|
|
@@ -28,7 +27,7 @@ describe('Donation Flow Modal Manager', () => {
|
|
|
28
27
|
const manager = new DonationFlowModalManager({
|
|
29
28
|
braintreeManager: mockBraintreeManager,
|
|
30
29
|
modalManager: mockModalManager,
|
|
31
|
-
analytics
|
|
30
|
+
analytics,
|
|
32
31
|
});
|
|
33
32
|
manager.closeModal();
|
|
34
33
|
expect(mockModalManager.closeCalled).to.be.true;
|
|
@@ -58,7 +57,7 @@ describe('Donation Flow Modal Manager', () => {
|
|
|
58
57
|
const manager = new DonationFlowModalManager({
|
|
59
58
|
braintreeManager: mockBraintreeManager,
|
|
60
59
|
modalManager: mockModalManager,
|
|
61
|
-
analytics
|
|
60
|
+
analytics,
|
|
62
61
|
});
|
|
63
62
|
manager.showProcessingModal();
|
|
64
63
|
const modalOptions = mockModalManager.showModalOptions;
|
|
@@ -78,7 +77,7 @@ describe('Donation Flow Modal Manager', () => {
|
|
|
78
77
|
const manager = new DonationFlowModalManager({
|
|
79
78
|
braintreeManager: mockBraintreeManager,
|
|
80
79
|
modalManager: mockModalManager,
|
|
81
|
-
analytics
|
|
80
|
+
analytics,
|
|
82
81
|
});
|
|
83
82
|
manager.showErrorModal({ message: 'foo-error' });
|
|
84
83
|
const modalOptions = mockModalManager.showModalOptions;
|
|
@@ -103,7 +102,7 @@ describe('Donation Flow Modal Manager', () => {
|
|
|
103
102
|
analytics: {
|
|
104
103
|
logEvent,
|
|
105
104
|
logDonationFlowEvent,
|
|
106
|
-
}
|
|
105
|
+
},
|
|
107
106
|
});
|
|
108
107
|
manager.showThankYouModal({
|
|
109
108
|
successResponse: mockSuccessResponse,
|
|
@@ -131,7 +130,7 @@ describe('Donation Flow Modal Manager', () => {
|
|
|
131
130
|
analytics: {
|
|
132
131
|
logEvent,
|
|
133
132
|
logDonationFlowEvent,
|
|
134
|
-
}
|
|
133
|
+
},
|
|
135
134
|
});
|
|
136
135
|
const successResponse = mockSuccessResponse;
|
|
137
136
|
successResponse.paymentProvider = PaymentProvider.GooglePay;
|
|
@@ -152,7 +151,7 @@ describe('Donation Flow Modal Manager', () => {
|
|
|
152
151
|
const manager = new DonationFlowModalManager({
|
|
153
152
|
braintreeManager: mockBraintreeManager,
|
|
154
153
|
modalManager: mockModalManager,
|
|
155
|
-
analytics
|
|
154
|
+
analytics,
|
|
156
155
|
});
|
|
157
156
|
manager.showConfirmationStepModal({
|
|
158
157
|
donationType: DonationType.Upsell,
|
|
@@ -175,7 +174,7 @@ describe('Donation Flow Modal Manager', () => {
|
|
|
175
174
|
const manager = new DonationFlowModalManager({
|
|
176
175
|
braintreeManager: mockBraintreeManager,
|
|
177
176
|
modalManager: mockModalManager,
|
|
178
|
-
analytics
|
|
177
|
+
analytics,
|
|
179
178
|
});
|
|
180
179
|
const result = yield manager.startDonationSubmissionFlow({
|
|
181
180
|
nonce: 'foo',
|