UNPKG

@deploystack/docker-to-iac

Version:

Translate docker run and docker compose file to Infrastructure as Code

86 lines (85 loc) 4.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const getImageUrl_1 = require("../../../src/utils/getImageUrl"); const parseDockerImage_1 = require("../../../src/utils/parseDockerImage"); const base_parser_1 = require("../../../src/parsers/base-parser"); // Mock parseDockerImage to control its output vitest_1.vi.mock('../../../src/utils/parseDockerImage', () => ({ parseDockerImage: vitest_1.vi.fn() })); (0, vitest_1.describe)('getImageUrl', () => { (0, vitest_1.test)('should format Docker Hub official image', () => { // Mock the implementation for this test parseDockerImage_1.parseDockerImage.mockReturnValue({ registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'nginx', tag: 'latest' }); const result = (0, getImageUrl_1.getImageUrl)('nginx:latest'); (0, vitest_1.expect)(result).toBe('docker.io/library/nginx:latest'); (0, vitest_1.expect)(parseDockerImage_1.parseDockerImage).toHaveBeenCalledWith('nginx:latest'); }); (0, vitest_1.test)('should format Docker Hub user image', () => { parseDockerImage_1.parseDockerImage.mockReturnValue({ registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'user/nginx', tag: 'latest' }); const result = (0, getImageUrl_1.getImageUrl)('user/nginx:latest'); (0, vitest_1.expect)(result).toBe('docker.io/user/nginx:latest'); (0, vitest_1.expect)(parseDockerImage_1.parseDockerImage).toHaveBeenCalledWith('user/nginx:latest'); }); (0, vitest_1.test)('should format GitHub Container Registry image', () => { parseDockerImage_1.parseDockerImage.mockReturnValue({ registry_type: base_parser_1.RegistryType.GHCR, repository: 'user/app', tag: 'v1.0' }); const result = (0, getImageUrl_1.getImageUrl)('ghcr.io/user/app:v1.0'); (0, vitest_1.expect)(result).toBe('ghcr.io/user/app:v1.0'); (0, vitest_1.expect)(parseDockerImage_1.parseDockerImage).toHaveBeenCalledWith('ghcr.io/user/app:v1.0'); }); (0, vitest_1.test)('should handle images without tags', () => { parseDockerImage_1.parseDockerImage.mockReturnValue({ registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'redis' }); const result = (0, getImageUrl_1.getImageUrl)('redis'); (0, vitest_1.expect)(result).toBe('docker.io/library/redis'); (0, vitest_1.expect)(parseDockerImage_1.parseDockerImage).toHaveBeenCalledWith('redis'); }); (0, vitest_1.test)('should handle custom registry URLs', () => { parseDockerImage_1.parseDockerImage.mockReturnValue({ registry_type: 'CUSTOM', repository: 'project/app', tag: 'latest' }); const result = (0, getImageUrl_1.getImageUrl)('custom.registry.com/project/app:latest'); // For custom registries, the function should return the original string (0, vitest_1.expect)(result).toBe('custom.registry.com/project/app:latest'); (0, vitest_1.expect)(parseDockerImage_1.parseDockerImage).toHaveBeenCalledWith('custom.registry.com/project/app:latest'); }); (0, vitest_1.test)('should exclude tag from image URL when specified', () => { parseDockerImage_1.parseDockerImage.mockReturnValue({ registry_type: base_parser_1.RegistryType.DOCKER_HUB, repository: 'nginx', tag: 'latest' }); const result = (0, getImageUrl_1.getImageUrl)('nginx:latest', false); (0, vitest_1.expect)(result).toBe('docker.io/library/nginx'); (0, vitest_1.expect)(parseDockerImage_1.parseDockerImage).toHaveBeenCalledWith('nginx:latest'); }); (0, vitest_1.test)('should exclude tag from custom registry URLs when specified', () => { // This test specifically targets lines 25-28 which were uncovered parseDockerImage_1.parseDockerImage.mockReturnValue({ registry_type: 'CUSTOM', repository: 'custom/image', tag: 'v1.2.3' }); const result = (0, getImageUrl_1.getImageUrl)('custom.registry.com/custom/image:v1.2.3', false); // For custom registries with includeTag=false, it should return just the part before the colon (0, vitest_1.expect)(result).toBe('custom.registry.com/custom/image'); (0, vitest_1.expect)(parseDockerImage_1.parseDockerImage).toHaveBeenCalledWith('custom.registry.com/custom/image:v1.2.3'); }); });