feat(shopping): mağazalar, zahmet skoru ve ürünler (marka/paket, dönüşüm, görseller)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-06 11:48:04 +03:00
parent 8e7e374778
commit f0b570284e
23 changed files with 1893 additions and 1 deletions
+42
View File
@@ -0,0 +1,42 @@
import { describe, expect, it } from "vitest";
import { autoConvertible, BARCODE_PATTERN, describePackage, packageInTypeUnit } from "./products";
const p = (
packageQuantity: number,
packageUnit: string,
typeUnit: string,
typeQuantity: number | null = null,
) => ({
packageQuantity,
packageUnit,
typeUnit,
typeQuantity,
});
describe("paketin ürün tipi birimindeki karşılığı", () => {
it("aynı birim ve aynı boyut kendiliğinden", () => {
expect(packageInTypeUnit(p(5_000, "kg", "kg"))).toBe(5_000);
expect(packageInTypeUnit(p(500_000, "g", "kg"))).toBe(500);
expect(packageInTypeUnit(p(1_500, "lt", "ml"))).toBe(1_500_000);
expect(packageInTypeUnit(p(40_000, "tablet", "tablet"))).toBe(40_000);
expect(autoConvertible("g", "kg")).toBe(true);
expect(autoConvertible("kg", "lt")).toBe(false);
expect(autoConvertible("paket", "adet")).toBe(false);
});
it("farklı boyut veya özel birimde elle dönüşüm, yoksa null", () => {
expect(packageInTypeUnit(p(5_000, "kg", "yıkama", 50_000))).toBe(50_000);
expect(packageInTypeUnit(p(1_000, "paket", "tablet", 40_000))).toBe(40_000);
expect(packageInTypeUnit(p(5_000, "kg", "yıkama"))).toBeNull();
// Kendiliğinden çevrilebiliyorsa elle girilen yok sayılır.
expect(packageInTypeUnit(p(500_000, "g", "kg", 999))).toBe(500);
});
it("paket açıklaması ve barkod", () => {
expect(describePackage(p(5_000, "kg", "yıkama", 50_000))).toBe("5 kg · 50 yıkama");
expect(describePackage(p(500_000, "g", "kg"))).toBe("500 g · 0,5 kg");
expect(describePackage(p(2_000, "kg", "kg"))).toBe("2 kg");
expect(BARCODE_PATTERN.test("8690000000001")).toBe(true);
expect(BARCODE_PATTERN.test("123")).toBe(false);
});
});