Sari la conținut
← Toate exercițiile

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,
    );
  });
});