From 298ed19f6a83f4250e8487573809ac1fd715bc81 Mon Sep 17 00:00:00 2001 From: Jackson Morgan Date: Mon, 2 Dec 2024 14:06:22 -0500 Subject: [PATCH] Added test for overlapping scope cardinality --- .../test/ContextUtil.test.ts | 10 +++---- .../test/jsonldDatasetProxy.test.ts | 26 +++++++++++++++++++ .../test/scopedExampleData.ts | 24 ++++++++--------- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/packages/jsonld-dataset-proxy/test/ContextUtil.test.ts b/packages/jsonld-dataset-proxy/test/ContextUtil.test.ts index c1b95a1..5b8bb39 100644 --- a/packages/jsonld-dataset-proxy/test/ContextUtil.test.ts +++ b/packages/jsonld-dataset-proxy/test/ContextUtil.test.ts @@ -31,12 +31,12 @@ describe("ContextUtil", () => { const contextUtil = new ContextUtil(scopedContext); expect( contextUtil.keyToIri("element", [ - namedNode("https://example.com/Bender"), + namedNode("http://example.com/Bender"), ]), - ).toBe("https://example.com/element"); + ).toBe("http://example.com/element"); expect( - contextUtil.iriToKey("https://example.com/element", [ - namedNode("https://example.com/Bender"), + contextUtil.iriToKey("http://example.com/element", [ + namedNode("http://example.com/Bender"), ]), ).toBe("element"); }); @@ -58,7 +58,7 @@ describe("ContextUtil", () => { const contextUtil = new ContextUtil(scopedContext); expect( contextUtil.isArray("element", [ - namedNode("https://example.com/Avatar"), + namedNode("http://example.com/Avatar"), ]), ).toBe(true); }); diff --git a/packages/jsonld-dataset-proxy/test/jsonldDatasetProxy.test.ts b/packages/jsonld-dataset-proxy/test/jsonldDatasetProxy.test.ts index e60996c..1109449 100644 --- a/packages/jsonld-dataset-proxy/test/jsonldDatasetProxy.test.ts +++ b/packages/jsonld-dataset-proxy/test/jsonldDatasetProxy.test.ts @@ -30,6 +30,12 @@ import { namedNode, quad, literal, defaultGraph } from "@rdfjs/data-model"; import type { Dataset, NamedNode } from "@rdfjs/types"; import type { ContextDefinition } from "jsonld"; import type { LdoJsonldContext } from "../src/LdoJsonldContext"; +import { + scopedContext, + scopedData, + type Avatar, + type Bender, +} from "./scopedExampleData"; const testJsonldDatasetProxy = (patientContext: LdoJsonldContext) => () => { async function getLoadedDataset(): Promise< @@ -165,6 +171,19 @@ const testJsonldDatasetProxy = (patientContext: LdoJsonldContext) => () => { ]; } + async function getScopedDataset(): Promise< + [Dataset, Bender, Avatar, JsonldDatasetProxyBuilder] + > { + const dataset = await serializedToDataset(scopedData); + const builder = await jsonldDatasetProxy(dataset, scopedContext); + return [ + dataset, + builder.fromSubject(namedNode("http://example.com/Katara")), + builder.fromSubject(namedNode("http://example.com/Aang")), + builder, + ]; + } + describe("read", () => { it("retreives a primitive", async () => { const [, observation] = await getLoadedDataset(); @@ -409,6 +428,13 @@ const testJsonldDatasetProxy = (patientContext: LdoJsonldContext) => () => { const [, observation] = await getLoadedDataset(); expect(observation["@context"]).toEqual(patientContext); }); + + it("reads an array for collections, but a var for non collections", async () => { + const [, bender, avatar] = await getScopedDataset(); + expect(avatar.element[0]["@id"]).toBe("http://example.com/Air"); + expect(avatar.element[1]["@id"]).toBe("http://example.com/Water"); + expect(bender.element["@id"]).toBe("http://example.com/Water"); + }); }); describe("write", () => { diff --git a/packages/jsonld-dataset-proxy/test/scopedExampleData.ts b/packages/jsonld-dataset-proxy/test/scopedExampleData.ts index 4ef8ada..912d36a 100644 --- a/packages/jsonld-dataset-proxy/test/scopedExampleData.ts +++ b/packages/jsonld-dataset-proxy/test/scopedExampleData.ts @@ -43,53 +43,53 @@ export type Element = export const scopedContext: LdoJsonldContext = { Bender: { - "@id": "https://example.com/Bender", + "@id": "http://example.com/Bender", "@context": { type: { "@id": "@type", }, name: { - "@id": "https://example.com/name", + "@id": "http://example.com/name", }, element: { - "@id": "https://example.com/element", + "@id": "http://example.com/element", }, friend: { - "@id": "https://example.com/friend", + "@id": "http://example.com/friend", "@isCollection": true, }, }, }, Avatar: { - "@id": "https://example.com/Avatar", + "@id": "http://example.com/Avatar", "@context": { type: { "@id": "@type", }, name: { - "@id": "https://example.com/name", + "@id": "http://example.com/name", }, element: { - "@id": "https://example.com/element", + "@id": "http://example.com/element", "@isCollection": true, }, friend: { - "@id": "https://example.com/friend", + "@id": "http://example.com/friend", "@isCollection": true, }, }, }, NonBender: { - "@id": "https://example.com/NonBender", + "@id": "http://example.com/NonBender", "@context": { type: { "@id": "@type", }, name: { - "@id": "https://example.com/name", + "@id": "http://example.com/name", }, friend: { - "@id": "https://example.com/friend", + "@id": "http://example.com/friend", "@isCollection": true, }, }, @@ -97,7 +97,7 @@ export const scopedContext: LdoJsonldContext = { }; export const scopedData = ` -@prefix example: . +@prefix example: . @prefix fhir: . @prefix xsd: . @prefix rdf: .