From 346e1a1de48230d680baf9e50971066fd1c86e72 Mon Sep 17 00:00:00 2001 From: Jackson Morgan Date: Tue, 16 Jul 2024 23:40:51 -0400 Subject: [PATCH] Fix for multiple removed items cluttering a transaction --- packages/solid/test/Integration.test.ts | 2 +- .../src/mergeDatasetChanges.ts | 2 ++ .../test/TransactionalDataset.test.ts | 22 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/solid/test/Integration.test.ts b/packages/solid/test/Integration.test.ts index 4d97db8..2c41548 100644 --- a/packages/solid/test/Integration.test.ts +++ b/packages/solid/test/Integration.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/", ); }); diff --git a/packages/subscribable-dataset/src/mergeDatasetChanges.ts b/packages/subscribable-dataset/src/mergeDatasetChanges.ts index f62cade..2904a3a 100644 --- a/packages/subscribable-dataset/src/mergeDatasetChanges.ts +++ b/packages/subscribable-dataset/src/mergeDatasetChanges.ts @@ -40,6 +40,8 @@ export function mergeDatasetChanges( if (changesIntersection && changesIntersection.size > 0) { originalChange.added = originalChange.added?.difference(changesIntersection); + originalChange.removed = + originalChange.removed.difference(changesIntersection); } } diff --git a/packages/subscribable-dataset/test/TransactionalDataset.test.ts b/packages/subscribable-dataset/test/TransactionalDataset.test.ts index 903feef..f1741e6 100644 --- a/packages/subscribable-dataset/test/TransactionalDataset.test.ts +++ b/packages/subscribable-dataset/test/TransactionalDataset.test.ts @@ -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"); + }); });