UNPKG

@dasch-swiss/dsp-js

Version:

JavaScript library that handles API requests to Knora

716 lines 50.5 kB
import { MockAjaxCall } from "../../../../test/mockajaxcall"; import { KnoraApiConfig } from "../../../knora-api-config"; import { KnoraApiConnection } from "../../../knora-api-connection"; import { Constants } from "../../../models/v2/Constants"; import { Cardinality } from "../../../models/v2/ontologies/class-definition"; import { CreateOntology } from "../../../models/v2/ontologies/create/create-ontology"; import { CreateResourceClass } from "../../../models/v2/ontologies/create/create-resource-class"; import { CreateResourceProperty } from "../../../models/v2/ontologies/create/create-resource-property"; import { DeleteOntology } from "../../../models/v2/ontologies/delete/delete-ontology"; import { DeleteResourceClass } from "../../../models/v2/ontologies/delete/delete-resource-class"; import { DeleteResourceProperty } from "../../../models/v2/ontologies/delete/delete-resource-property"; import { ResourceClassDefinition } from "../../../models/v2/ontologies/resource-class-definition"; import { ResourcePropertyDefinition } from "../../../models/v2/ontologies/resource-property-definition"; import { StandoffClassDefinition } from "../../../models/v2/ontologies/standoff-class-definition"; import { SystemPropertyDefinition } from "../../../models/v2/ontologies/system-property-definition"; import { UpdateOntology } from "../../../models/v2/ontologies/update/update-ontology"; import { UpdateOntologyMetadata } from "../../../models/v2/ontologies/update/update-ontology-metadata"; import { UpdateResourceClassCardinality } from "../../../models/v2/ontologies/update/update-resource-class-cardinality"; import { UpdateResourceClassComment } from "../../../models/v2/ontologies/update/update-resource-class-comment"; import { UpdateResourceClassLabel } from "../../../models/v2/ontologies/update/update-resource-class-label"; import { UpdateResourcePropertyComment } from "../../../models/v2/ontologies/update/update-resource-property-comment"; import { UpdateResourcePropertyLabel } from "../../../models/v2/ontologies/update/update-resource-property-label"; import { StringLiteralV2 } from "../../../models/v2/string-literal-v2"; describe("OntologiesEndpoint", function () { var config = new KnoraApiConfig("http", "0.0.0.0", 3333, undefined, undefined, true); var knoraApiConnection = new KnoraApiConnection(config); beforeEach(function () { jasmine.Ajax.install(); }); afterEach(function () { jasmine.Ajax.uninstall(); }); describe("Method getOntology", function () { it("should return an ontology", function (done) { knoraApiConnection.v2.onto.getOntology("http://api.knora.org/ontology/knora-api/v2").subscribe(function (response) { expect(response.id).toEqual("http://api.knora.org/ontology/knora-api/v2"); expect(response.label).toEqual("The knora-api ontology in the complex schema"); expect(response.dependsOnOntologies.size).toEqual(0); expect(response.classes["http://api.knora.org/ontology/knora-api/v2#Annotation"] instanceof ResourceClassDefinition).toBeTruthy(); expect(response.classes["http://api.knora.org/ontology/knora-api/v2#Annotation"].id).toEqual("http://api.knora.org/ontology/knora-api/v2#Annotation"); expect(response.classes["http://api.knora.org/ontology/knora-api/v2#Annotation"].label).toEqual("Annotation"); expect(response.properties["http://api.knora.org/ontology/knora-api/v2#arkUrl"] instanceof SystemPropertyDefinition).toBeTruthy(); expect(response.properties["http://api.knora.org/ontology/knora-api/v2#arkUrl"].id).toEqual("http://api.knora.org/ontology/knora-api/v2#arkUrl"); expect(response.properties["http://api.knora.org/ontology/knora-api/v2#arkUrl"].label).toEqual("ARK URL"); expect(response.properties["http://api.knora.org/ontology/knora-api/v2#hasValue"] instanceof ResourcePropertyDefinition).toBeTruthy(); expect(response.properties["http://api.knora.org/ontology/knora-api/v2#hasValue"].id).toEqual("http://api.knora.org/ontology/knora-api/v2#hasValue"); expect(response.properties["http://api.knora.org/ontology/knora-api/v2#hasValue"].subPropertyOf).toEqual(["http://api.knora.org/ontology/knora-api/v2#resourceProperty"]); expect(response.properties["http://api.knora.org/ontology/knora-api/v2#hasValue"].subjectType).toEqual("http://api.knora.org/ontology/knora-api/v2#Resource"); expect(response.properties["http://api.knora.org/ontology/knora-api/v2#hasValue"].objectType).toEqual("http://api.knora.org/ontology/knora-api/v2#Value"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var onto = require("../../../../test/data/api/v2/ontologies/knora-api-ontology.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(onto))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/allentities/http%3A%2F%2Fapi.knora.org%2Fontology%2Fknora-api%2Fv2"); expect(request.method).toEqual("GET"); }); it("should return a project ontology", function (done) { knoraApiConnection.v2.onto.getOntology("http://0.0.0.0:3333/ontology/0001/anything/v2").subscribe(function (response) { expect(response.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2"); expect(response.label).toEqual("The anything ontology"); expect(response.dependsOnOntologies.size).toEqual(1); expect(response.dependsOnOntologies.has("http://api.knora.org/ontology/knora-api/v2")).toBeTruthy(); expect(response.classes["http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"] instanceof ResourceClassDefinition); expect(response.classes["http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"].id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(response.classes["http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"].label).toEqual("Thing"); expect(response.classes["http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"].comment).toEqual("'The whole world is full of things, which means there's a real need for someone to go searching for them. And that's exactly what a thing-searcher does.' --Pippi Longstocking"); expect(response.classes["http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"].propertiesList.length).toEqual(39); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasDecimal"] instanceof ResourcePropertyDefinition); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasDecimal"].isEditable).toBeTruthy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasDecimal"].isLinkProperty).toBeFalsy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasDecimal"].isLinkValueProperty).toBeFalsy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThing"] instanceof ResourcePropertyDefinition); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThing"].isEditable).toBeTruthy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThing"].isLinkProperty).toBeTruthy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThing"].isLinkValueProperty).toBeFalsy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThingValue"] instanceof ResourcePropertyDefinition); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThingValue"].isEditable).toBeTruthy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThingValue"].isLinkProperty).toBeFalsy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThingValue"].isLinkValueProperty).toBeTruthy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasListItem"] instanceof ResourcePropertyDefinition); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasListItem"].isEditable).toBeTruthy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasListItem"].isLinkProperty).toBeFalsy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasListItem"].isLinkValueProperty).toBeFalsy(); expect(response.properties["http://0.0.0.0:3333/ontology/0001/anything/v2#hasListItem"].guiAttributes).toEqual(["hlist=<http://rdfh.ch/lists/0001/treeList>"]); var classDefs = response.getAllClassDefinitions(); expect(classDefs.length).toEqual(11); expect(classDefs[0] instanceof ResourceClassDefinition).toBeTruthy(); expect(classDefs[0].id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#AudioThing"); var resClassDefs = response.getClassDefinitionsByType(ResourceClassDefinition); expect(resClassDefs.length).toEqual(10); expect(resClassDefs[0].id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#AudioThing"); var standoffClassDefs = response.getClassDefinitionsByType(StandoffClassDefinition); expect(standoffClassDefs.length).toEqual(1); expect(standoffClassDefs[0].id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#StandoffEventTag"); var systemProps = response.getPropertyDefinitionsByType(SystemPropertyDefinition); expect(systemProps.length).toEqual(1); expect(systemProps[0] instanceof SystemPropertyDefinition).toBe(true); expect(systemProps[0].id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#standoffEventTagHasDescription"); var resourceProps = response.getPropertyDefinitionsByType(ResourcePropertyDefinition); expect(resourceProps.length).toEqual(30); expect(resourceProps[0] instanceof ResourcePropertyDefinition).toBe(true); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var onto = require("../../../../test/data/api/v2/ontologies/anything-ontology.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(onto))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/allentities/http%3A%2F%2F0.0.0.0%3A3333%2Fontology%2F0001%2Fanything%2Fv2"); expect(request.method).toEqual("GET"); }); }); describe("Method getOntologiesByProjectIri", function () { it("should return all ontologies from 'anything' project", function (done) { knoraApiConnection.v2.onto.getOntologiesByProjectIri("http://rdfh.ch/projects/0001").subscribe(function (response) { expect(response.ontologies.length).toEqual(4); expect(response.ontologies[0].id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2"); expect(response.ontologies[1].id).toEqual("http://0.0.0.0:3333/ontology/0001/freetest/v2"); expect(response.ontologies[2].id).toEqual("http://0.0.0.0:3333/ontology/0001/minimal/v2"); expect(response.ontologies[3].id).toEqual("http://0.0.0.0:3333/ontology/0001/something/v2"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var ontoMetadata = require("../../../../test/data/api/v2/ontologies/get-ontologies-project-anything-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(ontoMetadata))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/metadata/http%3A%2F%2Frdfh.ch%2Fprojects%2F0001"); expect(request.method).toEqual("GET"); }); it("should return an empty list when no ontologies exist yet for a given project", function (done) { knoraApiConnection.v2.onto.getOntologiesByProjectIri("http://rdfh.ch/projects/0001").subscribe(function (response) { expect(response.ontologies.length).toEqual(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); // empty response because no ontologies exist for the project request.respondWith(MockAjaxCall.mockResponse(JSON.stringify({}))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/metadata/http%3A%2F%2Frdfh.ch%2Fprojects%2F0001"); expect(request.method).toEqual("GET"); }); }); describe("Method createOntology", function () { it("should create a new ontology", function (done) { var newOntology = new CreateOntology(); newOntology.attachedToProject = "http://rdfh.ch/projects/0001"; newOntology.label = "The foo ontology"; newOntology.name = "foo"; knoraApiConnection.v2.onto.createOntology(newOntology).subscribe(function (response) { expect(response.id).toBe("http://0.0.0.0:3333/ontology/0001/foo/v2"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var createOntologyResponse = require("../../../../test/data/api/v2/ontologies/create-empty-foo-ontology-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createOntologyResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies"); expect(request.method).toEqual("POST"); var expectedPayload = require("../../../../test/data/api/v2/ontologies/create-empty-foo-ontology-request-expanded.json"); expect(request.data()).toEqual(expectedPayload); }); }); describe("Method canDeleteOntology", function () { it("should check if an ontology can be deleted", function (done) { var ontologyIri = "http://0.0.0.0:3333/ontology/0001/foo/v2"; knoraApiConnection.v2.onto.canDeleteOntology(ontologyIri).subscribe(function (res) { expect(res.canDo).toBeTrue(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var canDeleteOntoResponse = require("../../../../test/data/api/v2/ontologies/can-do-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(canDeleteOntoResponse))); expect(request.url).toEqual("http://0.0.0.0:3333/v2/ontologies/candeleteontology/http%3A%2F%2F0.0.0.0%3A3333%2Fontology%2F0001%2Ffoo%2Fv2"); expect(request.method).toEqual("GET"); }); }); describe("Method deleteOntology", function () { it("should delete an ontology", function (done) { var ontoInfo = new DeleteOntology(); ontoInfo.id = "http://0.0.0.0:3333/ontology/0001/foo/v2"; ontoInfo.lastModificationDate = "2020-06-29T13:33:46.059576Z"; knoraApiConnection.v2.onto.deleteOntology(ontoInfo).subscribe(function (res) { expect(res.result).toEqual("Ontology http://0.0.0.0:3333/ontology/0001/foo/v2 has been deleted"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var deleteOntoResponse = require("../../../../test/data/api/v2/ontologies/delete-foo-ontology-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(deleteOntoResponse))); var path = "http://0.0.0.0:3333/v2/ontologies/http%3A%2F%2F0.0.0.0%3A3333%2Fontology%2F0001%2Ffoo%2Fv2?lastModificationDate=2020-06-29T13%3A33%3A46.059576Z"; expect(request.url).toBe(path); expect(request.method).toEqual("DELETE"); }); }); describe("Method updateOntology", function () { it("should update the label and comment of an ontology", function (done) { var ontoInfo = new UpdateOntologyMetadata(); ontoInfo.id = "http://0.0.0.0:3333/ontology/0001/foo/v2"; ontoInfo.lastModificationDate = "2020-06-29T13:33:46.059576Z"; ontoInfo.label = "New onto label"; ontoInfo.comment = "New onto comment"; knoraApiConnection.v2.onto.updateOntology(ontoInfo).subscribe(function (res) { expect(res.label).toEqual("New onto label"); expect(res.comment).toEqual("New onto comment"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var updateOntoResponse = require("../../../../test/data/api/v2/manually-generated/update-ontology-label-and-comment-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(updateOntoResponse))); var path = "http://0.0.0.0:3333/v2/ontologies/metadata"; expect(request.url).toBe(path); expect(request.method).toEqual("PUT"); var expectedPayload = require("../../../../test/data/api/v2/manually-generated/update-ontology-label-and-comment-request-expanded.json"); expect(request.data()).toEqual(expectedPayload); }); it("should remove the comment of an ontology", function (done) { var ontoInfo = new UpdateOntologyMetadata(); ontoInfo.id = "http://0.0.0.0:3333/ontology/0001/foo/v2"; ontoInfo.lastModificationDate = "2020-06-29T13:33:46.059576Z"; knoraApiConnection.v2.onto.deleteOntologyComment(ontoInfo).subscribe(function (res) { expect(res.label).toEqual("Test Onto"); expect(res.comment).toBeUndefined; done(); }); var request = jasmine.Ajax.requests.mostRecent(); var deleteOntoComment = require("../../../../test/data/api/v2/manually-generated/remove-ontology-comment-reponse.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(deleteOntoComment))); var path = "http://0.0.0.0:3333/v2/ontologies/comment/http%3A%2F%2F0.0.0.0%3A3333%2Fontology%2F0001%2Ffoo%2Fv2?lastModificationDate=2020-06-29T13%3A33%3A46.059576Z"; expect(request.url).toBe(path); expect(request.method).toEqual("DELETE"); }); }); describe("Method createResourceClass", function () { it("should create a new res class and add it to anything ontology", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:43.379793Z"; var newResClass = new CreateResourceClass(); newResClass.name = "Nothing"; var comment = new StringLiteralV2(); comment.language = "en"; comment.value = "Represents nothing"; newResClass.comment = [comment]; var label = new StringLiteralV2(); label.language = "en"; label.value = "nothing"; newResClass.label = [label]; newResClass.subClassOf = ["http://api.knora.org/ontology/knora-api/v2#Resource"]; onto.entity = newResClass; knoraApiConnection.v2.onto.createResourceClass(onto).subscribe(function (response) { // console.log('new resource class created', response); expect(response.id).toBe("http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var createResClassResponse = require("../../../../test/data/api/v2/ontologies/create-class-without-cardinalities-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createResClassResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/classes"); expect(request.method).toEqual("POST"); var expectedPayload = require("../../../../test/data/api/v2/ontologies/create-class-without-cardinalities-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-21T23:50:43.379793Z"; expect(request.data()).toEqual(expectedPayload); }); }); describe("Method updateResourceClass", function () { it("should update a resource class\'s label", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:43.379793Z"; var updateResClassLabel = new UpdateResourceClassLabel(); updateResClassLabel.id = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; var label = new StringLiteralV2(); label.language = "en"; label.value = "nothing"; var label2 = new StringLiteralV2(); label2.language = "fr"; label2.value = "rien"; updateResClassLabel.labels = [label, label2]; onto.entity = updateResClassLabel; knoraApiConnection.v2.onto.updateResourceClass(onto).subscribe(function (res) { expect(res.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var createResClassResponse = require("../../../../test/data/api/v2/ontologies/create-class-without-cardinalities-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createResClassResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/classes"); expect(request.method).toEqual("PUT"); var expectedPayload = require("../../../../test/data/api/v2/ontologies/change-class-label-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-21T23:50:43.379793Z"; expect(request.data()).toEqual(expectedPayload); }); it("should update a resource class\'s comment", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:43.379793Z"; var updateResClassComment = new UpdateResourceClassComment(); updateResClassComment.id = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; var label = new StringLiteralV2(); label.language = "en"; label.value = "Represents nothing"; var label2 = new StringLiteralV2(); label2.language = "fr"; label2.value = "ne représente rien"; updateResClassComment.comments = [label, label2]; onto.entity = updateResClassComment; knoraApiConnection.v2.onto.updateResourceClass(onto).subscribe(function (res) { expect(res.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var createResClassResponse = require("../../../../test/data/api/v2/ontologies/create-class-without-cardinalities-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createResClassResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/classes"); expect(request.method).toEqual("PUT"); var expectedPayload = require("../../../../test/data/api/v2/ontologies/change-class-comment-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-21T23:50:43.379793Z"; expect(request.data()).toEqual(expectedPayload); }); }); describe("Method updateProperty", function () { it("should update a resource class\'s label", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:43.379793Z"; var updateResPropLabel = new UpdateResourcePropertyLabel(); updateResPropLabel.id = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasName"; var label = new StringLiteralV2(); label.language = "en"; label.value = "has name"; var label2 = new StringLiteralV2(); label2.language = "fr"; label2.value = "a nom"; var label3 = new StringLiteralV2(); label3.language = "de"; label3.value = "hat Namen"; updateResPropLabel.labels = [label, label2, label3]; onto.entity = updateResPropLabel; knoraApiConnection.v2.onto.updateResourceProperty(onto).subscribe(function (res) { expect(res.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#hasName"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var createResClassResponse = require("../../../../test/data/api/v2/ontologies/create-value-property-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createResClassResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/properties"); expect(request.method).toEqual("PUT"); var expectedPayload = require("../../../../test/data/api/v2/ontologies/change-property-label-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-21T23:50:43.379793Z"; expect(request.data()).toEqual(expectedPayload); }); it("should update a resource property\'s comment", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:43.379793Z"; var updateResPropertyComment = new UpdateResourcePropertyComment(); updateResPropertyComment.id = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasName"; var label = new StringLiteralV2(); label.language = "en"; label.value = "The name of a Thing"; var label2 = new StringLiteralV2(); label2.language = "fr"; label2.value = "Le nom d'une chose"; var label3 = new StringLiteralV2(); label3.language = "de"; label3.value = "Der Name eines Dinges"; updateResPropertyComment.comments = [label, label2, label3]; onto.entity = updateResPropertyComment; knoraApiConnection.v2.onto.updateResourceProperty(onto).subscribe(function (res) { expect(res.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#hasName"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var createResClassResponse = require("../../../../test/data/api/v2/ontologies/create-value-property-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createResClassResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/properties"); expect(request.method).toEqual("PUT"); var expectedPayload = require("../../../../test/data/api/v2/ontologies/change-property-comment-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-21T23:50:43.379793Z"; expect(request.data()).toEqual(expectedPayload); }); }); describe("Method canDeleteResourceClass", function () { it("should check if a resource class can be deleted", function (done) { var resClassIri = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; knoraApiConnection.v2.onto.canDeleteResourceClass(resClassIri).subscribe(function (res) { expect(res.canDo).toBeTrue(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var canDeleteResourceClassResponse = require("../../../../test/data/api/v2/ontologies/can-do-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(canDeleteResourceClassResponse))); expect(request.url).toEqual("http://0.0.0.0:3333/v2/ontologies/candeleteclass/http%3A%2F%2F0.0.0.0%3A3333%2Fontology%2F0001%2Fanything%2Fv2%23Nothing"); expect(request.method).toEqual("GET"); }); }); describe("Method deleteResourceClass", function () { it("should delete a resource class", function (done) { var resclass = new DeleteResourceClass(); resclass.id = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; resclass.lastModificationDate = "2017-12-19T15:23:42.166Z"; knoraApiConnection.v2.onto.deleteResourceClass(resclass).subscribe(function (res) { expect(res.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var deleteResClassResponse = require("../../../../test/data/api/v2/ontologies/anything-ontology.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(deleteResClassResponse))); var path = "http://0.0.0.0:3333/v2/ontologies/classes/http%3A%2F%2F0.0.0.0%3A3333%2Fontology%2F0001%2Fanything%2Fv2%23Nothing?lastModificationDate=2017-12-19T15%3A23%3A42.166Z"; expect(request.url).toBe(path); expect(request.method).toEqual("DELETE"); }); }); describe("Method createResourceProperty", function () { it("should create a new res property as supPropertyOf 'hasValue'", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2017-12-19T15:23:42.166Z"; var newResProp = new CreateResourceProperty(); newResProp.name = "hasName"; var label1 = new StringLiteralV2(); label1.language = "en"; label1.value = "has name"; var label2 = new StringLiteralV2(); label2.language = "de"; label2.value = "hat Namen"; newResProp.label = [ label1, label2 ]; var comment1 = new StringLiteralV2(); comment1.language = "en"; comment1.value = "The name of a Thing"; var comment2 = new StringLiteralV2(); comment2.language = "de"; comment2.value = "Der Name eines Dinges"; newResProp.comment = [ comment1, comment2 ]; newResProp.subPropertyOf = [ Constants.HasValue, "http://schema.org/name" ]; newResProp.objectType = Constants.TextValue; newResProp.subjectType = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; newResProp.guiElement = "http://api.knora.org/ontology/salsah-gui/v2#SimpleText"; newResProp.guiAttributes = ["size=80", "maxlength=100"]; onto.entity = newResProp; knoraApiConnection.v2.onto.createResourceProperty(onto).subscribe(function (response) { expect(response.id).toBe("http://0.0.0.0:3333/ontology/0001/anything/v2#hasName"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var expectedPayload = require("../../../../test/data/api/v2/ontologies/create-value-property-request-expanded.json"); expect(request.data()).toEqual(expectedPayload); var createResPropResponse = require("../../../../test/data/api/v2/ontologies/create-value-property-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createResPropResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/properties"); expect(request.method).toEqual("POST"); }); it("should create a new res property as supPropertyOf 'hasLinkTo'", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:45.204678Z"; var newResProp = new CreateResourceProperty(); newResProp.name = "hasOtherNothing"; var label1 = new StringLiteralV2(); label1.language = "en"; label1.value = "has nothingness"; newResProp.label = [ label1 ]; var comment1 = new StringLiteralV2(); comment1.language = "en"; comment1.value = "Refers to the other Nothing of a Nothing"; newResProp.comment = [ comment1 ]; newResProp.subPropertyOf = [ Constants.HasLinkTo ]; newResProp.objectType = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; newResProp.subjectType = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; onto.entity = newResProp; knoraApiConnection.v2.onto.createResourceProperty(onto).subscribe(function (response) { expect(response.id).toBe("http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherNothing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var expectedPayload = require("../../../../test/data/api/v2/ontologies/create-link-property-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-21T23:50:45.204678Z"; expect(request.data()).toEqual(expectedPayload); var createResPropResponse = require("../../../../test/data/api/v2/ontologies/create-link-property-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createResPropResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/properties"); expect(request.method).toEqual("POST"); }); }); describe("Method canDeleteResourceProperty", function () { it("should check if a property can be deleted", function (done) { var propertyIri = "http://0.0.0.0:3333/ontology/00FF/images/v2#titel"; knoraApiConnection.v2.onto.canDeleteResourceProperty(propertyIri).subscribe(function (res) { expect(res.canDo).toBeTrue(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var canDeleteResourcePropertyResponse = require("../../../../test/data/api/v2/ontologies/can-do-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(canDeleteResourcePropertyResponse))); expect(request.url).toEqual("http://0.0.0.0:3333/v2/ontologies/candeleteproperty/http%3A%2F%2F0.0.0.0%3A3333%2Fontology%2F00FF%2Fimages%2Fv2%23titel"); expect(request.method).toEqual("GET"); }); }); describe("Method deleteResourceProperty", function () { it("should delete a resource property", function (done) { var resprop = new DeleteResourceProperty(); resprop.id = "http://0.0.0.0:3333/ontology/00FF/images/v2#titel"; resprop.lastModificationDate = "2017-12-19T15:23:42.166Z"; knoraApiConnection.v2.onto.deleteResourceProperty(resprop).subscribe(function (res) { expect(res.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var deleteResourcePropertyResponse = require("../../../../test/data/api/v2/ontologies/anything-ontology.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(deleteResourcePropertyResponse))); var path = "http://0.0.0.0:3333/v2/ontologies/properties/http%3A%2F%2F0.0.0.0%3A3333%2Fontology%2F00FF%2Fimages%2Fv2%23titel?lastModificationDate=2017-12-19T15%3A23%3A42.166Z"; expect(request.url).toBe(path); expect(request.method).toEqual("DELETE"); }); }); describe("Method addCardinalityToResourceClass", function () { it("should add a max cardinality 1 to a resource class", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:45.789081Z"; var addCard = new UpdateResourceClassCardinality(); addCard.id = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; addCard.cardinalities = [ { propertyIndex: "http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherNothing", cardinality: Cardinality._0_1 } ]; onto.entity = addCard; knoraApiConnection.v2.onto.addCardinalityToResourceClass(onto).subscribe(function (res) { expect(res.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var expectedPayload = require("../../../../test/data/api/v2/ontologies/add-cardinalities-to-class-nothing-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-21T23:50:45.789081Z"; expect(request.data()).toEqual(expectedPayload); var createCardResponse = require("../../../../test/data/api/v2/ontologies/add-cardinalities-to-class-nothing-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createCardResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/cardinalities"); expect(request.method).toEqual("POST"); }); it("should attempt to add cardinalities to a resource class without providing any", function () { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:45.789081Z"; var addCard = new UpdateResourceClassCardinality(); addCard.id = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; addCard.cardinalities = []; onto.entity = addCard; expect(function () { return knoraApiConnection.v2.onto.addCardinalityToResourceClass(onto); }).toThrow(new Error("At least one cardinality must be defined.")); }); }); describe("Method canReplaceCardinalityOfResourceClass", function () { it("should check if cardinalities can be replaced", function (done) { var resClassIri = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; knoraApiConnection.v2.onto.canReplaceCardinalityOfResourceClass(resClassIri).subscribe(function (res) { expect(res.canDo).toBeTrue(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var canReplaceCardinalityOfResourceClassResponse = require("../../../../test/data/api/v2/ontologies/can-do-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(canReplaceCardinalityOfResourceClassResponse))); expect(request.url).toEqual("http://0.0.0.0:3333/v2/ontologies/canreplacecardinalities/http%3A%2F%2F0.0.0.0%3A3333%2Fontology%2F0001%2Fanything%2Fv2%23Nothing"); expect(request.method).toEqual("GET"); }); }); describe("Method replaceCardinalityOfResourceClass", function () { it("should replace the cardinalities with a max cardinality 1 to a resource class", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:45.789081Z"; var replaceCard = new UpdateResourceClassCardinality(); replaceCard.id = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; replaceCard.cardinalities = [ { propertyIndex: "http://0.0.0.0:3333/ontology/0001/anything/v2#hasEmptiness", cardinality: Cardinality._0_1, } ]; onto.entity = replaceCard; knoraApiConnection.v2.onto.replaceCardinalityOfResourceClass(onto).subscribe(function (res) { expect(res.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var expectedPayload = require("../../../../test/data/api/v2/ontologies/replace-class-cardinalities-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-21T23:50:45.789081Z"; expect(request.data()).toEqual(expectedPayload); var createCardResponse = require("../../../../test/data/api/v2/ontologies/add-cardinalities-to-class-nothing-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createCardResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/cardinalities"); expect(request.method).toEqual("PUT"); }); it("should remove all cardinalities when none are provided", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:45.789081Z"; var removeCard = new UpdateResourceClassCardinality(); removeCard.id = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; removeCard.cardinalities = []; onto.entity = removeCard; knoraApiConnection.v2.onto.replaceCardinalityOfResourceClass(onto).subscribe(function (res) { expect(res.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var expectedPayload = require("../../../../test/data/api/v2/ontologies/remove-class-cardinalities-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-21T23:50:45.789081Z"; expect(request.data()).toEqual(expectedPayload); var removeCardResponse = require("../../../../test/data/api/v2/ontologies/add-cardinalities-to-class-nothing-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(removeCardResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/ontologies/cardinalities"); expect(request.method).toEqual("PUT"); }); }); describe("Method canDeleteCardinalitiesFromClass", function () { it("should check if cardinality can be deleted; response should be true", function (done) { var deleteCardinalitiesFromClassRequest = new UpdateOntology(); deleteCardinalitiesFromClassRequest.id = "http://0.0.0.0:3333/ontology/0001/freetest/v2"; // update this timestamp after every release of dsp-api deleteCardinalitiesFromClassRequest.lastModificationDate = "2024-04-19T09:02:34.427565872Z"; var cardinalityToRemove = new UpdateResourceClassCardinality(); cardinalityToRemove.id = "http://0.0.0.0:3333/ontology/0001/freetest/v2#BlueFreeTestClass"; cardinalityToRemove.cardinalities = [ { propertyIndex: "http://0.0.0.0:3333/ontology/0001/freetest/v2#hasBlueTestTextProp", cardinality: Cardinality._0_1 } ]; deleteCardinalitiesFromClassRequest.entity = cardinalityToRemove; knoraApiConnection.v2.onto.canDeleteCardinalityFromResourceClass(deleteCardinalitiesFromClassRequest).subscribe(function (res) { expect(res.canDo).toBeTrue(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var canDeleteCardinalitiesFromClassResponse = require("../../../../test/data/api/v2/ontologies/can-do-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(canDeleteCardinalitiesFromClassResponse))); expect(request.url).toEqual("http://0.0.0.0:3333/v2/ontologies/candeletecardinalities"); expect(request.method).toEqual("POST"); var expectedPayload = require("../../../../test/data/api/v2/ontologies/candeletecardinalities-true-request-expanded.json"); expect(request.data()).toEqual(expectedPayload); }); it("should check if cardinality can be deleted; response should be false", function (done) { var deleteCardinalitiesFromClassRequest = new UpdateOntology(); deleteCardinalitiesFromClassRequest.id = "http://0.0.0.0:3333/ontology/0001/freetest/v2"; // update this timestamp after every release of dsp-api deleteCardinalitiesFromClassRequest.lastModificationDate = "2024-04-19T09:02:34.427565872Z"; var cardinalityToRemove = new UpdateResourceClassCardinality(); cardinalityToRemove.id = "http://0.0.0.0:3333/ontology/0001/freetest/v2#FreeTest"; cardinalityToRemove.cardinalities = [ { propertyIndex: "http://0.0.0.0:3333/ontology/0001/freetest/v2#hasText", cardinality: Cardinality._1_n } ]; deleteCardinalitiesFromClassRequest.entity = cardinalityToRemove; knoraApiConnection.v2.onto.canDeleteCardinalityFromResourceClass(deleteCardinalitiesFromClassRequest).subscribe(function (res) { expect(res.canDo).toBeFalse(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var canDeleteCardinalitiesFromClassResponse = require("../../../../test/data/api/v2/ontologies/cannot-do-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(canDeleteCardinalitiesFromClassResponse))); expect(request.url).toEqual("http://0.0.0.0:3333/v2/ontologies/candeletecardinalities"); expect(request.method).toEqual("POST"); var expectedPayload = require("../../../../test/data/api/v2/ontologies/candeletecardinalities-false-request-expanded.json"); expect(request.data()).toEqual(expectedPayload); }); }); describe("Method updateGuiOrderOfCardinalities", function () { it("should replace the gui order", function (done) { var onto = new UpdateOntology(); onto.id = "http://0.0.0.0:3333/ontology/0001/anything/v2"; onto.lastModificationDate = "2020-10-21T23:50:45.789081Z"; var replaceCard = new UpdateResourceClassCardinality(); replaceCard.id = "http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"; replaceCard.cardinalities = [ { propertyIndex: "http://0.0.0.0:3333/ontology/0001/anything/v2#hasNothingness", cardinality: Cardinality._0_1, guiOrder: 2 } ]; onto.entity = replaceCard; knoraApiConnection.v2.onto.replaceGuiOrderOfCardinalities(onto).subscribe(function (res) { expect(res.id).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Nothing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var expectedPayload = require("../../../../test/data/api/v2/ontologies/change-gui-order-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-21T23:50:45.789081Z"; expect(request.data()).toEqual(expectedPayload); // at the moment we do not have the correct (gui order) response, but it doesn't matter beca