UNPKG

@dasch-swiss/dsp-js

Version:

JavaScript library that handles API requests to Knora

677 lines 105 kB
import { of } from "rxjs"; import { MockList } from "../../../../test/data/api/v2/mock-list"; import { MockOntology } from "../../../../test/data/api/v2/mock-ontology"; import { MockAjaxCall } from "../../../../test/mockajaxcall"; import { KnoraApiConfig } from "../../../knora-api-config"; import { KnoraApiConnection } from "../../../knora-api-connection"; import { Constants } from "../../../models/v2/Constants"; import { UpdateResource } from "../../../models/v2/resources/update/update-resource"; import { CreateBooleanValue } from "../../../models/v2/resources/values/create/create-boolean-value"; import { CreateColorValue } from "../../../models/v2/resources/values/create/create-color-value"; import { CreateDateValue } from "../../../models/v2/resources/values/create/create-date-value"; import { CreateDecimalValue } from "../../../models/v2/resources/values/create/create-decimal-value"; import { CreateStillImageFileValue } from "../../../models/v2/resources/values/create/create-file-value"; import { CreateGeomValue } from "../../../models/v2/resources/values/create/create-geom-value"; import { CreateGeonameValue } from "../../../models/v2/resources/values/create/create-geoname-value"; import { CreateIntValue } from "../../../models/v2/resources/values/create/create-int-value"; import { CreateIntervalValue } from "../../../models/v2/resources/values/create/create-interval-value"; import { CreateLinkValue } from "../../../models/v2/resources/values/create/create-link-value"; import { CreateListValue } from "../../../models/v2/resources/values/create/create-list-value"; import { CreateTextValueAsString, CreateTextValueAsXml } from "../../../models/v2/resources/values/create/create-text-value"; import { CreateTimeValue } from "../../../models/v2/resources/values/create/create-time-value"; import { CreateUriValue } from "../../../models/v2/resources/values/create/create-uri-value"; import { DeleteValue } from "../../../models/v2/resources/values/delete/delete-value"; import { ReadBooleanValue } from "../../../models/v2/resources/values/read/read-boolean-value"; import { ReadColorValue } from "../../../models/v2/resources/values/read/read-color-value"; import { KnoraDate, ReadDateValue } from "../../../models/v2/resources/values/read/read-date-value"; import { ReadDecimalValue } from "../../../models/v2/resources/values/read/read-decimal-value"; import { ReadStillImageExternalFileValue, ReadStillImageFileValue } from "../../../models/v2/resources/values/read/read-file-value"; import { ReadGeomValue } from "../../../models/v2/resources/values/read/read-geom-value"; import { ReadGeonameValue } from "../../../models/v2/resources/values/read/read-geoname-value"; import { ReadIntValue } from "../../../models/v2/resources/values/read/read-int-value"; import { ReadIntervalValue } from "../../../models/v2/resources/values/read/read-interval-value"; import { ReadLinkValue } from "../../../models/v2/resources/values/read/read-link-value"; import { ReadListValue } from "../../../models/v2/resources/values/read/read-list-value"; import { ReadTextValueAsString, ReadTextValueAsXml } from "../../../models/v2/resources/values/read/read-text-value"; import { ReadTimeValue } from "../../../models/v2/resources/values/read/read-time-value"; import { UpdateBooleanValue } from "../../../models/v2/resources/values/update/update-boolean-value"; import { UpdateColorValue } from "../../../models/v2/resources/values/update/update-color-value"; import { UpdateDateValue } from "../../../models/v2/resources/values/update/update-date-value"; import { UpdateDecimalValue } from "../../../models/v2/resources/values/update/update-decimal-value"; import { UpdateStillImageFileValue } from "../../../models/v2/resources/values/update/update-file-value"; import { UpdateGeomValue } from "../../../models/v2/resources/values/update/update-geom-value"; import { UpdateGeonameValue } from "../../../models/v2/resources/values/update/update-geoname-value"; import { UpdateIntValue } from "../../../models/v2/resources/values/update/update-int-value"; import { UpdateIntervalValue } from "../../../models/v2/resources/values/update/update-interval-value"; import { UpdateLinkValue } from "../../../models/v2/resources/values/update/update-link-value"; import { UpdateListValue } from "../../../models/v2/resources/values/update/update-list-value"; import { UpdateTextValueAsString, UpdateTextValueAsXml } from "../../../models/v2/resources/values/update/update-text-value"; import { UpdateTimeValue } from "../../../models/v2/resources/values/update/update-time-value"; import { UpdateUriValue } from "../../../models/v2/resources/values/update/update-uri-value"; import { UpdateValuePermissions } from "../../../models/v2/resources/values/update/update-value-permissions"; var config = new KnoraApiConfig("http", "0.0.0.0", 3333, undefined, undefined, true); var knoraApiConnection; var getResourceClassDefinitionFromCacheSpy; var getListNodeFromCacheSpy; var WriteValueMocks; (function (WriteValueMocks) { var mockWriteValueResponse = function (id, type, uuid, creationDate) { var _a; var res = (_a = { "@id": id, "@type": type }, _a[Constants.ValueHasUUID] = uuid, _a); if (creationDate !== undefined) { res[Constants.ValueCreationDate] = { "@type": "http://www.w3.org/2001/XMLSchema#dateTimeStamp", "@value": creationDate }; } return JSON.stringify(res); }; WriteValueMocks.mockUpdateValueResponse = function (id, type, uuid) { return mockWriteValueResponse(id, type, uuid); }; WriteValueMocks.mockCreateValueResponse = function (id, type, uuid, creationDate) { return mockWriteValueResponse(id, type, uuid, creationDate); }; })(WriteValueMocks || (WriteValueMocks = {})); describe("ValuesEndpoint", function () { beforeEach(function () { jasmine.Ajax.install(); knoraApiConnection = new KnoraApiConnection(config); getResourceClassDefinitionFromCacheSpy = spyOn(knoraApiConnection.v2.ontologyCache, "getResourceClassDefinition").and.callFake(function (resClassIri) { return of(MockOntology.mockIResourceClassAndPropertyDefinitions(resClassIri)); }); getListNodeFromCacheSpy = spyOn(knoraApiConnection.v2.listNodeCache, "getNode").and.callFake(function (listNodeIri) { return of(MockList.mockNode(listNodeIri)); }); }); afterEach(function () { jasmine.Ajax.uninstall(); }); describe("Method getValue", function () { it("should read an integer value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "dJ1ES8QTQNepFKF5-EAqdg").subscribe(function (res) { var intVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasInteger", ReadIntValue); expect(intVal.length).toEqual(1); expect(intVal[0].int).toEqual(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-int-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/dJ1ES8QTQNepFKF5-EAqdg"); expect(request.method).toEqual("GET"); }); it("should read a decimal value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "bXMwnrHvQH2DMjOFrGmNzg-EAqdg").subscribe(function (res) { var decVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasDecimal", ReadDecimalValue); expect(decVal.length).toEqual(1); expect(decVal[0].decimal).toBeCloseTo(1.5, 1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-decimal-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/bXMwnrHvQH2DMjOFrGmNzg-EAqdg"); expect(request.method).toEqual("GET"); }); it("should read a color value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "TAziKNP8QxuyhC4Qf9-b6w").subscribe(function (res) { var colorVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasColor", ReadColorValue); expect(colorVal.length).toEqual(1); expect(colorVal[0].color).toEqual("#ff3333"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-color-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/TAziKNP8QxuyhC4Qf9-b6w"); expect(request.method).toEqual("GET"); }); it("should read an interval value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "RbDKPKHWTC-0lkRKae-E6A").subscribe(function (res) { var intervalVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasInterval", ReadIntervalValue); expect(intervalVal.length).toEqual(1); expect(intervalVal[0].start).toEqual(0); expect(intervalVal[0].end).toEqual(216000); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-interval-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/RbDKPKHWTC-0lkRKae-E6A"); expect(request.method).toEqual("GET"); }); it("should read an Boolean value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "IN4R19yYR0ygi3K2VEHpUQ").subscribe(function (res) { var boolVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasBoolean", ReadBooleanValue); expect(boolVal.length).toEqual(1); expect(boolVal[0].bool).toBeTruthy(); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-boolean-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/IN4R19yYR0ygi3K2VEHpUQ"); expect(request.method).toEqual("GET"); }); it("should read a list value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "XAhEeE3kSVqM4JPGdLt4Ew").subscribe(function (res) { var listVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasListItem", ReadListValue); expect(listVal.length).toEqual(1); expect(listVal[0].listNode).toEqual("http://rdfh.ch/lists/0001/treeList01"); expect(listVal[0].listNodeLabel).toEqual("Tree list node 01"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(1); expect(getListNodeFromCacheSpy).toHaveBeenCalledWith("http://rdfh.ch/lists/0001/treeList01"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-list-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/XAhEeE3kSVqM4JPGdLt4Ew"); expect(request.method).toEqual("GET"); }); it("should read an link value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "uvRVxzL1RD-t9VIQ1TpfUw").subscribe(function (res) { var linkVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThingValue", ReadLinkValue); expect(linkVal.length).toEqual(1); expect(linkVal[0].linkedResourceIri).toEqual("http://rdfh.ch/0001/0C-0L1kORryKzJAJxxRyRQ"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(2); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-link-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/uvRVxzL1RD-t9VIQ1TpfUw"); expect(request.method).toEqual("GET"); }); it("should read a text value without standoff", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "SZyeLLmOTcCCuS3B0VksHQ").subscribe(function (res) { var textVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasText", ReadTextValueAsString); expect(textVal.length).toEqual(1); expect(textVal[0].text).toEqual("test"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-text-value-without-standoff-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/SZyeLLmOTcCCuS3B0VksHQ"); expect(request.method).toEqual("GET"); }); it("should read a text value with standoff", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "rvB4eQ5MTF-Qxq0YgkwaDg").subscribe(function (res) { var textVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasRichtext", ReadTextValueAsXml); expect(textVal.length).toEqual(1); expect(textVal[0].xml).toEqual("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<text><p>test with <strong>markup</strong></p></text>"); expect(textVal[0].mapping).toEqual("http://rdfh.ch/standoff/mappings/StandardMapping"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-text-value-with-standoff-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/rvB4eQ5MTF-Qxq0YgkwaDg"); expect(request.method).toEqual("GET"); }); it("should read a date value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "-rG4F5FTTu2iB5mTBPVn5Q").subscribe(function (res) { var dateVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasDate", ReadDateValue); expect(dateVal.length).toEqual(1); expect(dateVal[0].date instanceof KnoraDate).toBeTruthy(); expect(dateVal[0].date.calendar).toEqual("GREGORIAN"); expect(dateVal[0].date.day).toEqual(13); expect(dateVal[0].date.month).toEqual(5); expect(dateVal[0].date.year).toEqual(2018); expect(dateVal[0].date.era).toEqual("CE"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-date-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/-rG4F5FTTu2iB5mTBPVn5Q"); expect(request.method).toEqual("GET"); }); it("should read a date value (Islamic)", function (done) { // test data for Islamic date has been created manually! knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "-rG4F5FTTu2iB5mTBPVn5Q").subscribe(function (res) { var dateVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasDate", ReadDateValue); expect(dateVal.length).toEqual(1); expect(dateVal[0].date instanceof KnoraDate).toBeTruthy(); expect(dateVal[0].date.calendar).toEqual("ISLAMIC"); expect(dateVal[0].date.day).toEqual(27); expect(dateVal[0].date.month).toEqual(8); expect(dateVal[0].date.year).toEqual(1439); expect(dateVal[0].date.era).toEqual("noEra"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/manually-generated/get-islamic-date-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/-rG4F5FTTu2iB5mTBPVn5Q"); expect(request.method).toEqual("GET"); }); it("should read a still image file value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "goZ7JFRNSeqF-dNxsqAS7Q").subscribe(function (res) { var stillImageVal = res.getValuesAs("http://api.knora.org/ontology/knora-api/v2#hasStillImageFileValue", ReadStillImageFileValue); expect(stillImageVal.length).toEqual(1); expect(stillImageVal[0].filename).toEqual("B1D0OkEgfFp-Cew2Seur7Wi.jp2"); expect(stillImageVal[0].dimX).toEqual(512); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#ThingPicture"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-still-image-file-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/goZ7JFRNSeqF-dNxsqAS7Q"); expect(request.method).toEqual("GET"); }); it("should read an external image file value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0803/RRjceJu5S86zfc_-ZrIEtg", "1-COzXfuTXiwDJ_2GZxeoQ").subscribe(function (res) { var externalImageVal = res.getValuesAs("http://api.knora.org/ontology/knora-api/v2#hasStillImageFileValue", ReadStillImageExternalFileValue); expect(externalImageVal.length).toEqual(1); expect(externalImageVal[0].externalUrl).toEqual("https://ids.lib.harvard.edu/ids/iiif/24209711/full/105,/0/default.jpg"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#ThingPicture"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/manually-generated/get-still-image-external-file-value-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0803%2FRRjceJu5S86zfc_-ZrIEtg/1-COzXfuTXiwDJ_2GZxeoQ"); expect(request.method).toEqual("GET"); }); it("should read a geometry value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "we-ybmj-SRen-91n4RaDOQ").subscribe(function (res) { var geomVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasGeometry", ReadGeomValue); expect(geomVal.length).toEqual(1); expect(geomVal[0].geometry.type).toEqual("rectangle"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-geom-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/we-ybmj-SRen-91n4RaDOQ"); expect(request.method).toEqual("GET"); }); it("should read a Geoname value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "hty-ONF8SwKN2RKU7rLKDg").subscribe(function (res) { var geomVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasGeoname", ReadGeonameValue); expect(geomVal.length).toEqual(1); expect(geomVal[0].geoname).toEqual("2661604"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-geoname-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/hty-ONF8SwKN2RKU7rLKDg"); expect(request.method).toEqual("GET"); }); it("should read a time value", function (done) { knoraApiConnection.v2.values.getValue("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "l6DhS5SCT9WhXSoYEZRTRw").subscribe(function (res) { var geomVal = res.getValuesAs("http://0.0.0.0:3333/ontology/0001/anything/v2#hasTimeStamp", ReadTimeValue); expect(geomVal.length).toEqual(1); expect(geomVal[0].time).toEqual("2019-08-30T10:45:20.173572Z"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(1); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(getListNodeFromCacheSpy).toHaveBeenCalledTimes(0); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/values/get-time-value-response-expanded.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/l6DhS5SCT9WhXSoYEZRTRw"); expect(request.method).toEqual("GET"); }); }); describe("Method updateValue", function () { it("should check mocked update value response", function () { var mockedUpdateIntValueResponse = WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/ADHkEJicT1qjuoEgFyfPIg", Constants.IntValue, "NwAp_UmGRlWTOCss0Yfwbw"); var updateIntValueResponse = require("../../../../test/data/api/v2/values/update-int-value-response-expanded.json"); // TODO: remove this bad hack once test data is stable updateIntValueResponse["@id"] = "http://rdfh.ch/0001/a-thing/values/ADHkEJicT1qjuoEgFyfPIg"; updateIntValueResponse["http://api.knora.org/ontology/knora-api/v2#valueHasUUID"] = "NwAp_UmGRlWTOCss0Yfwbw"; expect(JSON.parse(mockedUpdateIntValueResponse)).toEqual(updateIntValueResponse); }); it("should update an integer value", function (done) { var updateIntVal = new UpdateIntValue(); updateIntVal.id = "http://rdfh.ch/0001/a-thing/values/Gdp7h5fOTEaxJEvoTXIW5A"; updateIntVal.int = 5; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasInteger"; updateResource.value = updateIntVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.IntValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.IntValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Content-Type": "application/json; charset=utf-8", "X-Asset-Ingested": "true" }); var expectedPayload = require("../../../../test/data/api/v2/values/update-int-value-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasInteger"]["@id"] = "http://rdfh.ch/0001/a-thing/values/Gdp7h5fOTEaxJEvoTXIW5A"; expect(request.data()).toEqual(expectedPayload); }); it("should update a decimal value", function (done) { var updateDecimalVal = new UpdateDecimalValue(); updateDecimalVal.id = "http://rdfh.ch/0001/a-thing/values/7Rl2CDFTSIGE04RyB1CG2w"; updateDecimalVal.decimal = 5.6; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasDecimal"; updateResource.value = updateDecimalVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.DecimalValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.DecimalValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Content-Type": "application/json; charset=utf-8", "X-Asset-Ingested": "true" }); var expectedPayload = require("../../../../test/data/api/v2/values/update-decimal-value-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasDecimal"]["@id"] = "http://rdfh.ch/0001/a-thing/values/7Rl2CDFTSIGE04RyB1CG2w"; expect(request.data()).toEqual(expectedPayload); }); it("should update a color value", function (done) { var updateColorVal = new UpdateColorValue(); updateColorVal.id = "http://rdfh.ch/0001/a-thing/values/74h6nw99Rgiww0y_n2sspQ"; updateColorVal.color = "#ff3344"; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasColor"; updateResource.value = updateColorVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.ColorValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.ColorValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Content-Type": "application/json; charset=utf-8", "X-Asset-Ingested": "true" }); var expectedPayload = require("../../../../test/data/api/v2/values/update-color-value-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasColor"]["@id"] = "http://rdfh.ch/0001/a-thing/values/74h6nw99Rgiww0y_n2sspQ"; expect(request.data()).toEqual(expectedPayload); }); it("should update an interval value", function (done) { var updateIntervalVal = new UpdateIntervalValue(); updateIntervalVal.id = "http://rdfh.ch/0001/a-thing/values/W5_dZsbwTTWj9E4J5WlIJA"; updateIntervalVal.start = 5.6; updateIntervalVal.end = 7.8; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasInterval"; updateResource.value = updateIntervalVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.IntervalValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.IntervalValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Content-Type": "application/json; charset=utf-8", "X-Asset-Ingested": "true" }); var expectedPayload = require("../../../../test/data/api/v2/values/update-interval-value-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasInterval"]["@id"] = "http://rdfh.ch/0001/a-thing/values/W5_dZsbwTTWj9E4J5WlIJA"; expect(request.data()).toEqual(expectedPayload); }); it("should update a Boolean value", function (done) { var updateBooleanVal = new UpdateBooleanValue(); updateBooleanVal.id = "http://rdfh.ch/0001/a-thing/values/-B-cx99VScG5vBXyM5F5tg"; updateBooleanVal.bool = false; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasBoolean"; updateResource.value = updateBooleanVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.BooleanValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.BooleanValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Content-Type": "application/json; charset=utf-8", "X-Asset-Ingested": "true" }); var expectedPayload = require("../../../../test/data/api/v2/values/update-boolean-value-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasBoolean"]["@id"] = "http://rdfh.ch/0001/a-thing/values/-B-cx99VScG5vBXyM5F5tg"; expect(request.data()).toEqual(expectedPayload); }); it("should update a list value", function (done) { var updateListVal = new UpdateListValue(); updateListVal.id = "http://rdfh.ch/0001/a-thing/values/C91T8eVmTD2suPhq6RBNAw"; updateListVal.listNode = "http://rdfh.ch/lists/0001/treeList02"; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasListItem"; updateResource.value = updateListVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.ListValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.ListValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Content-Type": "application/json; charset=utf-8", "X-Asset-Ingested": "true" }); var expectedPayload = require("../../../../test/data/api/v2/values/update-list-value-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasListItem"]["@id"] = "http://rdfh.ch/0001/a-thing/values/C91T8eVmTD2suPhq6RBNAw"; expect(request.data()).toEqual(expectedPayload); }); it("should update a link value", function (done) { var updateLinkVal = new UpdateLinkValue(); updateLinkVal.id = "http://rdfh.ch/0001/a-thing/values/vLpKgz66Sn2tyUYJSJ5B5A"; updateLinkVal.linkedResourceIri = "http://rdfh.ch/0001/5IEswyQFQp2bxXDrOyEfEA"; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThingValue"; updateResource.value = updateLinkVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.LinkValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.LinkValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Content-Type": "application/json; charset=utf-8", "X-Asset-Ingested": "true" }); var expectedPayload = require("../../../../test/data/api/v2/values/update-link-value-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThingValue"]["@id"] = "http://rdfh.ch/0001/a-thing/values/vLpKgz66Sn2tyUYJSJ5B5A"; expect(request.data()).toEqual(expectedPayload); }); it("should update a URI value", function (done) { var updateUriVal = new UpdateUriValue(); updateUriVal.id = "http://rdfh.ch/0001/a-thing/values/ozzNaZM7T6OILHJbxv4MGw"; updateUriVal.uri = "https://docs.knora.org"; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasUri"; updateResource.value = updateUriVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.UriValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.UriValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Content-Type": "application/json; charset=utf-8", "X-Asset-Ingested": "true" }); var expectedPayload = require("../../../../test/data/api/v2/values/update-uri-value-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasUri"]["@id"] = "http://rdfh.ch/0001/a-thing/values/ozzNaZM7T6OILHJbxv4MGw"; expect(request.data()).toEqual(expectedPayload); }); it("should update a text value as string", function (done) { var updateTextVal = new UpdateTextValueAsString(); updateTextVal.id = "http://rdfh.ch/0001/a-thing/values/pHuFhBelROGexp2IhaLQAg"; updateTextVal.text = "text without standoff updated"; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasText"; updateResource.value = updateTextVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.TextValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.TextValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Content-Type": "application/json; charset=utf-8", "X-Asset-Ingested": "true" }); var expectedPayload = require("../../../../test/data/api/v2/values/update-text-value-without-standoff-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasText"]["@id"] = "http://rdfh.ch/0001/a-thing/values/pHuFhBelROGexp2IhaLQAg"; expect(request.data()).toEqual(expectedPayload); }); it("should update a text value as XML", function (done) { var updateTextVal = new UpdateTextValueAsXml(); updateTextVal.id = "http://rdfh.ch/0001/a-thing/values/I4OWMilwQwaYvaN5wlUIqg"; updateTextVal.xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<text>\n This updated text links to another <a class=\"salsah-link\" href=\"http://rdfh.ch/0001/another-thing\">resource</a>.\n</text>"; updateTextVal.mapping = "http://rdfh.ch/standoff/mappings/StandardMapping"; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasText"; updateResource.value = updateTextVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.TextValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.TextValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Content-Type": "application/json; charset=utf-8", "X-Asset-Ingested": "true" }); var expectedPayload = require("../../../../test/data/api/v2/values/update-text-value-with-standoff-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasText"]["@id"] = "http://rdfh.ch/0001/a-thing/values/I4OWMilwQwaYvaN5wlUIqg"; expect(request.data()).toEqual(expectedPayload); }); it("should update a date value with day precision", function (done) { var updateDateVal = new UpdateDateValue(); updateDateVal.id = "http://rdfh.ch/0001/a-thing/values/80rXchZpShyfQShMi-JZbA"; updateDateVal.calendar = "GREGORIAN"; updateDateVal.startYear = 2018; updateDateVal.startMonth = 10; updateDateVal.startDay = 5; updateDateVal.startEra = "CE"; updateDateVal.endYear = 2018; updateDateVal.endMonth = 12; updateDateVal.endDay = 6; updateDateVal.endEra = "CE"; var updateResource = new UpdateResource(); updateResource.id = "http://rdfh.ch/0001/a-thing"; updateResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResource.property = "http://0.0.0.0:3333/ontology/0001/anything/v2#hasDate"; updateResource.value = updateDateVal; knoraApiConnection.v2.values.updateValue(updateResource).subscribe(function (res) { expect(res.id).toEqual("http://rdfh.ch/0001/a-thing/values/updated"); expect(res.type).toEqual(Constants.DateValue); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(WriteValueMocks.mockUpdateValueResponse("http://rdfh.ch/0001/a-thing/values/updated", Constants.DateValue, "uuid"))); expect(request.url).toBe("http://0.0.0.0:3333/v2/values"); expect(request.method).toEqual("PUT"); expect(request.requestHeaders).toEqual({ "Co