kubricate
Version:
A TypeScript framework for building reusable, type-safe Kubernetes infrastructure — without the YAML mess.
105 lines (103 loc) • 3.63 kB
JavaScript
"use strict";
var _vitest = /*#__PURE__*/require("vitest");
var _InMemoryProvider = /*#__PURE__*/require("./InMemoryProvider.js");
/* eslint-disable @typescript-eslint/no-explicit-any */
(0, _vitest.describe)('InMemoryProvider', () => {
(0, _vitest.it)('should return correct path for env strategy', () => {
const provider = new _InMemoryProvider.InMemoryProvider();
const path = provider.getTargetPath({
kind: 'env',
containerIndex: 1
});
(0, _vitest.expect)(path).toBe('spec.template.spec.containers[1].env');
});
(0, _vitest.it)('should fallback to index 0 for env path if not provided', () => {
const provider = new _InMemoryProvider.InMemoryProvider();
(0, _vitest.expect)(provider.getTargetPath({
kind: 'env'
})).toBe('spec.template.spec.containers[0].env');
});
(0, _vitest.it)('should throw for unsupported strategy', () => {
const provider = new _InMemoryProvider.InMemoryProvider();
(0, _vitest.expect)(() => provider.getTargetPath({
kind: 'volume'
})).toThrow('[InMemoryProvider] Unsupported strategy: volume');
});
(0, _vitest.it)('should return correct injection payload', () => {
const provider = new _InMemoryProvider.InMemoryProvider({
name: 'my-secret'
});
provider.setInjects([{
meta: {
secretName: 'SECRET1',
targetName: 'API_KEY'
},
path: 'some.path',
provider,
providerId: 'p-id',
resourceId: 'res-id'
}]);
(0, _vitest.expect)(provider.getInjectionPayload()).toEqual([{
name: 'API_KEY',
valueFrom: {
secretKeyRef: {
name: 'my-secret',
key: 'SECRET1'
}
}
}]);
});
(0, _vitest.it)('should fallback to "in-memory" if no name in config', () => {
const provider = new _InMemoryProvider.InMemoryProvider();
provider.setInjects([{
meta: {
secretName: 'S1',
targetName: 'ENV1'
},
path: '',
provider,
providerId: '',
resourceId: ''
}]);
const payload = provider.getInjectionPayload();
(0, _vitest.expect)(payload[0].valueFrom.secretKeyRef.name).toBe('in-memory');
});
(0, _vitest.it)('should prepare a secret into a PreparedEffect', () => {
const provider = new _InMemoryProvider.InMemoryProvider({
name: 'store-a'
});
const result = provider.prepare('TOKEN', 'abc123');
(0, _vitest.expect)(result).toEqual([{
secretName: 'TOKEN',
type: 'custom',
providerName: undefined,
value: {
storeName: 'store-a',
rawData: {
TOKEN: 'abc123'
}
}
}]);
});
(0, _vitest.it)('should merge multiple effects correctly using mergeSecrets()', () => {
const provider = new _InMemoryProvider.InMemoryProvider({
name: 'merged'
});
const effects = [provider.prepare('DB_USER', 'admin')[0], provider.prepare('DB_PASS', '1234')[0]];
const result = provider.mergeSecrets(effects);
(0, _vitest.expect)(result).toHaveLength(1);
(0, _vitest.expect)(result[0].value.rawData).toEqual({
DB_USER: 'admin',
DB_PASS: '1234'
});
});
(0, _vitest.it)('should throw on merge if keys conflict in same store', () => {
const provider = new _InMemoryProvider.InMemoryProvider({
name: 'store-x'
});
const eff1 = provider.prepare('KEY', 'val1')[0];
const eff2 = provider.prepare('KEY', 'val2')[0];
(0, _vitest.expect)(() => provider.mergeSecrets([eff1, eff2])).toThrow(/Conflict detected: key "KEY" already exists in Secret "store-x"/);
});
});
//# sourceMappingURL=InMemoryProvider.test.js.map