FactuGES_ERP/apps/server/src/common/domain/value-objects/quantity.spec.ts
2025-02-25 11:16:34 +01:00

113 lines
4.1 KiB
TypeScript

import { Quantity } from "./quantity";
describe("Quantity", () => {
describe("create", () => {
it("debería crear una cantidad válida", () => {
const result = Quantity.create({ amount: 100, scale: 2 });
expect(result.isSuccess).toBe(true);
expect(result.data.amount).toBe(100);
expect(result.data.scale).toBe(2);
});
it("debería fallar si la escala es negativa", () => {
const result = Quantity.create({ amount: 100, scale: -1 });
expect(result.isFailure).toBe(true);
});
});
describe("toNumber & toString", () => {
it("debería convertir correctamente a número", () => {
const quantity = Quantity.create({ amount: 150, scale: 2 }).data;
expect(quantity.toNumber()).toBe(1.5);
});
it("debería convertir correctamente a string", () => {
const quantity = Quantity.create({ amount: 123, scale: 2 }).data;
expect(quantity.toString()).toBe("1.23");
});
});
describe("increment", () => {
it("debería incrementar en 1 si no se pasa otra cantidad", () => {
const quantity = Quantity.create({ amount: 100, scale: 2 }).data;
const incremented = quantity.increment().data;
expect(incremented.amount).toBe(101);
expect(incremented.scale).toBe(2);
});
it("debería sumar correctamente si tienen la misma escala", () => {
const quantity1 = Quantity.create({ amount: 100, scale: 2 }).data;
const quantity2 = Quantity.create({ amount: 50, scale: 2 }).data;
const result = quantity1.increment(quantity2);
expect(result.isSuccess).toBe(true);
expect(result.data.amount).toBe(150);
});
it("debería fallar si las escalas son diferentes", () => {
const quantity1 = Quantity.create({ amount: 100, scale: 2 }).data;
const quantity2 = Quantity.create({ amount: 50, scale: 1 }).data;
const result = quantity1.increment(quantity2);
expect(result.isFailure).toBe(true);
});
});
describe("decrement", () => {
it("debería decrementar en 1 si no se pasa otra cantidad", () => {
const quantity = Quantity.create({ amount: 100, scale: 2 }).data;
const decremented = quantity.decrement().data;
expect(decremented.amount).toBe(99);
});
it("debería restar correctamente si tienen la misma escala", () => {
const quantity1 = Quantity.create({ amount: 100, scale: 2 }).data;
const quantity2 = Quantity.create({ amount: 50, scale: 2 }).data;
const result = quantity1.decrement(quantity2);
expect(result.isSuccess).toBe(true);
expect(result.data.amount).toBe(50);
});
it("debería fallar si las escalas son diferentes", () => {
const quantity1 = Quantity.create({ amount: 100, scale: 2 }).data;
const quantity2 = Quantity.create({ amount: 50, scale: 1 }).data;
const result = quantity1.decrement(quantity2);
expect(result.isFailure).toBe(true);
});
});
describe("convertScale", () => {
it("debería convertir correctamente a una nueva escala", () => {
const quantity = Quantity.create({ amount: 100, scale: 2 }).data;
const result = quantity.convertScale(1);
expect(result.isSuccess).toBe(true);
expect(result.data.amount).toBe(10);
expect(result.data.scale).toBe(1);
});
it("debería fallar si la escala está fuera de rango", () => {
const quantity = Quantity.create({ amount: 100, scale: 2 }).data;
const result = quantity.convertScale(3);
expect(result.isFailure).toBe(true);
});
});
describe("hasSameScale", () => {
it("debería retornar true si las escalas son iguales", () => {
const quantity1 = Quantity.create({ amount: 100, scale: 2 }).data;
const quantity2 = Quantity.create({ amount: 50, scale: 2 }).data;
expect(quantity1.hasSameScale(quantity2)).toBe(true);
});
it("debería retornar false si las escalas son diferentes", () => {
const quantity1 = Quantity.create({ amount: 100, scale: 2 }).data;
const quantity2 = Quantity.create({ amount: 50, scale: 1 }).data;
expect(quantity1.hasSameScale(quantity2)).toBe(false);
});
});
});