UNPKG

@deploystack/docker-to-iac

Version:

Translate docker run and docker compose file to Infrastructure as Code

180 lines (179 loc) 7.47 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const isRenderDatabaseService_1 = require("../../../src/utils/isRenderDatabaseService"); const base_parser_1 = require("../../../src/parsers/base-parser"); // First, import the module we'll be mocking const getImageUrlModule = __importStar(require("../../../src/utils/getImageUrl")); // Mock dependencies vitest_1.vi.mock('../../../src/utils/getImageUrl', () => ({ getImageUrl: vitest_1.vi.fn((image) => { // Simple mock implementation that returns predictable URLs if (typeof image === 'string') { if (image.includes('postgres')) return 'docker.io/library/postgres'; if (image.includes('redis')) return 'docker.io/library/redis'; if (image.includes('mysql')) return 'docker.io/library/mysql'; if (image.includes('mariadb')) return 'docker.io/library/mariadb'; return `docker.io/library/${image.split(':')[0]}`; } // For DockerImageInfo objects const repo = typeof image === 'object' && image?.repository; if (repo && typeof repo === 'string') { if (repo.includes('postgres')) return 'docker.io/library/postgres'; if (repo.includes('redis')) return 'docker.io/library/redis'; if (repo.includes('mysql')) return 'docker.io/library/mysql'; if (repo.includes('mariadb')) return 'docker.io/library/mariadb'; } return 'docker.io/library/unknown'; }) })); vitest_1.vi.mock('../../../src/utils/constructImageString', () => ({ constructImageString: vitest_1.vi.fn((image) => { if (image.tag) { return `${image.repository}:${image.tag}`; } return image.repository; }) })); vitest_1.vi.mock('../../../src/config/render/service-types', () => ({ renderServiceTypesConfig: { serviceTypes: { 'docker.io/library/postgres': { type: 'database', description: 'PostgreSQL database', versions: '*', isManaged: true }, 'docker.io/library/redis': { type: 'redis', description: 'Redis database', versions: '*', isManaged: true }, 'docker.io/library/mysql': { type: 'pserv', description: 'MySQL database service', versions: '*' }, 'docker.io/library/mariadb': { type: 'pserv', description: 'MariaDB database service', versions: '*' } } } })); (0, vitest_1.describe)('isRenderDatabaseService', () => { (0, vitest_1.test)('should return true for postgres image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'postgres', tag: 'latest' }; const result = (0, isRenderDatabaseService_1.isRenderDatabaseService)(image); (0, vitest_1.expect)(result).toBe(true); }); (0, vitest_1.test)('should return true for redis image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'redis', tag: 'alpine' }; const result = (0, isRenderDatabaseService_1.isRenderDatabaseService)(image); (0, vitest_1.expect)(result).toBe(true); }); (0, vitest_1.test)('should return false for mysql image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'mysql', tag: '8.0' }; const result = (0, isRenderDatabaseService_1.isRenderDatabaseService)(image); (0, vitest_1.expect)(result).toBe(false); }); (0, vitest_1.test)('should return false for mariadb image', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'mariadb', tag: 'latest' }; const result = (0, isRenderDatabaseService_1.isRenderDatabaseService)(image); (0, vitest_1.expect)(result).toBe(false); }); (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, isRenderDatabaseService_1.isRenderDatabaseService)(image); (0, vitest_1.expect)(result).toBe(false); }); (0, vitest_1.test)('should handle custom images containing postgres in name', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'bitnami/postgresql', tag: 'latest' }; // Override the mock for this specific test const mockGetImageUrl = vitest_1.vi.mocked(getImageUrlModule.getImageUrl); mockGetImageUrl.mockReturnValueOnce('docker.io/bitnami/postgresql'); const result = (0, isRenderDatabaseService_1.isRenderDatabaseService)(image); // Implementation checks if name includes postgres (0, vitest_1.expect)(result).toBe(true); }); (0, vitest_1.test)('should handle custom images containing redis in name', () => { const image = { registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'bitnami/redis', tag: 'latest' }; // Override the mock for this specific test const mockGetImageUrl = vitest_1.vi.mocked(getImageUrlModule.getImageUrl); mockGetImageUrl.mockReturnValueOnce('docker.io/bitnami/redis'); const result = (0, isRenderDatabaseService_1.isRenderDatabaseService)(image); // Implementation checks if name includes redis (0, vitest_1.expect)(result).toBe(true); }); });