import { ACCOUNT_STATUS, AccountStatus } from "./account-status"; describe("AccountStatus Value Object", () => { describe("Creación de estados válidos", () => { it("debería crear un estado inactivo correctamente", () => { const status = AccountStatus.createInactive(); expect(status.getValue()).toBe(ACCOUNT_STATUS.INACTIVE); }); it("debería crear un estado activo correctamente", () => { const status = AccountStatus.createActive(); expect(status.getValue()).toBe(ACCOUNT_STATUS.ACTIVE); }); it("debería crear un estado válido usando el método create", () => { const result = AccountStatus.create(ACCOUNT_STATUS.ACTIVE); expect(result.isSuccess).toBe(true); expect(result.data.getValue()).toBe(ACCOUNT_STATUS.ACTIVE); }); it("debería fallar al crear un estado inválido", () => { const result = AccountStatus.create("invalid-status"); expect(result.isFailure).toBe(true); expect(result.error.message).toBe("Estado de la cuenta no válido: invalid-status"); }); }); describe("Verificación de transiciones", () => { it("debería permitir la transición de 'inactive' a 'active'", () => { const status = AccountStatus.createInactive(); expect(status.canTransitionTo(ACCOUNT_STATUS.ACTIVE)).toBe(true); }); it("debería permitir la transición de 'active' a 'inactive'", () => { const status = AccountStatus.createActive(); expect(status.canTransitionTo(ACCOUNT_STATUS.INACTIVE)).toBe(true); }); it("debería impedir transiciones no permitidas", () => { const status = AccountStatus.createInactive(); expect(status.canTransitionTo("invalid")).toBe(false); }); it("debería realizar una transición válida correctamente", () => { const inactiveStatus = AccountStatus.createInactive(); const transitionResult = inactiveStatus.transitionTo(ACCOUNT_STATUS.ACTIVE); expect(transitionResult.isSuccess).toBe(true); expect(transitionResult.data.getValue()).toBe(ACCOUNT_STATUS.ACTIVE); }); it("debería fallar en una transición inválida", () => { const status = AccountStatus.createInactive(); const transitionResult = status.transitionTo("invalid"); expect(transitionResult.isFailure).toBe(true); expect(transitionResult.error.message).toBe("Transición no permitida de inactive a invalid"); }); }); describe("Métodos auxiliares", () => { it("debería devolver correctamente el valor con getValue()", () => { const status = AccountStatus.createInactive(); expect(status.getValue()).toBe(ACCOUNT_STATUS.INACTIVE); }); it("debería devolver correctamente el valor con toString()", () => { const status = AccountStatus.createActive(); expect(status.toString()).toBe(ACCOUNT_STATUS.ACTIVE); }); }); });