@12-apps/payments-e2e 2.2.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/helpers/checkout.d.ts +9 -0
- package/dist/helpers/checkout.d.ts.map +1 -1
- package/dist/helpers/checkout.js +12 -1
- package/dist/helpers/checkout.js.map +1 -1
- package/dist/steps/reconexao.steps.js +27 -0
- package/dist/steps/reconexao.steps.js.map +1 -1
- package/dist/steps/saved-card-wallet.steps.js +13 -4
- package/dist/steps/saved-card-wallet.steps.js.map +1 -1
- package/features/a-autorizacao-que-morreu.feature +9 -0
- package/package.json +1 -1
|
@@ -19,6 +19,15 @@ export declare const VALID_CPF = "529.982.247-25";
|
|
|
19
19
|
export declare const GOOD_PAN = "4111 1111 1111 1111";
|
|
20
20
|
/** The sandbox PAN that always declines, honoured by the shipped tokenizer. */
|
|
21
21
|
export declare const DECLINE_PAN = "4000 0000 0000 0002";
|
|
22
|
+
/**
|
|
23
|
+
* How a saved-card list restates {@link CARD_EXPIRY_TYPED}: the same date,
|
|
24
|
+
* with the year in full.
|
|
25
|
+
*
|
|
26
|
+
* Exported so a step can assert the DIGITS a screen shows without asserting
|
|
27
|
+
* the host's word for them (FUT-760) — "Validade", "Vence em" and "Expires"
|
|
28
|
+
* are all the same fact, and only one of them is any given host's.
|
|
29
|
+
*/
|
|
30
|
+
export declare const CARD_EXPIRY_SHOWN = "12/2031";
|
|
22
31
|
/** Fill the Dados step's CPF. */
|
|
23
32
|
export declare function fillCpf(page: Page, cpf?: string): Promise<void>;
|
|
24
33
|
/** Fill the card form the store's chain gave the buyer. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/helpers/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;;;;;;;;;;GAaG;AAEH,gFAAgF;AAChF,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAE1C,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,wBAAwB,CAAC;AAE9C,+EAA+E;AAC/E,eAAO,MAAM,WAAW,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/helpers/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;;;;;;;;;;GAaG;AAEH,gFAAgF;AAChF,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAE1C,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,wBAAwB,CAAC;AAE9C,+EAA+E;AAC/E,eAAO,MAAM,WAAW,wBAAwB,CAAC;AAKjD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,iCAAiC;AACjC,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF;AAED,2DAA2D;AAC3D,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,MAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhF;AAED,6EAA6E;AAC7E,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1D;AAED,uEAAuE;AACvE,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED,iDAAiD;AACjD,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5D"}
|
package/dist/helpers/checkout.js
CHANGED
|
@@ -19,6 +19,17 @@ export const VALID_CPF = '529.982.247-25';
|
|
|
19
19
|
export const GOOD_PAN = '4111 1111 1111 1111';
|
|
20
20
|
/** The sandbox PAN that always declines, honoured by the shipped tokenizer. */
|
|
21
21
|
export const DECLINE_PAN = '4000 0000 0000 0002';
|
|
22
|
+
/** The expiry {@link fillCard} types — two-digit, as a card is embossed. */
|
|
23
|
+
const CARD_EXPIRY_TYPED = '12/31';
|
|
24
|
+
/**
|
|
25
|
+
* How a saved-card list restates {@link CARD_EXPIRY_TYPED}: the same date,
|
|
26
|
+
* with the year in full.
|
|
27
|
+
*
|
|
28
|
+
* Exported so a step can assert the DIGITS a screen shows without asserting
|
|
29
|
+
* the host's word for them (FUT-760) — "Validade", "Vence em" and "Expires"
|
|
30
|
+
* are all the same fact, and only one of them is any given host's.
|
|
31
|
+
*/
|
|
32
|
+
export const CARD_EXPIRY_SHOWN = '12/2031';
|
|
22
33
|
/** Fill the Dados step's CPF. */
|
|
23
34
|
export async function fillCpf(page, cpf = VALID_CPF) {
|
|
24
35
|
await page.getByTestId('buyer-cpf').fill(cpf);
|
|
@@ -27,7 +38,7 @@ export async function fillCpf(page, cpf = VALID_CPF) {
|
|
|
27
38
|
export async function fillCard(page, pan = GOOD_PAN) {
|
|
28
39
|
await page.getByTestId('card-number').fill(pan);
|
|
29
40
|
await page.getByTestId('card-holder').fill('ANA COMPRADORA');
|
|
30
|
-
await page.getByTestId('card-expiry').fill(
|
|
41
|
+
await page.getByTestId('card-expiry').fill(CARD_EXPIRY_TYPED);
|
|
31
42
|
await page.getByTestId('card-cvv').fill('123');
|
|
32
43
|
}
|
|
33
44
|
/** Pick the card tile on a store that offers both, and wait for the form. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/helpers/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,kBAAkB,CAAC;AAErD;;;;;;;;;;;;;GAaG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAE1C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAEjD,iCAAiC;AACjC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAU,EAAE,MAAc,SAAS;IAC/D,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAU,EAAE,MAAc,QAAQ;IAC/D,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7D,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/helpers/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,kBAAkB,CAAC;AAErD;;;;;;;;;;;;;GAaG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAE1C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAEjD,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE3C,iCAAiC;AACjC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAU,EAAE,MAAc,SAAS;IAC/D,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAU,EAAE,MAAc,QAAQ;IAC/D,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7D,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9D,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAU;IACzC,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IACvD,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5D,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAU;IACtC,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAU;IAC3C,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -74,4 +74,31 @@ Then('o aviso de autorização expirada some', async ({ page }) => {
|
|
|
74
74
|
await expect(page.getByText('A autorização expirou ou foi revogada.')).toBeHidden();
|
|
75
75
|
await expect(page.getByTestId('payments-expiry-warning')).toBeHidden();
|
|
76
76
|
});
|
|
77
|
+
/**
|
|
78
|
+
* THE CONTRAST, and the reason it is a scenario rather than an assumption.
|
|
79
|
+
*
|
|
80
|
+
* Every warning on this screen is conditional, so a panel that rendered the
|
|
81
|
+
* reconnect banner unconditionally would satisfy all three scenarios above —
|
|
82
|
+
* they only ever look at a store whose grant is already dead. This is the one
|
|
83
|
+
* that fails if the condition is dropped.
|
|
84
|
+
*
|
|
85
|
+
* It reuses the `activation` surface rather than asking hosts for a fourth
|
|
86
|
+
* case: that store's provider is connected in stub mode and simply never
|
|
87
|
+
* charged, which is a healthy grant by every measure this feature cares about.
|
|
88
|
+
*/
|
|
89
|
+
Given('a loja tem uma conexão saudável com o provedor', async ({ page }) => {
|
|
90
|
+
await paymentsWorld().open(page, 'activation');
|
|
91
|
+
});
|
|
92
|
+
When('o lojista abre a tela dessa conexão', async ({ page }) => {
|
|
93
|
+
// The activation surface lands the owner on the provider's own panel, so
|
|
94
|
+
// there is nothing to click — what this step asserts is that we are on it.
|
|
95
|
+
await expect(page.getByTestId('payments-enabled-toggle')).toBeVisible();
|
|
96
|
+
});
|
|
97
|
+
Then('não há aviso de autorização expirada', async ({ page }) => {
|
|
98
|
+
await expect(page.getByText('A autorização expirou ou foi revogada.')).toBeHidden();
|
|
99
|
+
await expect(page.getByTestId('payments-expiry-warning')).toBeHidden();
|
|
100
|
+
});
|
|
101
|
+
Then('não há nada para reconectar', async ({ page }) => {
|
|
102
|
+
await expect(page.getByRole('button', { name: 'Reconectar' })).toBeHidden();
|
|
103
|
+
});
|
|
77
104
|
//# sourceMappingURL=reconexao.steps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconexao.steps.js","sourceRoot":"","sources":["../../src/steps/reconexao.steps.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reconexao.steps.js","sourceRoot":"","sources":["../../src/steps/reconexao.steps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { expect } from '@playwright/test';
|
|
2
|
-
import { DECLINE_PAN, fillCard } from '../helpers/checkout.js';
|
|
2
|
+
import { CARD_EXPIRY_SHOWN, DECLINE_PAN, fillCard } from '../helpers/checkout.js';
|
|
3
3
|
import { paymentsWorld } from '../world.js';
|
|
4
4
|
import { Given, Then, When } from './fixtures.js';
|
|
5
5
|
/**
|
|
@@ -41,10 +41,19 @@ Then('the card is stored and appears in the list', async ({ page }) => {
|
|
|
41
41
|
Then('the list shows only the brand and the last digits', async ({ page }) => {
|
|
42
42
|
// Display metadata ONLY. The vault token — the thing that can charge —
|
|
43
43
|
// never reaches this screen; what she reads back is brand + last4 + expiry.
|
|
44
|
-
//
|
|
44
|
+
//
|
|
45
|
+
// Asserted as DIGITS, not as sentences (FUT-760). The expiry line used to be
|
|
46
|
+
// matched on the word "Validade", which was the package's own hard-coded
|
|
47
|
+
// label — so the assertion held only for a host that had inherited it, and
|
|
48
|
+
// said nothing at all about the host under test. "Validade", "Vence em" and
|
|
49
|
+
// "Expires" are one fact worded three ways; the numbers beside them are the
|
|
50
|
+
// fact, and the mask is what proves the PAN is not on screen.
|
|
45
51
|
const list = page.getByTestId('manage-cards-list');
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
// A mask and exactly four digits after it — the shape, not which four: the
|
|
53
|
+
// last4 is whatever the store's vault answered, and pinning it here would
|
|
54
|
+
// make this journey a test of one host's stub.
|
|
55
|
+
await expect(list).toContainText(/•••• {0,1}\d{4}/);
|
|
56
|
+
await expect(list).toContainText(CARD_EXPIRY_SHOWN);
|
|
48
57
|
});
|
|
49
58
|
Then('the refusal explains why and the form stays on screen', async ({ page }) => {
|
|
50
59
|
// The endpoint's own reason, and the form kept editable under it — wiping
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saved-card-wallet.steps.js","sourceRoot":"","sources":["../../src/steps/saved-card-wallet.steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"saved-card-wallet.steps.js","sourceRoot":"","sources":["../../src/steps/saved-card-wallet.steps.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,3 +34,12 @@ Feature: A autorização que morreu, e a loja que volta a vender
|
|
|
34
34
|
Then a conexão volta a estar verificada
|
|
35
35
|
And a loja volta para a rotação sem ninguém ter mexido no botão
|
|
36
36
|
And o aviso de autorização expirada some
|
|
37
|
+
|
|
38
|
+
# O contraste, e não é cerimônia: todo aviso desta tela é condicional, então
|
|
39
|
+
# uma tela que avisasse sempre passaria nos três cenários acima. Este é o
|
|
40
|
+
# único que falha se o aviso deixar de ser condicional.
|
|
41
|
+
Scenario: Uma conexão saudável não avisa nada
|
|
42
|
+
Given a loja tem uma conexão saudável com o provedor
|
|
43
|
+
When o lojista abre a tela dessa conexão
|
|
44
|
+
Then não há aviso de autorização expirada
|
|
45
|
+
And não há nada para reconectar
|