summaryrefslogtreecommitdiffstats
path: root/test/browser.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/browser.test.js')
-rw-r--r--test/browser.test.js117
1 files changed, 115 insertions, 2 deletions
diff --git a/test/browser.test.js b/test/browser.test.js
index 634df0d..afbfb2c 100644
--- a/test/browser.test.js
+++ b/test/browser.test.js
@@ -68,6 +68,22 @@ function events() {
return page.evaluate(() => window.__events);
}
+function lastError() {
+ return page.evaluate(() => window.__error);
+}
+
+/** Every field the fixture maps, so a test can prove none of them was written. */
+async function filledFields() {
+ const filled = {};
+ for (const selector of ["#rua", "#bairro", "#cidade", "#uf", "#numero"]) {
+ const current = await value(selector);
+ if (current !== "") {
+ filled[selector] = current;
+ }
+ }
+ return filled;
+}
+
async function waitForRequests(count, timeout = 4000) {
const deadline = Date.now() + timeout;
while (Date.now() < deadline) {
@@ -209,8 +225,10 @@ describe("errors", () => {
document.querySelector(".cepis-autofill-status").textContent.includes("não encontrado"),
);
- expect(await statusText()).toContain("CEP não encontrado");
- expect(await value("#rua")).toBe("");
+ expect(await statusText()).toBe(
+ "CEP não encontrado. Confira o número ou preencha o endereço manualmente.",
+ );
+ expect(await filledFields()).toEqual({});
expect(await events()).toContain("error:not_found");
});
@@ -256,6 +274,101 @@ describe("errors", () => {
});
});
+describe("the municipality behind a CEP that does not exist", () => {
+ async function lookFor(cep) {
+ await open();
+ await typeCep(cep);
+ await page.waitForFunction(() =>
+ document.querySelector(".cepis-autofill-status").textContent.includes("não encontrado"),
+ );
+ }
+
+ test("the message names the city and where its CEPs start and end", async () => {
+ await lookFor("25845000");
+
+ expect(await statusText()).toBe(
+ "CEP não encontrado. Esse número seria de Areal/RJ, " +
+ "que tem CEPs de 25845-001 a 25849-899.",
+ );
+ expect(await events()).toContain("error:not_found");
+ });
+
+ test("naming the city fills nothing — it is a failure, not an address", async () => {
+ await lookFor("25845000");
+
+ expect(await filledFields()).toEqual({});
+ expect(await events()).not.toContain("result:25845000");
+ expect(await page.locator("#cep").getAttribute("aria-invalid")).toBe("true");
+ });
+
+ test("the faixa reaches onError, whole", async () => {
+ await lookFor("25845000");
+
+ const error = await lastError();
+ expect(error.code).toBe("not_found");
+ expect(error.faixa).toEqual({
+ localidade: "Areal",
+ uf: "RJ",
+ estado: "Rio de Janeiro",
+ regiao: "Sudeste",
+ ibge: "3300225",
+ cep_ini: "25845001",
+ cep_fim: "25849899",
+ ceps: 118,
+ });
+ });
+
+ test("a CEP in no municipality keeps the plain message", async () => {
+ await lookFor("99999999");
+
+ expect(await statusText()).toBe(
+ "CEP não encontrado. Confira o número ou preencha o endereço manualmente.",
+ );
+ expect(await filledFields()).toEqual({});
+ expect((await lastError()).faixa).toBeUndefined();
+ });
+
+ test("a malformed faixa falls back to the plain message", async () => {
+ await lookFor("25845999");
+
+ expect(await statusText()).toBe(
+ "CEP não encontrado. Confira o número ou preencha o endereço manualmente.",
+ );
+ expect(await filledFields()).toEqual({});
+ expect((await lastError()).faixa).toBeUndefined();
+ });
+
+ test("the wording is overridable like every other message", async () => {
+ await open({
+ messages: { not_found_city_range: "Nada aqui. Tente um CEP de {localidade} ({uf})." },
+ });
+ await typeCep("25845000");
+ await page.waitForFunction(() =>
+ document.querySelector(".cepis-autofill-status").textContent.includes("Nada aqui"),
+ );
+
+ expect(await statusText()).toBe("Nada aqui. Tente um CEP de Areal (RJ).");
+ expect(await filledFields()).toEqual({});
+ });
+
+ test("lookup() hands the faixa over without touching the form", async () => {
+ await open();
+ const thrown = await page.evaluate(async (baseUrl) => {
+ try {
+ await window.CepisAutofill.lookup("25845-000", { baseUrl });
+ return null;
+ } catch (error) {
+ return { code: error.code, message: error.message, localidade: error.faixa.localidade };
+ }
+ }, api.url);
+
+ expect(thrown.code).toBe("not_found");
+ expect(thrown.message).toContain("Areal/RJ");
+ expect(thrown.localidade).toBe("Areal");
+ expect(await filledFields()).toEqual({});
+ });
+});
+
describe("what the shopper typed", () => {
test("overwrite: false leaves a filled field alone", async () => {
await open({ overwrite: false });