@deploystack/docker-to-iac
Version:
Translate docker run and docker compose file to Infrastructure as Code
86 lines (85 loc) • 4.63 kB
JavaScript
"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');
});
});