From 580fd39af11422293456542c99d6a44623490eac Mon Sep 17 00:00:00 2001 From: Maxim Van de Wynckel Date: Sun, 27 Mar 2022 20:18:09 +0200 Subject: [PATCH] fix: removed blank node filter from internal changelog to allow things with blank nodes --- src/thing/thing.internal.ts | 32 +++++++++++++++----------------- src/thing/thing.test.ts | 23 +++++++++++++++++++++++ 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/thing/thing.internal.ts b/src/thing/thing.internal.ts index 4de6cc5ffc..3142a6f667 100644 --- a/src/thing/thing.internal.ts +++ b/src/thing/thing.internal.ts @@ -117,23 +117,21 @@ export function internal_addAdditionsToChangeLog( : /* istanbul ignore next: This function always gets called after addDeletionsToChangeLog, so the ChangeLog always already exists in tests: */ { additions: [], deletions: [] }; - const [newAdditions, newDeletions] = additions - .filter((addition) => !containsBlankNode(addition)) - .reduce( - ([additionsAcc, deletionsAcc], addition) => { - const existingDeletion = deletionsAcc.find((deletion) => - deletion.equals(addition) - ); - if (typeof existingDeletion !== "undefined") { - return [ - additionsAcc, - deletionsAcc.filter((deletion) => !deletion.equals(addition)), - ]; - } - return [additionsAcc.concat(addition), deletionsAcc]; - }, - [changeLog.additions, changeLog.deletions] - ); + const [newAdditions, newDeletions] = additions.reduce( + ([additionsAcc, deletionsAcc], addition) => { + const existingDeletion = deletionsAcc.find((deletion) => + deletion.equals(addition) + ); + if (typeof existingDeletion !== "undefined") { + return [ + additionsAcc, + deletionsAcc.filter((deletion) => !deletion.equals(addition)), + ]; + } + return [additionsAcc.concat(addition), deletionsAcc]; + }, + [changeLog.additions, changeLog.deletions] + ); return freeze({ ...solidDataset, diff --git a/src/thing/thing.test.ts b/src/thing/thing.test.ts index 2d80e7a93d..d44bfb237c 100644 --- a/src/thing/thing.test.ts +++ b/src/thing/thing.test.ts @@ -407,6 +407,7 @@ describe("getThingAll", () => { describe("setThing", () => { const mockThing1Iri = "https://some.vocab/subject1"; const mockThing2Iri = "https://some.vocab/subject2"; + const mockThing3Iri = "https://some.vocab/subject3"; const mockThing1: ThingPersisted = { type: "Subject", url: mockThing1Iri, @@ -425,6 +426,22 @@ describe("setThing", () => { }, }, }; + const mockThing3: ThingPersisted = { + type: "Subject", + url: mockThing3Iri, + predicates: { + ["https://arbitrary.vocab/predicate"]: { + namedNodes: ["https://arbitrary.vocab/object"], + blankNodes: [ + { + ["https://arbitrary.vocab/blanknode/predicate"]: { + namedNodes: ["https://arbitrary.vocab/blanknode/object"], + }, + }, + ], + }, + }, + }; function getMockDataset(things = [mockThing1, mockThing2]): SolidDataset { const solidDataset: SolidDataset = { type: "Dataset", @@ -576,6 +593,12 @@ describe("setThing", () => { getThing(updatedDataset, "https://some.pod/resource#subjectName") ).toStrictEqual(originalThing); }); + + it("will create blank nodes including in a Thing", () => { + const dataset = getMockDataset([]); + const updatedDataset = setThing(dataset, mockThing3); + expect(updatedDataset.internal_changeLog.additions).not.toHaveLength(1); + }); }); describe("removeThing", () => {