import assert from "node:assert/strict"; import { test } from "node:test"; import { UniqueID } from "@repo/rdx-ddd"; import { captureGlobalResourceSpecification } from "../application/global-resource-specification"; import { Resource } from "./resource.aggregate"; import { scopeFixture } from "./resource-scope.fixture"; import { ResourceValues } from "./value-objects/resource-values.vo"; const recordedAt = "2026-10-24T10:00:00.000Z"; test("global: crear exige UUID v7 y conserva identidad y propietario en edición e idempotencia", () => { const { local, actor } = scopeFixture(); const id = UniqueID.generateNewID(); const created = Resource.createGlobal(id, local.specification, local.values, actor, recordedAt); assert.ok(created.isSuccess); assert.equal(created.data.scope, "global"); assert.equal(created.data.companyId, null); assert.ok(created.data.id.equals(id)); assert.equal(created.data.history.length, 1); const repeated = created.data.updateGlobal(local.values, actor, recordedAt); assert.ok(repeated.isSuccess); assert.equal(repeated.data, created.data); const values = ResourceValues.create( { ...local.values.toPrimitive(), name: "Producto distinto" }, local.specification ); assert.ok(values.isSuccess); const changed = created.data.updateGlobal(values.data, actor, recordedAt); assert.ok(changed.isSuccess); assert.ok(changed.data.id.equals(id)); assert.equal(changed.data.history.length, 2); assert.equal(created.data.history.length, 1); assert.equal(changed.data.history[0], created.data.history[0]); assert.equal(local.updateGlobal(values.data, actor, recordedAt).isSuccess, false); const v4 = UniqueID.create("39820434-230b-4d31-b46e-ef12d2fe849a"); assert.ok(v4.isSuccess); assert.equal( Resource.createGlobal(v4.data, local.specification, local.values, actor, recordedAt).isSuccess, false ); }); test("global: captura por stockKey, sin depender del nombre traducido de la plantilla", () => { const { catalog, local } = scopeFixture(); const eligible = captureGlobalResourceSpecification( catalog, local.values.toPrimitive().templateId, { existing: false } ); assert.ok(eligible.isSuccess); assert.equal(eligible.data.toPrimitive().templateName, "Nombre traducido y modificado"); assert.equal( captureGlobalResourceSpecification(catalog, UniqueID.generateNewID().toPrimitive(), { existing: false, }).isSuccess, false ); });