Successful simple link traversal

main
Jackson Morgan 4 months ago
parent fabd0c0c58
commit 0b19f695b5
  1. 6
      packages/connected/src/ConnectedLdoDataset.ts
  2. 15
      packages/connected/src/linkTraversal/exploreLinks.ts
  3. 20
      packages/connected/test/LinkTraversalData.ts
  4. 58
      packages/connected/test/LinkTraversalIntegration.test.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<Plugins[number], string>[] {
console.log("IM IN HERE");
console.log(this.resourceMap);
return Array.from(this.resourceMap.values());
}

@ -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,
);
}
}),
);

@ -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: <http://xmlns.com/foaf/0.1/> .
@prefix : <#> .
@ -27,7 +29,7 @@ export const linkTraversalData: ResourceInfo = {
{
slug: "otherProfile.ttl",
isContainer: false,
mimeType: "text/ttl",
mimeType: "text/turtle",
data: `
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix : <#> .
@ -38,5 +40,19 @@ export const linkTraversalData: ResourceInfo = {
foaf:knows <http://localhost:3005/test-container/mainProfile.ttl#me> .
`,
},
{
slug: "thirdProfile.ttl",
isContainer: false,
mimeType: "text/turtle",
data: `
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix : <#> .
:me a foaf:Person ;
foaf:name "Third User" ;
foaf:mbox <mailto:other@example.org> ;
foaf:knows <http://localhost:3005/test-container/mainProfile.ttl#me> .
`,
},
],
};

@ -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");
});
});

Loading…
Cancel
Save