diff --git a/packages/connected/src/ConnectedLdoDataset.ts b/packages/connected/src/ConnectedLdoDataset.ts index 2bcae86..ffc2856 100644 --- a/packages/connected/src/ConnectedLdoDataset.ts +++ b/packages/connected/src/ConnectedLdoDataset.ts @@ -153,10 +153,6 @@ export class ConnectedLdoDataset< if (!plugin) return new InvalidIdentifierResource(uri) as any; const normalizedUri = plugin.normalizeUri?.(uri) ?? uri; - console.log("plugin", plugin); - console.log("func", plugin.normalizeUri); - console.log(normalizedUri); - let resource = this.resourceMap.get(normalizedUri); if (!resource) { resource = plugin.getResource(uri, this.context); @@ -167,8 +163,6 @@ export class ConnectedLdoDataset< } getResources(): GetResourceReturnType[] { - console.log("IM IN HERE"); - console.log(this.resourceMap); return Array.from(this.resourceMap.values()); } diff --git a/packages/connected/src/linkTraversal/exploreLinks.ts b/packages/connected/src/linkTraversal/exploreLinks.ts index 9e9500c..d42fa86 100644 --- a/packages/connected/src/linkTraversal/exploreLinks.ts +++ b/packages/connected/src/linkTraversal/exploreLinks.ts @@ -90,14 +90,15 @@ export async function exploreLinksRecursive< ); }), ); + } else { + await exploreLinksRecursive( + dataset, + ldObject[queryKey], + queryValue, + fetchedDuringThisExploration, + options, + ); } - await exploreLinksRecursive( - dataset, - ldObject[queryKey], - queryValue, - fetchedDuringThisExploration, - options, - ); } }), ); diff --git a/packages/connected/test/LinkTraversalData.ts b/packages/connected/test/LinkTraversalData.ts index 0377b2a..fff1901 100644 --- a/packages/connected/test/LinkTraversalData.ts +++ b/packages/connected/test/LinkTraversalData.ts @@ -5,6 +5,8 @@ export const MAIN_PROFILE_URI = `${BASE_CONTAINER}mainProfile.ttl`; export const MAIN_PROFILE_SUBJECT = `${MAIN_PROFILE_URI}#me`; export const OTHER_PROFILE_URI = `${BASE_CONTAINER}otherProfile.ttl`; export const OTHER_PROFILE_SUBJECT = `${OTHER_PROFILE_URI}#me`; +export const THIRD_PROFILE_URI = `${BASE_CONTAINER}otherProfile.ttl`; +export const THIRD_PROFILE_SUBJECT = `${THIRD_PROFILE_URI}#me`; export const linkTraversalData: ResourceInfo = { slug: "test-container/", @@ -13,7 +15,7 @@ export const linkTraversalData: ResourceInfo = { { slug: "mainProfile.ttl", isContainer: false, - mimeType: "text/ttl", + mimeType: "text/turtle", data: ` @prefix foaf: . @prefix : <#> . @@ -27,7 +29,7 @@ export const linkTraversalData: ResourceInfo = { { slug: "otherProfile.ttl", isContainer: false, - mimeType: "text/ttl", + mimeType: "text/turtle", data: ` @prefix foaf: . @prefix : <#> . @@ -38,5 +40,19 @@ export const linkTraversalData: ResourceInfo = { foaf:knows . `, }, + { + slug: "thirdProfile.ttl", + isContainer: false, + mimeType: "text/turtle", + data: ` + @prefix foaf: . + @prefix : <#> . + + :me a foaf:Person ; + foaf:name "Third User" ; + foaf:mbox ; + foaf:knows . + `, + }, ], }; diff --git a/packages/connected/test/LinkTraversalIntegration.test.ts b/packages/connected/test/LinkTraversalIntegration.test.ts index 1669b13..4b82adb 100644 --- a/packages/connected/test/LinkTraversalIntegration.test.ts +++ b/packages/connected/test/LinkTraversalIntegration.test.ts @@ -1,5 +1,5 @@ import type { ConnectedLdoDataset } from "../src/ConnectedLdoDataset"; -import { createConnectedLdoDataset } from "../src"; +import { changeData, commitData, createConnectedLdoDataset } from "../src"; import { solidConnectedPlugin, type SolidConnectedPlugin, @@ -10,6 +10,8 @@ import { MAIN_PROFILE_SUBJECT, MAIN_PROFILE_URI, OTHER_PROFILE_URI, + THIRD_PROFILE_SUBJECT, + THIRD_PROFILE_URI, } from "./LinkTraversalData"; import { SolidProfileShapeShapeType } from "./.ldo/solidProfile.shapeTypes"; @@ -41,11 +43,61 @@ describe("Link Traversal", () => { const resourceUris = solidLdoDataset .getResources() .map((resource) => resource.uri); - console.log(resourceUris); - expect(resourceUris.length).toBe(2); + expect(resourceUris.length).toBe(3); expect(resourceUris).toContain(MAIN_PROFILE_URI); expect(resourceUris).toContain(OTHER_PROFILE_URI); expect(data.name).toBe("Main User"); expect(data.knows?.toArray()[0].name).toBe("Other User"); }); + + it("handles subscriptions if data changes", async () => { + const mainProfileResource = solidLdoDataset.getResource(MAIN_PROFILE_URI); + await solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .startLinkQuery(mainProfileResource, MAIN_PROFILE_SUBJECT, { + name: true, + knows: { + name: true, + }, + }) + .subscribe(); + + // Should have regular information + let mainProfile = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .fromSubject(MAIN_PROFILE_SUBJECT); + let resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(3); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(mainProfile.name).toBe("Main User"); + expect(mainProfile.knows?.size).toBe(1); + expect(mainProfile.knows?.toArray()[0].name).toBe("Other User"); + + // Update to include a new document + const cMainProfile = changeData(mainProfile, mainProfileResource); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + cMainProfile.knows?.add({ "@id": THIRD_PROFILE_SUBJECT }); + await commitData(cMainProfile); + + // After the data is committed, the third profile should be present + mainProfile = solidLdoDataset + .usingType(SolidProfileShapeShapeType) + .fromSubject(MAIN_PROFILE_SUBJECT); + resourceUris = solidLdoDataset + .getResources() + .map((resource) => resource.uri); + expect(resourceUris.length).toBe(4); + expect(resourceUris).toContain(MAIN_PROFILE_URI); + expect(resourceUris).toContain(OTHER_PROFILE_URI); + expect(resourceUris).toContain(THIRD_PROFILE_URI); + expect(mainProfile.name).toBe("Main User"); + expect(mainProfile.knows?.size).toBe(2); + const knowNames = mainProfile.knows?.map((knowsPerson) => knowsPerson.name); + expect(knowNames).toContain("Other User"); + expect(knowNames).toContain("Third User"); + }); });