@eclipse-emfcloud/modelserver-client
Version:
Typescript rest client to interact with an EMF.cloud modelserver
379 lines • 20.8 kB
JavaScript
;
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