UNPKG

@eclipse-emfcloud/model-service-theia

Version:
82 lines 4.02 kB
"use strict"; // ***************************************************************************** // Copyright (C) 2023-2024 STMicroelectronics. // // This program and the accompanying materials are made available under the // terms of the Eclipse Public License v. 2.0 which is available at // http://www.eclipse.org/legal/epl-2.0. // // This Source Code may also be made available under the following Secondary // Licenses when the conditions for such availability set forth in the Eclipse // Public License v. 2.0 are satisfied: MIT License which is // available at https://opensource.org/licenses/MIT. // // SPDX-License-Identifier: EPL-2.0 OR MIT // ***************************************************************************** var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const inversify_1 = require("@theia/core/shared/inversify"); const chai_1 = require("chai"); const sinon_1 = __importDefault(require("sinon")); const frontend_model_accessor_bus_subscriber_1 = require("../frontend-model-accessor-bus-subscriber"); const fake_model_accessor_bus_protocol_1 = require("./fake-model-accessor-bus-protocol"); const test_module_1 = require("./test-module"); function createTestContainer() { const container = new inversify_1.Container(); container.load(test_module_1.testModule); return container; } describe('FrontendModelAccessorBusSubscriber', () => { const appContext = 'test-app'; let sandbox; let fake; let subscriber; let onAccessorChanged; beforeEach(async () => { sandbox = sinon_1.default.createSandbox(); const container = createTestContainer(); subscriber = container.get(frontend_model_accessor_bus_subscriber_1.FrontendModelAccessorBusSubscriber); fake = container.get(fake_model_accessor_bus_protocol_1.FakeModelAccessorBusProtocol); (0, fake_model_accessor_bus_protocol_1.connectClient)(fake, subscriber); onAccessorChanged = sinon_1.default.stub(); }); afterEach(() => { sandbox.restore(); }); it('subscribe', async () => { (0, chai_1.expect)(await subscriber.subscribe(appContext, 'fake-provider.get', onAccessorChanged)).to.be.eql({ id: 1, accessorId: 'fake-provider.get', }); }); it('unsubscribe', async () => { const token = await subscriber.subscribe(appContext, 'fake-provider.get', onAccessorChanged); (0, chai_1.expect)(() => subscriber.unsubscribe(token.id)).not.to.throw(); }); it('unsubscribe an already closed subscription', async () => { const token = await subscriber.subscribe(appContext, 'fake-provider.get', onAccessorChanged); const subscription = subscriber .getSubscriptions() .find((sub) => sub.id === token.id); subscriber.unsubscribe(token.id); (0, chai_1.expect)(subscription?.close()).to.be.false; }); it('close from client', async () => { const token = await subscriber.subscribe(appContext, 'fake-provider.get', onAccessorChanged); const spy = sinon_1.default.spy(subscriber, 'unsubscribe'); subscriber.client.closeSubscription(token.id); (0, chai_1.expect)(spy.calledWith(token.id)).to.be.true; }); it('trigger onAccessorChanged', async () => { const token = await subscriber.subscribe(appContext, 'fake-provider.get', onAccessorChanged); subscriber.client.onAccessorChanged(token.id); (0, chai_1.expect)(onAccessorChanged.calledWith('fake-provider.get')).to.be.true; }); it('getSubscriptions', async () => { const token = await subscriber.subscribe(appContext, 'fake-provider.get', onAccessorChanged); (0, chai_1.expect)(subscriber.getSubscriptions().findIndex((s) => s.id === token.id)).to.be.gte(0); }); }); //# sourceMappingURL=frontend-model-accessor-bus-subscriber.spec.js.map