Presupuestador_web/shared/lib/contexts/common/domain/entities/Quantity.test.ts

149 lines
4.9 KiB
TypeScript
Raw Normal View History

2024-04-23 15:29:38 +00:00
import { Quantity } from "./Quantity"; // Asegúrate de importar correctamente la clase Quantity.
describe("Quantity Value Object", () => {
2024-07-16 15:55:14 +00:00
it("Should create a valid quantity (number)", () => {
const validQuantity = Quantity.createFromFormattedValue(5);
expect(validQuantity.isSuccess).toBe(true);
expect(validQuantity.object.toNumber()).toBe(5);
});
it("Should create a valid quantity (number)", () => {
const validQuantity = Quantity.createFromFormattedValue("5,31");
expect(validQuantity.isSuccess).toBe(true);
expect(validQuantity.object.toNumber()).toBe(5.31);
expect(validQuantity.object.toObject()).toStrictEqual({
amount: 531,
scale: 2,
});
});
it("Should create a valid quantity (number)", () => {
const validQuantity = Quantity.createFromFormattedValue("99,");
expect(validQuantity.isSuccess).toBe(true);
expect(validQuantity.object.toNumber()).toBe(99);
expect(validQuantity.object.toObject()).toStrictEqual({
amount: 990,
scale: 1,
});
});
it("Should create a valid quantity (number)", () => {
const validQuantity = Quantity.createFromFormattedValue("9,1");
expect(validQuantity.isSuccess).toBe(true);
expect(validQuantity.object.toNumber()).toBe(9.1);
expect(validQuantity.object.toObject()).toStrictEqual({
amount: 91,
scale: 1,
});
});
2024-04-23 15:29:38 +00:00
// Prueba la creación de una cantidad válida.
it("Should create a valid quantity (number)", () => {
2024-06-19 16:54:25 +00:00
const validQuantity = Quantity.create({ amount: 5 });
2024-04-23 15:29:38 +00:00
expect(validQuantity.isSuccess).toBe(true);
2024-07-15 13:58:12 +00:00
expect(validQuantity.object.toNumber()).toBe(0.05);
2024-04-23 15:29:38 +00:00
});
it("Should create a valid quantity (string)", () => {
2024-06-19 16:54:25 +00:00
const validQuantity = Quantity.create({ amount: "99" });
2024-04-23 15:29:38 +00:00
expect(validQuantity.isSuccess).toBe(true);
2024-07-15 13:58:12 +00:00
expect(validQuantity.object.toNumber()).toBe(0.99);
2024-04-23 15:29:38 +00:00
});
it("Should create a valid quantity (null)", () => {
2024-06-19 16:54:25 +00:00
const validQuantity = Quantity.create({ amount: null });
2024-04-23 15:29:38 +00:00
expect(validQuantity.isSuccess).toBe(true);
expect(validQuantity.object.isNull).toBeTruthy();
});
// Prueba la creación de una cantidad nula.
2024-06-19 16:54:25 +00:00
it("Should create a default quantity", () => {
const nullQuantity = Quantity.create();
2024-04-23 15:29:38 +00:00
expect(nullQuantity.isSuccess).toBe(true);
2024-07-15 13:58:12 +00:00
expect(nullQuantity.object.amount).toBe(0);
expect(nullQuantity.object.scale).toBe(2);
2024-04-23 15:29:38 +00:00
});
// Prueba la creación de una cantidad válida a partir de una cadena.
it("Should create a valid quantity from string", () => {
2024-07-15 13:58:12 +00:00
const validQuantityFromString = Quantity.create({ amount: "318" });
2024-04-23 15:29:38 +00:00
expect(validQuantityFromString.isSuccess).toBe(true);
2024-07-15 13:58:12 +00:00
expect(validQuantityFromString.object.toNumber()).toBe(3.18);
2024-04-23 15:29:38 +00:00
});
2024-06-19 16:54:25 +00:00
// Prueba la creación de una cantidad válida a partir de una cadena con decimales.
it("Should create a valid quantity from string", () => {
2024-07-15 13:58:12 +00:00
const validQuantityFromString = Quantity.create({ amount: "123456", scale: 2 });
2024-06-19 16:54:25 +00:00
expect(validQuantityFromString.isSuccess).toBe(true);
expect(validQuantityFromString.object.toNumber()).toBe(1234.56);
});
2024-04-23 15:29:38 +00:00
// Prueba la creación de una cantidad con una cadena no válida.
it("Should fail to create quantity from invalid string", () => {
2024-06-19 16:54:25 +00:00
const invalidQuantityFromString = Quantity.create({ amount: "invalid" });
2024-04-23 15:29:38 +00:00
expect(invalidQuantityFromString.isFailure).toBe(true);
});
// Prueba la conversión a número.
it("Should convert to number", () => {
2024-07-15 13:58:12 +00:00
const quantity = Quantity.create({ amount: 700 }).object;
2024-04-23 15:29:38 +00:00
const result = quantity.toNumber();
expect(result).toBe(7);
});
// Prueba la conversión a cadena.
it("Should convert to string", () => {
2024-07-15 13:58:12 +00:00
const quantity = Quantity.create({ amount: 1500 }).object;
2024-04-23 15:29:38 +00:00
const result = quantity.toString();
2024-07-16 15:55:14 +00:00
expect(result).toBe("15.00");
2024-04-23 15:29:38 +00:00
});
// Prueba la operación de incremento.
2024-06-19 16:54:25 +00:00
it("Should increment", () => {
2024-07-15 13:58:12 +00:00
const quantity = Quantity.create({ amount: 5, scale: 2 }).object;
2024-06-19 16:54:25 +00:00
const incrementedQuantity = quantity.increment().object;
2024-07-15 13:58:12 +00:00
expect(incrementedQuantity.toNumber()).toBe(0.06);
2024-06-19 16:54:25 +00:00
});
2024-04-23 15:29:38 +00:00
it("Should increment quantity", () => {
2024-06-19 16:54:25 +00:00
const firstQ = Quantity.create({ amount: -5 }).object;
const secountQ = Quantity.create({ amount: 105 }).object;
const incrementedQuantity = firstQ.increment(secountQ).object;
2024-07-15 13:58:12 +00:00
expect(incrementedQuantity.toNumber()).toBe(1.0);
2024-06-19 16:54:25 +00:00
});
// Prueba la operación de decremento.
it("Should decrement", () => {
2024-07-15 13:58:12 +00:00
const quantity = Quantity.create({ amount: 0, scale: 0 }).object;
2024-06-19 16:54:25 +00:00
const decrementedQuantity = quantity.decrement().object;
2024-04-23 15:29:38 +00:00
2024-06-19 16:54:25 +00:00
expect(decrementedQuantity.toNumber()).toBe(-1);
2024-04-23 15:29:38 +00:00
});
// Prueba la operación de decremento.
it("Should decrement quantity", () => {
2024-07-15 13:58:12 +00:00
const quantity = Quantity.create({ amount: 100, scale: 1 }).object;
const decrementedQuantity = quantity.decrement(
Quantity.create({ amount: 1100, scale: 1 }).object
).object;
2024-04-23 15:29:38 +00:00
2024-06-19 16:54:25 +00:00
expect(decrementedQuantity.toNumber()).toBe(-100);
2024-04-23 15:29:38 +00:00
});
});