UNPKG

@eclipse-emfcloud/modelserver-client

Version:

Typescript rest client to interact with an EMF.cloud modelserver

379 lines 20.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /******************************************************************************** * Copyright (c) 2022 STMicroelectronics and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at * https://www.eclipse.org/legal/epl-2.0, or the MIT License which is * available at https://opensource.org/licenses/MIT. * * SPDX-License-Identifier: EPL-2.0 OR MIT *******************************************************************************/ const assert_1 = require("assert"); const chai_1 = require("chai"); const moxios_1 = __importDefault(require("moxios")); const sinon_1 = require("sinon"); const urijs_1 = __importDefault(require("urijs")); const model_server_client_api_v2_1 = require("./model-server-client-api-v2"); const model_server_client_v2_1 = require("./model-server-client-v2"); const model_server_paths_1 = require("./model-server-paths"); describe('tests for ModelServerClientV2', () => { let client; const baseUrl = new urijs_1.default({ protocol: 'http', hostname: 'localhost', port: '8081', path: model_server_client_api_v2_1.ModelServerClientApiV2.API_ENDPOINT }); beforeEach(() => { client = new model_server_client_v2_1.ModelServerClientV2(); client.initialize(baseUrl); moxios_1.default.install(client['restClient']); }); afterEach(() => { moxios_1.default.uninstall(client['restClient']); }); it('initialize - correct baseUrl config of axios instance', () => { const axios = client['restClient']; (0, chai_1.expect)(axios.defaults.baseURL).to.be.equal(baseUrl.toString()); }); it('test createSubscriptionPath without trailing slash', () => { client = new model_server_client_v2_1.ModelServerClientV2(); client.initialize(baseUrl); const subscriptionPath = client['createSubscriptionPath'](new urijs_1.default('foo'), {}); (0, chai_1.expect)(subscriptionPath.toString()).to.be.equal('ws://localhost:8081/api/v2/subscribe?modeluri=foo&format=json-v2'); }); it('test createSubscriptionPath with trailing slash', () => { client = new model_server_client_v2_1.ModelServerClientV2(); client.initialize(new urijs_1.default(`${baseUrl}/`)); const subscriptionPath = client['createSubscriptionPath'](new urijs_1.default('foo'), {}); (0, chai_1.expect)(subscriptionPath.toString()).to.be.equal('ws://localhost:8081/api/v2/subscribe?modeluri=foo&format=json-v2'); }); describe('test requests', () => { it('getAll', done => { client.getAll(); client.getAll(model_server_client_api_v2_1.FORMAT_XMI); client.getAll(); moxios_1.default.wait(() => { let request = moxios_1.default.requests.at(0); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_JSON_V2 }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.MODEL_CRUD); request = moxios_1.default.requests.at(1); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_XMI }); done(); }); }); it('getModelUris', done => { client.getModelUris(); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.be.undefined; (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.MODEL_URIS); done(); }); }); it('getElementById', done => { const modeluri = new urijs_1.default('my/uri.model'); const elementid = 'myElement'; client.getElementById(modeluri, elementid); client.getElementById(modeluri, elementid, model_server_client_api_v2_1.FORMAT_XMI); moxios_1.default.wait(() => { let request = moxios_1.default.requests.at(0); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_JSON_V2, elementid, modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.MODEL_ELEMENT); request = moxios_1.default.requests.at(1); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_XMI, elementid, modeluri: modeluri.toString() }); done(); }); }); it('getElementByName', done => { const modeluri = new urijs_1.default('my/uri.model'); const elementname = 'myElement'; client.getElementByName(modeluri, elementname); client.getElementByName(modeluri, elementname, model_server_client_api_v2_1.FORMAT_XMI); moxios_1.default.wait(() => { let request = moxios_1.default.requests.at(0); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_JSON_V2, elementname, modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.MODEL_ELEMENT); request = moxios_1.default.requests.at(1); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_XMI, elementname, modeluri: modeluri.toString() }); done(); }); }); it('delete', done => { const modeluri = new urijs_1.default('delete/me/please'); client.delete(modeluri); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('delete'); (0, chai_1.expect)(request.config.params).to.include({ modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.MODEL_CRUD); done(); }); }); it('close', done => { const modeluri = new urijs_1.default('delete/me/please'); client.close(modeluri); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('post'); (0, chai_1.expect)(request.config.params).to.include({ modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.CLOSE); done(); }); }); it('create', done => { const modeluri = new urijs_1.default('delete/me/please'); const model = { name: 'myModel', id: 'myModelId' }; const data = JSON.stringify(model); client.create(modeluri, data); client.create(modeluri, data, model_server_client_api_v2_1.FORMAT_XMI); moxios_1.default.wait(() => { let request = moxios_1.default.requests.at(0); (0, chai_1.expect)(request.config.method).to.be.equal('post'); (0, chai_1.expect)(request.config.data).to.be.equal(JSON.stringify({ data })); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_JSON_V2, modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.MODEL_CRUD); request = moxios_1.default.requests.at(1); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_XMI, modeluri: modeluri.toString() }); done(); }); }); it('update', done => { const modeluri = new urijs_1.default('delete/me/please'); const model = { name: 'myModel', id: 'myModelId' }; const data = JSON.stringify(model); client.update(modeluri, data); client.update(modeluri, data, model_server_client_api_v2_1.FORMAT_XMI); moxios_1.default.wait(() => { let request = moxios_1.default.requests.at(0); (0, chai_1.expect)(request.config.method).to.be.equal('put'); (0, chai_1.expect)(request.config.data).to.be.equal(JSON.stringify({ data })); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_JSON_V2, modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.MODEL_CRUD); request = moxios_1.default.requests.at(1); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_XMI, modeluri: modeluri.toString() }); done(); }); }); it('save', done => { const modeluri = new urijs_1.default('save/me/please'); client.save(modeluri); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.include({ modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.SAVE); done(); }); }); it('save', done => { client.saveAll(); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.be.undefined; (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.SAVE_ALL); done(); }); }); it('validate', done => { const modeluri = new urijs_1.default('validate/me/please'); client.validate(modeluri); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.include({ modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.VALIDATION); done(); }); }); it('getValidationConstraints', done => { const modeluri = new urijs_1.default('validate/me/please'); client.getValidationConstraints(modeluri); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.include({ modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.VALIDATION_CONSTRAINTS); done(); }); }); it('getTypeSchema', done => { const modeluri = new urijs_1.default('my/model/uri'); client.getTypeSchema(modeluri); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.include({ modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.TYPE_SCHEMA); done(); }); }); it('getUiSchema', done => { const schemaname = 'myschema'; client.getUiSchema(schemaname); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.include({ schemaname }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.UI_SCHEMA); done(); }); }); it('configureServer', done => { const configuration = { workspaceRoot: new urijs_1.default('myRoot'), uiSchemaFolder: new urijs_1.default('mySchemaFolder') }; client.configureServer(configuration); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('put'); (0, chai_1.expect)(request.config.data).to.equal(JSON.stringify({ workspaceRoot: configuration.workspaceRoot.toString(), uiSchemaFolder: configuration.uiSchemaFolder.toString() })); (0, chai_1.expect)(request.config.params).to.be.undefined; (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.SERVER_CONFIGURE); done(); }); }); it('ping', done => { client.ping(); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.be.undefined; (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.SERVER_PING); done(); }); }); it('edit', done => { const modeluri = new urijs_1.default('edit/me/please'); const patch = [ { op: 'replace', path: 'SuperBrewer3000.coffee#//@workflows.0/name', value: 'Auto Brew Workflow' } ]; const expected = { type: 'modelserver.patch', data: patch }; client.edit(modeluri, patch); moxios_1.default.wait(() => { const request = moxios_1.default.requests.at(0); (0, chai_1.expect)(request.config.method).to.be.equal('patch'); (0, chai_1.expect)(request.config.data).to.be.equal(JSON.stringify({ data: expected })); (0, chai_1.expect)(request.config.params).to.include({ format: model_server_client_api_v2_1.FORMAT_JSON_V2, modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.MODEL_CRUD); done(); }); }); it('undo', done => { const modeluri = new urijs_1.default('undo/me/please'); client.undo(modeluri); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.be.include({ modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.UNDO); done(); }); }); it('redo', done => { const modeluri = new urijs_1.default('redo/me/please'); client.redo(modeluri); moxios_1.default.wait(() => { const request = moxios_1.default.requests.mostRecent(); (0, chai_1.expect)(request.config.method).to.be.equal('get'); (0, chai_1.expect)(request.config.params).to.be.include({ modeluri: modeluri.toString() }); (0, chai_1.expect)(request.config.baseURL).to.be.equal(baseUrl.toString()); (0, chai_1.expect)(request.config.url).to.be.equal(model_server_paths_1.ModelServerPaths.REDO); done(); }); }); }); describe('test responses', () => { it('ping', done => { const expectedMsg = { data: '', type: 'success' }; const onFulfilled = (0, sinon_1.spy)(); client.ping().then(onFulfilled); moxios_1.default.wait(async () => { const request = moxios_1.default.requests.mostRecent(); await request.respondWith({ status: 200, response: expectedMsg }); (0, assert_1.strictEqual)(onFulfilled.getCall(0).args[0], true); done(); }); }); it('getAll', done => { const model1 = { modeluri: 'path/to/model1', content: { name: 'coffee' } }; const model2 = { modeluri: 'path/to/model2', content: { name: 'coffee' } }; const response = { data: { [model1.modeluri.toString()]: model1.content, [model2.modeluri.toString()]: model2.content }, type: 'success' }; const onFulfilled = (0, sinon_1.spy)(); client.getAll().then(onFulfilled); moxios_1.default.wait(async () => { const request = moxios_1.default.requests.mostRecent(); await request.respondWith({ status: 200, response }); const result = onFulfilled.getCall(0).args[0]; (0, chai_1.expect)(result).to.be.an('array').of.length(2); (0, chai_1.expect)(result).to.deep.include.members([model1, model2]); done(); }); }); }); }); //# sourceMappingURL=model-server-client-v2.spec.js.map