import { PostalAddress } from "../postal-address"; describe("PostalAddress Value Object", () => { const validAddress = { street: "123 Main St", city: "Springfield", postalCode: "12345", state: "IL", country: "USA", }; test("✅ Debería crear un PostalAddress con valores válidos", () => { const result = PostalAddress.create(validAddress); expect(result.isSuccess).toBe(true); expect(result.data).toBeInstanceOf(PostalAddress); }); test("❌ Debería fallar al crear un PostalAddress con código postal inválido", () => { const invalidAddress = { ...validAddress, postalCode: "abc" }; // Código postal inválido const result = PostalAddress.create(invalidAddress); expect(result.isFailure).toBe(true); expect(result.error?.message).toBe("Invalid postal code format"); }); test("✅ `createNullable` debería devolver Maybe.none si los valores son nulos o vacíos", () => { expect(PostalAddress.createNullable().data.isSome()).toBe(false); expect( PostalAddress.createNullable({ street: "", city: "", postalCode: "", state: "", country: "", }).data.isSome() ).toBe(false); }); test("✅ `createNullable` debería devolver Maybe.some si los valores son válidos", () => { const result = PostalAddress.createNullable(validAddress); expect(result.isSuccess).toBe(true); expect(result.data.isSome()).toBe(true); expect(result.data.unwrap()).toBeInstanceOf(PostalAddress); }); test("✅ Métodos getters deberían devolver valores esperados", () => { const address = PostalAddress.create(validAddress).data; expect(address.street).toBe(validAddress.street); expect(address.city).toBe(validAddress.city); expect(address.postalCode).toBe(validAddress.postalCode); expect(address.state).toBe(validAddress.state); expect(address.country).toBe(validAddress.country); }); test("✅ `toString()` debería devolver la representación correcta", () => { const address = PostalAddress.create(validAddress).data; const expectedString = `${validAddress.street}, ${validAddress.city}, ${validAddress.postalCode}, ${validAddress.state}, ${validAddress.country}`; expect(address.toString()).toBe(expectedString); }); });