Fix for multiple removed items cluttering a transaction

main
Jackson Morgan 1 year ago
parent d301cb5783
commit 346e1a1de4
  1. 2
      packages/solid/test/Integration.test.ts
  2. 2
      packages/subscribable-dataset/src/mergeDatasetChanges.ts
  3. 22
      packages/subscribable-dataset/test/TransactionalDataset.test.ts

@ -688,7 +688,7 @@ describe("Integration", () => {
expect(realResult.storageContainers[0].uri).toBe(
"https://example.com/A/",
);
expect(realResult.storageContainers[0].uri).toBe(
expect(realResult.storageContainers[1].uri).toBe(
"https://example.com/B/",
);
});

@ -40,6 +40,8 @@ export function mergeDatasetChanges<InAndOutQuad extends BaseQuad>(
if (changesIntersection && changesIntersection.size > 0) {
originalChange.added =
originalChange.added?.difference(changesIntersection);
originalChange.removed =
originalChange.removed.difference(changesIntersection);
}
}

@ -358,4 +358,26 @@ describe("TransactionDataset", () => {
expect(datasetChanges.added?.size).toBe(1);
expect(datasetChanges.removed).toBe(undefined);
});
it("removes added triples from changes instead of simply adding them", () => {
transactionalDataset.delete(tomNameQuad);
const nameQuad2 = quad(
namedNode("http://example.org/cartoons#Tom"),
namedNode("http://example.org/cartoons#name"),
literal("Toma"),
);
transactionalDataset.add(nameQuad2);
transactionalDataset.delete(nameQuad2);
const nameQuad3 = quad(
namedNode("http://example.org/cartoons#Tom"),
namedNode("http://example.org/cartoons#name"),
literal("Tomas"),
);
transactionalDataset.add(nameQuad3);
const datasetChanges = transactionalDataset.getChanges();
expect(datasetChanges.added?.size).toBe(1);
expect(datasetChanges.added?.toArray()[0].object.value).toBe("Tomas");
expect(datasetChanges.removed?.size).toBe(1);
expect(datasetChanges.removed?.toArray()[0].object.value).toBe("Tom");
});
});

Loading…
Cancel
Save