Teste pentru taxa de livrare care doar confirmă codul
TypeScript · Serviciul de checkout al unui magazin online · Teste · dificultate 2/3 · ~8 min
Serviciul de checkout are nevoie de un calculator pentru taxa de livrare. Un coleg i-a dat asistentului AI regulile de preț din specificația de produs și i-a cerut „calculateShipping(order) cu teste”. Și funcția, și testele au venit dintr-o dată, iar rularea testelor e verde.
Faci review funcției și testelor ei împreună. Testele vizibile sunt cele scrise de asistent; tratează-le ca parte din codul aflat în review, nu ca pe un arbitru independent.
Regulile de preț din specificație:
- O comandă standard cu subtotalul de 100 sau mai mult are livrare gratuită.
- Altfel, taxa e un tarif de bază de 5.99, plus 1.50 pentru fiecare kilogram început peste 2 kg (2.0 kg nu adaugă nimic, 2.1 kg adaugă un kilogram, 3.0 kg adaugă unul, 3.01 kg adaugă două).
- Livrarea express adaugă 9.99 peste taxa standard, oricare ar fi ea, deci o comandă cu livrare gratuită plătește 9.99 pentru express.
- Rezultatul e rotunjit la două zecimale.
Decide dacă testele chiar demonstrează regulile și dacă implementarea le respectă.
Repară codul până trec testele ascunse.
code.ts
Teste vizibile (trec pe codul primit)
import { describe, it, expect } from "@debunk/harness";
import {
calculateShipping,
BASE_RATE,
PER_EXTRA_KG,
EXPRESS_SUPPLEMENT,
} from "./code";
describe("calculateShipping", () => {
it("ships free above the threshold", () => {
expect(calculateShipping({ subtotal: 150, weightKg: 1 })).toBe(0);
});
it("charges the base rate plus the per-kg surcharge", () => {
expect(calculateShipping({ subtotal: 40, weightKg: 1 })).toBe(BASE_RATE);
expect(calculateShipping({ subtotal: 40, weightKg: 4 })).toBe(BASE_RATE + 2 * PER_EXTRA_KG);
});
it("adds the express supplement", () => {
expect(calculateShipping({ subtotal: 40, weightKg: 1, express: true })).toBe(
BASE_RATE + EXPRESS_SUPPLEMENT,
);
});
});