import * as _ from "lodash"; import { NodeCreation, NodeDeletion, } from "./primitive_delta"; import { CompositeLevel, } from "./composite_delta"; import { mockUuid, assert, } from "./test_helpers"; describe("Composite delta", () => { it("Dependency", () => { const getId = mockUuid(); const level = new CompositeLevel(); const nodeCreation = new NodeCreation(getId()); const composite1 = level.createComposite([nodeCreation]); assert(_.isEqual(composite1.getDependencies(), []), "expected composite1 to have no dependencies"); const nodeDeletion = new NodeDeletion(nodeCreation, [], []); const nodeCreation2 = new NodeCreation(getId()); const composite2 = level.createComposite([nodeDeletion, nodeCreation2]); assert(_.isEqual(composite2.getDependencies(), [composite1]), "expected composite2 to depend on composite 1"); }); it("Conflict", () => { const getId = mockUuid(); const level = new CompositeLevel(); const nodeCreation = new NodeCreation(getId()); const compositeCreate = level.createComposite([nodeCreation]); const nodeDeletion1 = new NodeDeletion(nodeCreation, [], []); const compositeDelete1 = level.createComposite([nodeDeletion1]); assert(_.isEqual(compositeDelete1.getConflicts(), []), "there should not yet be a conflict") const nodeDeletion2 = new NodeDeletion(nodeCreation, [], []); const compositeDelete2 = level.createComposite([nodeDeletion2]); assert(_.isEqual(compositeDelete1.getConflicts(), [compositeDelete2]), "expected compositeDelete1 to conflict with compositeDelete2"); assert(_.isEqual(compositeDelete2.getConflicts(), [compositeDelete1]), "expected compositeDelete1 to conflict with compositeDelete2"); }); // This was added after I found a bug: it("Dependency within composite", () => { const getId = mockUuid(); const level = new CompositeLevel(); const nodeCreation = new NodeCreation(getId()); const nodeDeletion = new NodeDeletion(nodeCreation, [], []); const composite = level.createComposite([nodeCreation, nodeDeletion]); assert(_.isEqual(composite.getDependencies(), []), "expected composite to have no dependencies"); assert(_.isEqual(composite.getConflicts(), []), "expected composite to have no conflicts"); }); });