UNPKG

@deploystack/docker-to-iac

Version:

Translate docker run and docker compose file to Infrastructure as Code

227 lines (226 loc) 8.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const getHelmDatabaseType_1 = require("../../../src/utils/getHelmDatabaseType"); const base_parser_1 = require("../../../src/parsers/base-parser"); // Mock dependencies vitest_1.vi.mock('../../../src/utils/getImageUrl', () => ({ getImageUrl: vitest_1.vi.fn((image) => { // Simplified mock that just returns the repository with docker.io/library/ prefix if (typeof image === 'string') { return `docker.io/library/${image.split(':')[0]}`; } return 'docker.io/library/unknown'; }) })); vitest_1.vi.mock('../../../src/utils/constructImageString', () => ({ constructImageString: vitest_1.vi.fn((image) => { // Simple mock that just returns the repository and tag if (image.tag) { return `${image.repository}:${image.tag}`; } return image.repository; }) })); vitest_1.vi.mock('../../../src/config/helm/database-types', () => ({ helmDatabaseConfig: { databases: { 'docker.io/library/postgres': { name: 'postgresql', version: '12.1.3', repository: 'https://charts.bitnami.com/bitnami', valueTemplate: { auth: { username: 'postgres', password: 'postgres', database: 'postgres' } } }, 'docker.io/library/mysql': { name: 'mysql', version: '9.4.5', repository: 'https://charts.bitnami.com/bitnami', valueTemplate: { auth: { rootPassword: 'mysql', database: 'mysql' } } }, 'docker.io/library/redis': { name: 'redis', version: '17.11.3', repository: 'https://charts.bitnami.com/bitnami', valueTemplate: { auth: { password: 'redis' } } }, 'docker.io/library/mongodb': { name: 'mongodb', version: '13.9.1', repository: 'https://charts.bitnami.com/bitnami', valueTemplate: { auth: { rootPassword: 'mongodb', database: 'mongodb' } } } } } })); (0, vitest_1.describe)('getHelmDatabaseType', () => { (0, vitest_1.test)('should return PostgreSQL config for postgres image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'postgres', tag: 'latest' }; const result = (0, getHelmDatabaseType_1.getHelmDatabaseType)(image); (0, vitest_1.expect)(result).toEqual({ name: 'postgresql', version: '12.1.3', repository: 'https://charts.bitnami.com/bitnami', valueTemplate: { auth: { username: 'postgres', password: 'postgres', database: 'postgres' } } }); }); (0, vitest_1.test)('should return MySQL config for mysql image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'mysql', tag: '8.0' }; const result = (0, getHelmDatabaseType_1.getHelmDatabaseType)(image); (0, vitest_1.expect)(result).toEqual({ name: 'mysql', version: '9.4.5', repository: 'https://charts.bitnami.com/bitnami', valueTemplate: { auth: { rootPassword: 'mysql', database: 'mysql' } } }); }); (0, vitest_1.test)('should return Redis config for redis image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'redis', tag: 'alpine' }; const result = (0, getHelmDatabaseType_1.getHelmDatabaseType)(image); (0, vitest_1.expect)(result).toEqual({ name: 'redis', version: '17.11.3', repository: 'https://charts.bitnami.com/bitnami', valueTemplate: { auth: { password: 'redis' } } }); }); (0, vitest_1.test)('should return MongoDB config for mongodb image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'mongodb', tag: 'latest' }; const result = (0, getHelmDatabaseType_1.getHelmDatabaseType)(image); (0, vitest_1.expect)(result).toEqual({ name: 'mongodb', version: '13.9.1', repository: 'https://charts.bitnami.com/bitnami', valueTemplate: { auth: { rootPassword: 'mongodb', database: 'mongodb' } } }); }); (0, vitest_1.test)('should return null for non-database image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'nginx', tag: 'latest' }; const result = (0, getHelmDatabaseType_1.getHelmDatabaseType)(image); (0, vitest_1.expect)(result).toBeNull(); }); (0, vitest_1.test)('should return null for unknown database image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'cassandra', tag: 'latest' }; const result = (0, getHelmDatabaseType_1.getHelmDatabaseType)(image); (0, vitest_1.expect)(result).toBeNull(); }); }); (0, vitest_1.describe)('isHelmManagedDatabase', () => { (0, vitest_1.test)('should return true for PostgreSQL image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'postgres', tag: 'latest' }; const result = (0, getHelmDatabaseType_1.isHelmManagedDatabase)(image); (0, vitest_1.expect)(result).toBe(true); }); (0, vitest_1.test)('should return true for MySQL image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'mysql', tag: '8.0' }; const result = (0, getHelmDatabaseType_1.isHelmManagedDatabase)(image); (0, vitest_1.expect)(result).toBe(true); }); (0, vitest_1.test)('should return false for non-database image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'nginx', tag: 'latest' }; const result = (0, getHelmDatabaseType_1.isHelmManagedDatabase)(image); (0, vitest_1.expect)(result).toBe(false); }); (0, vitest_1.test)('should return false for unknown database image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'cassandra', tag: 'latest' }; const result = (0, getHelmDatabaseType_1.isHelmManagedDatabase)(image); (0, vitest_1.expect)(result).toBe(false); }); (0, vitest_1.test)('should handle image without tag', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'postgres' }; const result = (0, getHelmDatabaseType_1.isHelmManagedDatabase)(image); (0, vitest_1.expect)(result).toBe(true); }); (0, vitest_1.test)('should handle image with registry', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, registry: 'docker.io', repository: 'mysql', tag: 'latest' }; const result = (0, getHelmDatabaseType_1.isHelmManagedDatabase)(image); (0, vitest_1.expect)(result).toBe(true); }); });