@dasch-swiss/dsp-js
Version:
JavaScript library that handles API requests to Knora
716 lines • 50.5 kB
JavaScript
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