Bug-ul
Un magazin de produse pentru animale, pe Shopify, configurează livrarea după greutate în trei trepte: 0–5 kg, 5–10 kg și 10–20 kg. Nimeni nu adaugă o treaptă peste 20 kg, iar Shopify mai pune la fiecare coș greutatea implicită a coletului. Dacă un coș cade într-un gol dintre trepte, Shopify îl duce la tariful următor. Un coș peste ultima treaptă nu primește niciun tarif.
Cum se vede
De Black Friday, magazinul face un pachet: doi saci de hrană de câte 12 kg. Coșul are 24 kg plus cutia, niciun tarif nu se potrivește, iar checkout-ul afișează „Shipping not available. Your order cannot be shipped to the selected address.” Comenzile cu un singur sac merg. Proprietarul testează cu un sac și vede că totul e în regulă. Mesajul îl văd tocmai clienții cu cele mai mari coșuri, iar în admin nu apare nicio eroare.
Metoda de livrare
- Coș: 2 × hrană pentru câini, 12 kg fiecare
- Tarif: 20 kg și peste
Tarif găsit
Livrarea nu este disponibilă
- Coș: 2 × hrană pentru câini, 12 kg fiecare
- Greutate: 24 kg plus cutia
Niciun tarif peste 20 kg
Cum îl găsește un test
Un test de checkout bun nu cumpără un singur produs. Construiește cel mai greu coș realist: cantitatea maximă din cel mai greu produs, plus cel mai mare pachet. Apoi cere livrare în fiecare zonă a magazinului. Cu treptele de mai sus, coșul de 24 kg nu primește tarif, iar testul pică înainte să înceapă campania.
Reparația
Adaugi o treaptă finală deschisă, de exemplu de la 20 kg în sus, sau treci pe tarife calculate de curier, cu un tarif fix de rezervă. Setezi greutatea la fiecare produs, ca totalul coșului să fie real.
Testul care îl prinde
Un test Playwright de checkout cu cel mai greu coș realist, rulat pentru fiecare zonă de livrare, care verifică dacă apare cel puțin un tarif. O a doua verificare pică dacă vreun produs n-are greutate setată. Ambele rulează înaintea fiecărei campanii și după fiecare schimbare în setările de livrare.
import { test, expect } from "@playwright/test";
import { addHeaviestCart, products, shippingZones } from "./fixtures";
// The biggest basket a customer could build: the heaviest product at its
// maximum quantity, plus the largest bundle.
for (const zone of shippingZones) {
test(`the heaviest cart gets a rate: ${zone.name}`, async ({ page }) => {
await addHeaviestCart(page);
await page.goto("/checkout");
await page.getByLabel("Country/region").selectOption(zone.country);
await page.getByRole("button", { name: "Continue to shipping" }).click();
await expect(page.getByText("Shipping not available")).toHaveCount(0);
await expect(page.getByRole("radio").first()).toBeVisible();
});
}
test("every product has a weight", async () => {
const missing = (await products()).filter((variant) => !variant.grams);
expect(missing).toEqual([]);
});
Ce pune în pericol
Cele mai mari comenzi din campanie, chiar în săptămâna în care magazinul a plătit reclame ca să le aducă. Clientul dă de un zid, magazinul nu vede nimic, iar comanda poate ajunge la un concurent.
