113 lines
4.1 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|