kubricate
Version:
A TypeScript framework for building reusable, type-safe Kubernetes infrastructure — without the YAML mess.
121 lines (119 loc) • 6.04 kB
JavaScript
;
var _vitest = /*#__PURE__*/require("vitest");
var _InMemoryConnector = /*#__PURE__*/require("./connectors/InMemoryConnector.js");
var _InMemoryProvider = /*#__PURE__*/require("./providers/InMemoryProvider.js");
var _SecretManager = /*#__PURE__*/require("./SecretManager.js");
// SecretManager.test.ts
(0, _vitest.describe)('SecretManager', () => {
let manager;
(0, _vitest.beforeEach)(() => {
manager = new _SecretManager.SecretManager();
});
(0, _vitest.it)('throws if no connector or provider is registered', () => {
(0, _vitest.expect)(() => manager.build()).toThrow('No connectors registered');
});
(0, _vitest.it)('adds and retrieves a connector and provider', () => {
manager = manager.addConnector('memory', new _InMemoryConnector.InMemoryConnector({}));
manager = manager.addProvider('kube', new _InMemoryProvider.InMemoryProvider({
name: 'my-secret'
}));
(0, _vitest.expect)(() => manager.build()).toThrow('No secrets registered');
});
(0, _vitest.it)('adds a secret with full options object', () => {
manager = manager.addConnector('memory', new _InMemoryConnector.InMemoryConnector({
DB_PASS: 'pw'
})).addProvider('kube', new _InMemoryProvider.InMemoryProvider({
name: 'secret'
})).setDefaultConnector('memory').setDefaultProvider('kube').addSecret({
name: 'DB_PASS',
connector: 'memory',
provider: 'kube'
});
(0, _vitest.expect)(() => manager.build()).not.toThrow();
});
(0, _vitest.it)('adds a secret and prepares it', async () => {
manager = manager.addConnector('memory', new _InMemoryConnector.InMemoryConnector({
API_KEY: '12345'
})).addProvider('kube', new _InMemoryProvider.InMemoryProvider({
name: 'my-secret'
})).setDefaultConnector('memory').setDefaultProvider('kube').addSecret('API_KEY');
const result = await manager.prepare();
(0, _vitest.expect)(result.length).toBe(1);
(0, _vitest.expect)(result[0].name).toBe('API_KEY');
(0, _vitest.expect)(result[0].value).toBe('12345');
(0, _vitest.expect)(Array.isArray(result[0].effects)).toBe(true);
});
(0, _vitest.it)('throws if connector or provider does not exist', () => {
manager = manager.addConnector('valid', new _InMemoryConnector.InMemoryConnector({}));
(0, _vitest.expect)(() => manager.getConnector('not-exist')).toThrow('Connector not-exist not found');
(0, _vitest.expect)(() => manager.getProvider('not-exist')).toThrow('Provider not-exist not found');
});
(0, _vitest.it)('prevents duplicate connector, provider, and secret', () => {
manager = manager.addConnector('memory', new _InMemoryConnector.InMemoryConnector({}));
(0, _vitest.expect)(() => manager.addConnector('memory', new _InMemoryConnector.InMemoryConnector({}))).toThrow('Connector memory already exists');
manager = manager.addProvider('kube', new _InMemoryProvider.InMemoryProvider({
name: 'my-secret'
}));
(0, _vitest.expect)(() => manager.addProvider('kube', new _InMemoryProvider.InMemoryProvider({
name: 'my-secret'
}))).toThrow('Provider kube already exists');
manager = manager.addSecret('DUPLICATE_SECRET');
(0, _vitest.expect)(() => manager.addSecret('DUPLICATE_SECRET')).toThrow('Secret DUPLICATE_SECRET already exists');
});
(0, _vitest.it)('auto-assigns default connector/provider when only one is registered', async () => {
manager = manager.addConnector('memory', new _InMemoryConnector.InMemoryConnector({
AUTO: 'ok'
})).addProvider('kube', new _InMemoryProvider.InMemoryProvider({
name: 'auto-secret'
})).addSecret('AUTO');
const result = await manager.prepare();
(0, _vitest.expect)(result).toHaveLength(1);
(0, _vitest.expect)(result[0].name).toBe('AUTO');
(0, _vitest.expect)(result[0].value).toBe('ok');
});
(0, _vitest.it)('throws when only secrets exist but no providers or connectors', () => {
manager = manager.addSecret('MISSING_BACKENDS');
(0, _vitest.expect)(() => manager.build()).toThrow('No connectors registered');
});
(0, _vitest.it)('throws when multiple providers but no default set', () => {
manager = manager.addConnector('memory', new _InMemoryConnector.InMemoryConnector({
X: '1'
})).addProvider('kube1', new _InMemoryProvider.InMemoryProvider({
name: 's1'
})).addProvider('kube2', new _InMemoryProvider.InMemoryProvider({
name: 's2'
})).addSecret('X');
(0, _vitest.expect)(() => manager.build()).toThrow('No default provider set, and multiple providers registered');
});
(0, _vitest.it)('throws when multiple connectors but no default set', () => {
manager = manager.addConnector('m1', new _InMemoryConnector.InMemoryConnector({
Y: '2'
})).addConnector('m2', new _InMemoryConnector.InMemoryConnector({
Y: '2'
})).addProvider('kube', new _InMemoryProvider.InMemoryProvider({
name: 's'
})).addSecret('Y');
(0, _vitest.expect)(() => manager.build()).toThrow('No default connector set, and multiple connectors registered');
});
(0, _vitest.it)('throws when adding duplicate secret via object form', () => {
manager = manager.addConnector('memory', new _InMemoryConnector.InMemoryConnector({})).addProvider('kube', new _InMemoryProvider.InMemoryProvider({
name: 'my-secret'
})).setDefaultConnector('memory').setDefaultProvider('kube').addSecret({
name: 'DB_PASSWORD',
connector: 'memory',
provider: 'kube'
});
(0, _vitest.expect)(() =>
// Attempting to add the same secret again
manager.addSecret({
name: 'DB_PASSWORD'
})).toThrow('Secret DB_PASSWORD already exists');
});
(0, _vitest.it)('throws when no providers are registered', () => {
manager = manager.addConnector('memory', new _InMemoryConnector.InMemoryConnector({
MY_TOKEN: 'secure'
})).addSecret('MY_TOKEN');
(0, _vitest.expect)(() => manager.build()).toThrow('No providers registered');
});
});
//# sourceMappingURL=SecretManager.test.js.map