@theia/core
Version:
Theia is a cloud & desktop IDE framework implemented in TypeScript.
226 lines • 13 kB
JavaScript
;
// *****************************************************************************
// Copyright (C) 2025 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
// 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: GNU General Public License, version 2
// with the GNU Classpath Exception which is available at
// https://www.gnu.org/software/classpath/license.html.
//
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
// *****************************************************************************
Object.defineProperty(exports, "__esModule", { value: true });
const chai_1 = require("chai");
const key_store_server_1 = require("./key-store-server");
describe('KeyStoreServiceImpl', () => {
let keyStoreService;
let inMemoryProvider;
beforeEach(() => {
keyStoreService = new key_store_server_1.KeyStoreServiceImpl();
inMemoryProvider = new key_store_server_1.InMemoryCredentialsProvider();
// Force the service to use the in-memory provider for testing
// eslint-disable-next-line @typescript-eslint/no-explicit-any
keyStoreService.keytarImplementation = inMemoryProvider;
});
describe('keys', () => {
it('should return an empty array when no credentials exist for the service', async () => {
const result = await keyStoreService.keys('test-service');
(0, chai_1.expect)(result).to.be.an('array');
(0, chai_1.expect)(result).to.be.empty;
});
it('should return a single account key when one credential exists', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
const result = await keyStoreService.keys('test-service');
(0, chai_1.expect)(result).to.deep.equal(['account1']);
});
it('should return multiple account keys when multiple credentials exist', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
await keyStoreService.setPassword('test-service', 'account2', 'password2');
await keyStoreService.setPassword('test-service', 'account3', 'password3');
const result = await keyStoreService.keys('test-service');
(0, chai_1.expect)(result).to.have.lengthOf(3);
(0, chai_1.expect)(result).to.include.members(['account1', 'account2', 'account3']);
});
it('should only return keys for the specified service', async () => {
await keyStoreService.setPassword('service1', 'account1', 'password1');
await keyStoreService.setPassword('service2', 'account2', 'password2');
await keyStoreService.setPassword('service1', 'account3', 'password3');
const result = await keyStoreService.keys('service1');
(0, chai_1.expect)(result).to.have.lengthOf(2);
(0, chai_1.expect)(result).to.include.members(['account1', 'account3']);
(0, chai_1.expect)(result).to.not.include('account2');
});
it('should return updated keys after a credential is deleted', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
await keyStoreService.setPassword('test-service', 'account2', 'password2');
await keyStoreService.deletePassword('test-service', 'account1');
const result = await keyStoreService.keys('test-service');
(0, chai_1.expect)(result).to.deep.equal(['account2']);
});
it('should return updated keys after a credential password is updated', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
await keyStoreService.setPassword('test-service', 'account1', 'password2');
const result = await keyStoreService.keys('test-service');
(0, chai_1.expect)(result).to.deep.equal(['account1']);
});
it('should handle services with special characters in the name', async () => {
const specialService = 'test-service@#$%^&*()';
await keyStoreService.setPassword(specialService, 'account1', 'password1');
const result = await keyStoreService.keys(specialService);
(0, chai_1.expect)(result).to.deep.equal(['account1']);
});
it('should handle accounts with special characters in the name', async () => {
await keyStoreService.setPassword('test-service', 'user@example.com', 'password1');
await keyStoreService.setPassword('test-service', 'user-name_123', 'password2');
const result = await keyStoreService.keys('test-service');
(0, chai_1.expect)(result).to.have.lengthOf(2);
(0, chai_1.expect)(result).to.include.members(['user@example.com', 'user-name_123']);
});
});
describe('setPassword', () => {
it('should set a password for an account', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
const password = await keyStoreService.getPassword('test-service', 'account1');
(0, chai_1.expect)(password).to.equal('password1');
});
it('should update an existing password', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
await keyStoreService.setPassword('test-service', 'account1', 'password2');
const password = await keyStoreService.getPassword('test-service', 'account1');
(0, chai_1.expect)(password).to.equal('password2');
});
});
describe('getPassword', () => {
it('should return undefined when password does not exist', async () => {
const password = await keyStoreService.getPassword('test-service', 'nonexistent');
(0, chai_1.expect)(password).to.be.undefined;
});
it('should retrieve a stored password', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
const password = await keyStoreService.getPassword('test-service', 'account1');
(0, chai_1.expect)(password).to.equal('password1');
});
});
describe('deletePassword', () => {
it('should return false when deleting a non-existent password', async () => {
const result = await keyStoreService.deletePassword('test-service', 'nonexistent');
(0, chai_1.expect)(result).to.be.false;
});
it('should return true when deleting an existing password', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
const result = await keyStoreService.deletePassword('test-service', 'account1');
(0, chai_1.expect)(result).to.be.true;
});
it('should remove the password after deletion', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
await keyStoreService.deletePassword('test-service', 'account1');
const password = await keyStoreService.getPassword('test-service', 'account1');
(0, chai_1.expect)(password).to.be.undefined;
});
});
describe('findPassword', () => {
it('should return undefined when service has no credentials', async () => {
const result = await keyStoreService.findPassword('nonexistent-service');
(0, chai_1.expect)(result).to.be.undefined;
});
it('should return the service credentials as JSON string', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
const result = await keyStoreService.findPassword('test-service');
(0, chai_1.expect)(result).to.be.a('string');
});
});
describe('findCredentials', () => {
it('should return an empty array when no credentials exist', async () => {
const result = await keyStoreService.findCredentials('test-service');
(0, chai_1.expect)(result).to.be.an('array');
(0, chai_1.expect)(result).to.be.empty;
});
it('should return all credentials for a service', async () => {
await keyStoreService.setPassword('test-service', 'account1', 'password1');
await keyStoreService.setPassword('test-service', 'account2', 'password2');
const result = await keyStoreService.findCredentials('test-service');
(0, chai_1.expect)(result).to.have.lengthOf(2);
(0, chai_1.expect)(result).to.deep.include({ account: 'account1', password: 'password1' });
(0, chai_1.expect)(result).to.deep.include({ account: 'account2', password: 'password2' });
});
});
});
describe('InMemoryCredentialsProvider', () => {
let provider;
beforeEach(() => {
provider = new key_store_server_1.InMemoryCredentialsProvider();
});
describe('setPassword and getPassword', () => {
it('should store and retrieve a password', async () => {
await provider.setPassword('service1', 'account1', 'password1');
const result = await provider.getPassword('service1', 'account1');
(0, chai_1.expect)(result).to.equal('password1');
});
it('should return null for non-existent password', async () => {
const result = await provider.getPassword('service1', 'account1');
(0, chai_1.expect)(result).to.be.null;
});
});
describe('deletePassword', () => {
it('should return false when deleting non-existent password', async () => {
const result = await provider.deletePassword('service1', 'account1');
(0, chai_1.expect)(result).to.be.false;
});
it('should delete an existing password and return true', async () => {
await provider.setPassword('service1', 'account1', 'password1');
const result = await provider.deletePassword('service1', 'account1');
(0, chai_1.expect)(result).to.be.true;
const password = await provider.getPassword('service1', 'account1');
(0, chai_1.expect)(password).to.be.null;
});
it('should remove service entry when all accounts are deleted', async () => {
await provider.setPassword('service1', 'account1', 'password1');
await provider.deletePassword('service1', 'account1');
const credentials = await provider.findCredentials('service1');
(0, chai_1.expect)(credentials).to.be.empty;
});
});
describe('findPassword', () => {
it('should return null for non-existent service', async () => {
const result = await provider.findPassword('service1');
(0, chai_1.expect)(result).to.be.null;
});
it('should return JSON string of service credentials', async () => {
await provider.setPassword('service1', 'account1', 'password1');
const result = await provider.findPassword('service1');
(0, chai_1.expect)(result).to.be.a('string');
});
});
describe('findCredentials', () => {
it('should return empty array for non-existent service', async () => {
const result = await provider.findCredentials('service1');
(0, chai_1.expect)(result).to.be.an('array');
(0, chai_1.expect)(result).to.be.empty;
});
it('should return all credentials for a service', async () => {
await provider.setPassword('service1', 'account1', 'password1');
await provider.setPassword('service1', 'account2', 'password2');
const result = await provider.findCredentials('service1');
(0, chai_1.expect)(result).to.have.lengthOf(2);
(0, chai_1.expect)(result).to.deep.include({ account: 'account1', password: 'password1' });
(0, chai_1.expect)(result).to.deep.include({ account: 'account2', password: 'password2' });
});
});
describe('clear', () => {
it('should remove all stored credentials', async () => {
await provider.setPassword('service1', 'account1', 'password1');
await provider.setPassword('service2', 'account2', 'password2');
await provider.clear();
const credentials1 = await provider.findCredentials('service1');
const credentials2 = await provider.findCredentials('service2');
(0, chai_1.expect)(credentials1).to.be.empty;
(0, chai_1.expect)(credentials2).to.be.empty;
});
});
});
//# sourceMappingURL=key-store-server.spec.js.map