Uecko_ERP/apps/server/archive/contexts/accounts/domain/value-objects/account-status.test.ts
2025-05-04 22:06:57 +02:00

73 lines
2.8 KiB
TypeScript

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