UNPKG

@dasch-swiss/dsp-js

Version:

JavaScript library that handles API requests to Knora

437 lines 28.1 kB
import { of } from "rxjs"; import { AjaxError } from "rxjs/ajax"; 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 { ApiResponseError } from "../../../models/api-response-error"; import { CreateResource } from "../../../models/v2/resources/create/create-resource"; import { DeleteResource } from "../../../models/v2/resources/delete/delete-resource"; import { UpdateResourceMetadata } from "../../../models/v2/resources/update/update-resource-metadata"; 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 { 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"; describe("ResourcesEndpoint", function () { var config = new KnoraApiConfig("http", "0.0.0.0", 3333, undefined, "", true); var knoraApiConnection; var getResourceClassDefinitionFromCacheSpy; var getListNodeFromCacheSpy; 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 getResource", function () { it("should return a resource", function (done) { knoraApiConnection.v2.res.getResource("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw").subscribe(function (response) { expect(response.id).toEqual("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw"); expect(response.resourceClassLabel).toEqual("Thing"); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(2); expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/resources/testding.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw"); expect(request.method).toEqual("GET"); }); it("should return a deleted resource", function (done) { knoraApiConnection.v2.res.getResource("http://rdfh.ch/0001/a-thing").subscribe(function (response) { expect(response.id).toEqual("http://rdfh.ch/0001/a-thing"); expect(response.label).toEqual("Deleted Resource"); expect(response.isDeleted).toEqual(true); // expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledTimes(2); // expect(getResourceClassDefinitionFromCacheSpy).toHaveBeenCalledWith("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/resources/deleted-resource-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources/http%3A%2F%2Frdfh.ch%2F0001%2Fa-thing"); expect(request.method).toEqual("GET"); }); it("should unsuccessfully attempt to get a resource", function (done) { knoraApiConnection.v2.res.getResource("http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw").subscribe(function (response) { }, function (err) { expect(err instanceof ApiResponseError).toBeTruthy(); expect(err.status).toEqual(404); expect(err.error instanceof AjaxError).toBeTruthy(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockNotFoundResponse()); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw"); expect(request.method).toEqual("GET"); }); it("should return several resource", function (done) { knoraApiConnection.v2.res.getResources(["http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "http://rdfh.ch/0001/uqmMo72OQ2K2xe7mkIytlg"]).subscribe(function (response) { expect(response.resources.length).toEqual(2); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/resources/things.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(resource))); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/http%3A%2F%2Frdfh.ch%2F0001%2FuqmMo72OQ2K2xe7mkIytlg"); expect(request.method).toEqual("GET"); }); it("should unsuccessfully attempt to several resource", function (done) { knoraApiConnection.v2.res.getResources(["http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw", "http://rdfh.ch/0001/uqmMo72OQ2K2xe7mkIytlg"]).subscribe(function (response) { }, function (err) { expect(err instanceof ApiResponseError).toBeTruthy(); expect(err.status).toEqual(404); expect(err.error instanceof AjaxError).toBeTruthy(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var resource = require("../../../../test/data/api/v2/resources/things.json"); request.respondWith(MockAjaxCall.mockNotFoundResponse()); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources/http%3A%2F%2Frdfh.ch%2F0001%2FH6gBWUuJSuuO-CilHV8kQw/http%3A%2F%2Frdfh.ch%2F0001%2FuqmMo72OQ2K2xe7mkIytlg"); expect(request.method).toEqual("GET"); }); }); describe("method createResource", function () { var createResourceResponse = require("../../../../test/data/api/v2/resources/resource-preview.json"); it("should create a resource with values", function (done) { var createResource = new CreateResource(); createResource.label = "test thing"; createResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; createResource.attachedToProject = "http://rdfh.ch/projects/0001"; var boolVal = new CreateBooleanValue(); boolVal.bool = true; var colorVal = new CreateColorValue(); colorVal.color = "#ff3333"; var dateVal = new CreateDateValue(); dateVal.calendar = "GREGORIAN"; dateVal.startEra = "CE"; dateVal.startYear = 1489; dateVal.endEra = "CE"; dateVal.endYear = 1489; var decVal = new CreateDecimalValue(); decVal.decimal = 1.5; var geomVal = new CreateGeomValue(); geomVal.geometryString = "{\"status\":\"active\",\"lineColor\":\"#ff3333\",\"lineWidth\":2,\"points\":[{\"x\":0.08098591549295775,\"y\":0.16741071428571427},{\"x\":0.7394366197183099,\"y\":0.7299107142857143}],\"type\":\"rectangle\",\"original_index\":0}"; var geonameVal = new CreateGeonameValue(); geonameVal.geoname = "2661604"; var intVal = new CreateIntValue(); intVal.int = 5; intVal.hasPermissions = "CR knora-admin:Creator|V http://rdfh.ch/groups/0001/thing-searcher"; intVal.valueHasComment = "this is the number five"; var intVal2 = new CreateIntValue(); intVal2.int = 6; var intervalVal = new CreateIntervalValue(); intervalVal.start = 1.2; intervalVal.end = 3.4; var listVal = new CreateListValue(); listVal.listNode = "http://rdfh.ch/lists/0001/treeList03"; var linkVal = new CreateLinkValue(); linkVal.linkedResourceIri = "http://rdfh.ch/0001/a-thing"; var textValStandoff = new CreateTextValueAsXml(); textValStandoff.xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<text><p><strong>this is</strong> text</p> with standoff</text>"; textValStandoff.mapping = "http://rdfh.ch/standoff/mappings/StandardMapping"; var textValString = new CreateTextValueAsString(); textValString.text = "this is text without standoff"; var uriVal = new CreateUriValue(); uriVal.uri = "https://www.knora.org"; var timeVal = new CreateTimeValue(); timeVal.time = "2020-01-24T08:47:10.307068Z"; var props = { "http://0.0.0.0:3333/ontology/0001/anything/v2#hasBoolean": [ boolVal ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasColor": [ colorVal ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasDate": [ dateVal ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasDecimal": [ decVal ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasGeometry": [ geomVal ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasGeoname": [ geonameVal ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasInteger": [ intVal, intVal2 ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasInterval": [ intervalVal ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasListItem": [ listVal ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasOtherThingValue": [ linkVal ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasRichtext": [ textValStandoff ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasText": [ textValString ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasUri": [ uriVal ], "http://0.0.0.0:3333/ontology/0001/anything/v2#hasTimeStamp": [ timeVal ] }; createResource.properties = props; knoraApiConnection.v2.res.createResource(createResource).subscribe(function (res) { expect(res.type).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createResourceResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources"); expect(request.method).toEqual("POST"); var expectedPayload = require("../../../../test/data/api/v2/resources/create-resource-with-values-request-expanded.json"); // TODO: remove this once https://github.com/dasch-swiss/knora-api-js-lib/issues/126 is done expectedPayload["http://0.0.0.0:3333/ontology/0001/anything/v2#hasDecimal"]["http://api.knora.org/ontology/knora-api/v2#decimalValueAsDecimal"]["@value"] = "1.5"; expect(request.data()).toEqual(expectedPayload); }); it("should unsuccessfully attempt to create a resource with values", function (done) { var createResource = new CreateResource(); knoraApiConnection.v2.res.createResource(createResource).subscribe(function (res) { }, function (err) { expect(err instanceof ApiResponseError).toBeTruthy(); expect(err.status).toEqual(400); expect(err.error instanceof AjaxError).toBeTruthy(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockBadRequestResponse()); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources"); expect(request.method).toEqual("POST"); }); it("create a resource as a specific user", function (done) { var createResource = new CreateResource(); createResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; createResource.label = "test thing"; createResource.attachedToProject = "http://rdfh.ch/projects/0001"; createResource.attachedToUser = "http://rdfh.ch/users/9XBCrDV3SRa7kS1WwynB4Q"; var boolVal = new CreateBooleanValue(); boolVal.bool = true; var props = { "http://0.0.0.0:3333/ontology/0001/anything/v2#hasBoolean": [ boolVal ] }; createResource.properties = props; knoraApiConnection.v2.res.createResource(createResource).subscribe(function (res) { expect(res.type).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createResourceResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources"); expect(request.method).toEqual("POST"); var expectedPayload = require("../../../../test/data/api/v2/resources/create-resource-as-user-expanded.json"); expect(request.data()).toEqual(expectedPayload); }); it("create a resource as a specific custom creation date", function (done) { var createResource = new CreateResource(); createResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; createResource.label = "test thing"; createResource.attachedToProject = "http://rdfh.ch/projects/0001"; createResource.creationDate = "2019-01-09T15:45:54.502951Z"; var boolVal = new CreateBooleanValue(); boolVal.bool = true; var props = { "http://0.0.0.0:3333/ontology/0001/anything/v2#hasBoolean": [ boolVal ] }; createResource.properties = props; knoraApiConnection.v2.res.createResource(createResource).subscribe(function (res) { expect(res.type).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(createResourceResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources"); expect(request.method).toEqual("POST"); var expectedPayload = require("../../../../test/data/api/v2/resources/create-resource-with-custom-creation-date-expanded.json"); expect(request.data()).toEqual(expectedPayload); }); it("should attempt to create a resource with a property without values", function () { var createResource = new CreateResource(); createResource.label = "testding"; createResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; createResource.attachedToProject = "http://rdfh.ch/projects/0001"; var props = { "http://0.0.0.0:3333/ontology/0001/anything/v2#hasBoolean": [] }; createResource.properties = props; expect(function () { knoraApiConnection.v2.res.createResource(createResource); }).toThrow(new Error("No values defined for http://0.0.0.0:3333/ontology/0001/anything/v2#hasBoolean")); }); }); describe("method updateResourceMetadata", function () { var updateResResponse = require("../../../../test/data/api/v2/resources/update-resource-metadata-response.json"); var updateResResponseWithLastModificationDate = require("../../../../test/data/api/v2/resources/update-resource-metadata-response-with-last-mod-date.json"); it("should update a resource's label", function (done) { var updateResourceMetadata = new UpdateResourceMetadata(); updateResourceMetadata.id = "http://rdfh.ch/0001/a-thing"; updateResourceMetadata.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResourceMetadata.label = "test thing with modified label"; updateResourceMetadata.hasPermissions = "CR knora-admin:Creator|M knora-admin:ProjectMember|V knora-admin:ProjectMember"; updateResourceMetadata.newModificationDate = "2022-05-26T17:13:19.143635827Z"; knoraApiConnection.v2.res.updateResourceMetadata(updateResourceMetadata).subscribe(function (res) { expect(res.label).toEqual("test thing with modified label"); expect(res.resourceIri).toEqual("http://rdfh.ch/0001/a-thing"); expect(res.resourceClassIri).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(res.hasPermissions).toEqual("CR knora-admin:Creator|M knora-admin:ProjectMember|V knora-admin:ProjectMember"); // update this timestamp after every release of dsp-api expect(res.lastModificationDate).toEqual("2024-04-20T09:00:04.451529931Z"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(updateResResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources"); expect(request.method).toEqual("PUT"); var expectedPayload = require("../../../../test/data/api/v2/resources/update-resource-metadata-request-expanded.json"); // has to be done in order not to have to update this test after every release of dsp-api expectedPayload["http://api.knora.org/ontology/knora-api/v2#newModificationDate"]["@value"] = "2022-05-26T17:13:19.143635827Z"; expect(request.data()).toEqual(expectedPayload); }); it("should unsuccessfully attempt to update a resource's label", function (done) { var updateResourceMetadata = new UpdateResourceMetadata(); updateResourceMetadata.label = "test thing with modified label"; knoraApiConnection.v2.res.updateResourceMetadata(updateResourceMetadata).subscribe(function (res) { }, function (err) { expect(err instanceof ApiResponseError).toBeTruthy(); expect(err.status).toEqual(400); expect(err.error instanceof AjaxError).toBeTruthy(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockBadRequestResponse()); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources"); expect(request.method).toEqual("PUT"); }); it("should update a resource's label submitting the last modification date", function (done) { var updateResourceMetadata = new UpdateResourceMetadata(); updateResourceMetadata.id = "http://rdfh.ch/0001/a-thing"; updateResourceMetadata.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; updateResourceMetadata.label = "test thing with modified label again"; updateResourceMetadata.hasPermissions = "CR knora-admin:ProjectMember|V knora-admin:ProjectMember"; updateResourceMetadata.lastModificationDate = "2021-09-30T16:41:46.980756Z"; // update this timestamp after every release of dsp-api updateResourceMetadata.newModificationDate = "2024-04-20T09:00:04.958638463Z"; knoraApiConnection.v2.res.updateResourceMetadata(updateResourceMetadata).subscribe(function (res) { expect(res.resourceIri).toEqual("http://rdfh.ch/0001/a-thing"); expect(res.resourceClassIri).toEqual("http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"); expect(res.label).toEqual("test thing with modified label again"); expect(res.hasPermissions).toEqual("CR knora-admin:ProjectMember|V knora-admin:ProjectMember"); // update this timestamp after every release of dsp-api expect(res.lastModificationDate).toEqual("2024-04-20T09:00:04.958638463Z"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(updateResResponseWithLastModificationDate))); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources"); expect(request.method).toEqual("PUT"); var expectedPayload = require("../../../../test/data/api/v2/resources/update-resource-metadata-request-with-last-mod-date-expanded.json"); expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2021-09-30T16:41:46.980756Z"; // update this timestamp after every release of dsp-api expectedPayload["http://api.knora.org/ontology/knora-api/v2#newModificationDate"]["@value"] = "2024-04-20T09:00:04.958638463Z"; expect(request.data()).toEqual(expectedPayload); }); it("should attempt to update a resource's metadata without any required property", function () { var updateResourceMetadata = new UpdateResourceMetadata(); updateResourceMetadata.id = "http://rdfh.ch/0001/H6gBWUuJSuuO-CilHV8kQw"; updateResourceMetadata.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; expect(function () { knoraApiConnection.v2.res.updateResourceMetadata(updateResourceMetadata); }).toThrow(new Error("At least one of the following properties has to be updated: label, hasPermissions, newModificationDate")); }); }); describe("method deleteResource", function () { it("should delete a resource", function (done) { var deleteResource = new DeleteResource(); deleteResource.id = "http://rdfh.ch/0001/a-thing"; deleteResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; deleteResource.deleteComment = "This resource is too boring."; deleteResource.lastModificationDate = "2020-10-22T23:52:02.920220Z"; knoraApiConnection.v2.res.deleteResource(deleteResource).subscribe(function (res) { expect(res.result).toEqual("Resource marked as deleted"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var deleteResResponse = require("../../../../test/data/api/v2/resources/delete-resource-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(deleteResResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources/delete"); expect(request.method).toEqual("POST"); var expectedPayload = require("../../../../test/data/api/v2/resources/delete-resource-request-expanded.json"); expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2020-10-22T23:52:02.920220Z"; expect(request.data()).toEqual(expectedPayload); }); it("should unsuccessfully attempt to delete a resource", function (done) { var deleteResource = new DeleteResource(); knoraApiConnection.v2.res.deleteResource(deleteResource).subscribe(function (res) { }, function (err) { expect(err instanceof ApiResponseError).toBeTruthy(); expect(err.status).toEqual(400); expect(err.error instanceof AjaxError).toBeTruthy(); done(); }); var request = jasmine.Ajax.requests.mostRecent(); request.respondWith(MockAjaxCall.mockBadRequestResponse()); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources/delete"); expect(request.method).toEqual("POST"); }); }); describe("method eraseResource", function () { it("should erase a resource", function (done) { var deleteResource = new DeleteResource(); deleteResource.id = "http://rdfh.ch/0001/thing-with-history"; deleteResource.type = "http://0.0.0.0:3333/ontology/0001/anything/v2#Thing"; // comment is not necessary deleteResource.deleteComment = undefined; deleteResource.lastModificationDate = "2019-02-13T09:05:10Z"; knoraApiConnection.v2.res.eraseResource(deleteResource).subscribe(function (res) { // TODO: the following line would be correct, but we // do not have test data for erase response and // this is why we use the delete resource response // expect(res.result).toEqual("Resource erased"); expect(res.result).toEqual("Resource marked as deleted"); done(); }); var request = jasmine.Ajax.requests.mostRecent(); var eraseResResponse = require("../../../../test/data/api/v2/resources/erase-resource-response.json"); request.respondWith(MockAjaxCall.mockResponse(JSON.stringify(eraseResResponse))); expect(request.url).toBe("http://0.0.0.0:3333/v2/resources/erase"); expect(request.method).toEqual("POST"); var expectedPayload = require("../../../../test/data/api/v2/resources/erase-resource-request-expanded.json"); // TODO: remove this bad hack once test data is stable expectedPayload["http://api.knora.org/ontology/knora-api/v2#lastModificationDate"]["@value"] = "2019-02-13T09:05:10Z"; expect(request.data()).toEqual(expectedPayload); }); }); }); //# sourceMappingURL=resources-endpoint.spec.js.map