Added test for overlapping scope cardinality

main
Jackson Morgan 9 months ago
parent 6047c3f1e4
commit 298ed19f6a
  1. 10
      packages/jsonld-dataset-proxy/test/ContextUtil.test.ts
  2. 26
      packages/jsonld-dataset-proxy/test/jsonldDatasetProxy.test.ts
  3. 24
      packages/jsonld-dataset-proxy/test/scopedExampleData.ts

@ -31,12 +31,12 @@ describe("ContextUtil", () => {
const contextUtil = new ContextUtil(scopedContext); const contextUtil = new ContextUtil(scopedContext);
expect( expect(
contextUtil.keyToIri("element", [ contextUtil.keyToIri("element", [
namedNode("https://example.com/Bender"), namedNode("http://example.com/Bender"),
]), ]),
).toBe("https://example.com/element"); ).toBe("http://example.com/element");
expect( expect(
contextUtil.iriToKey("https://example.com/element", [ contextUtil.iriToKey("http://example.com/element", [
namedNode("https://example.com/Bender"), namedNode("http://example.com/Bender"),
]), ]),
).toBe("element"); ).toBe("element");
}); });
@ -58,7 +58,7 @@ describe("ContextUtil", () => {
const contextUtil = new ContextUtil(scopedContext); const contextUtil = new ContextUtil(scopedContext);
expect( expect(
contextUtil.isArray("element", [ contextUtil.isArray("element", [
namedNode("https://example.com/Avatar"), namedNode("http://example.com/Avatar"),
]), ]),
).toBe(true); ).toBe(true);
}); });

@ -30,6 +30,12 @@ import { namedNode, quad, literal, defaultGraph } from "@rdfjs/data-model";
import type { Dataset, NamedNode } from "@rdfjs/types"; import type { Dataset, NamedNode } from "@rdfjs/types";
import type { ContextDefinition } from "jsonld"; import type { ContextDefinition } from "jsonld";
import type { LdoJsonldContext } from "../src/LdoJsonldContext"; import type { LdoJsonldContext } from "../src/LdoJsonldContext";
import {
scopedContext,
scopedData,
type Avatar,
type Bender,
} from "./scopedExampleData";
const testJsonldDatasetProxy = (patientContext: LdoJsonldContext) => () => { const testJsonldDatasetProxy = (patientContext: LdoJsonldContext) => () => {
async function getLoadedDataset(): Promise< 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", () => { describe("read", () => {
it("retreives a primitive", async () => { it("retreives a primitive", async () => {
const [, observation] = await getLoadedDataset(); const [, observation] = await getLoadedDataset();
@ -409,6 +428,13 @@ const testJsonldDatasetProxy = (patientContext: LdoJsonldContext) => () => {
const [, observation] = await getLoadedDataset(); const [, observation] = await getLoadedDataset();
expect(observation["@context"]).toEqual(patientContext); 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", () => { describe("write", () => {

@ -43,53 +43,53 @@ export type Element =
export const scopedContext: LdoJsonldContext = { export const scopedContext: LdoJsonldContext = {
Bender: { Bender: {
"@id": "https://example.com/Bender", "@id": "http://example.com/Bender",
"@context": { "@context": {
type: { type: {
"@id": "@type", "@id": "@type",
}, },
name: { name: {
"@id": "https://example.com/name", "@id": "http://example.com/name",
}, },
element: { element: {
"@id": "https://example.com/element", "@id": "http://example.com/element",
}, },
friend: { friend: {
"@id": "https://example.com/friend", "@id": "http://example.com/friend",
"@isCollection": true, "@isCollection": true,
}, },
}, },
}, },
Avatar: { Avatar: {
"@id": "https://example.com/Avatar", "@id": "http://example.com/Avatar",
"@context": { "@context": {
type: { type: {
"@id": "@type", "@id": "@type",
}, },
name: { name: {
"@id": "https://example.com/name", "@id": "http://example.com/name",
}, },
element: { element: {
"@id": "https://example.com/element", "@id": "http://example.com/element",
"@isCollection": true, "@isCollection": true,
}, },
friend: { friend: {
"@id": "https://example.com/friend", "@id": "http://example.com/friend",
"@isCollection": true, "@isCollection": true,
}, },
}, },
}, },
NonBender: { NonBender: {
"@id": "https://example.com/NonBender", "@id": "http://example.com/NonBender",
"@context": { "@context": {
type: { type: {
"@id": "@type", "@id": "@type",
}, },
name: { name: {
"@id": "https://example.com/name", "@id": "http://example.com/name",
}, },
friend: { friend: {
"@id": "https://example.com/friend", "@id": "http://example.com/friend",
"@isCollection": true, "@isCollection": true,
}, },
}, },
@ -97,7 +97,7 @@ export const scopedContext: LdoJsonldContext = {
}; };
export const scopedData = ` export const scopedData = `
@prefix example: <https://example.com/> . @prefix example: <http://example.com/> .
@prefix fhir: <http://hl7.org/fhir/> . @prefix fhir: <http://hl7.org/fhir/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

Loading…
Cancel
Save