/**
* Copyright Super iPaaS Integration LLC, an IBM Company 2024
*/
import {RefParser} from '../../src/parsers/ref.parser.js';

jest.mock('../../src/service/log-wrapper.ts');

describe('RefParser', () => {
	let refParser: RefParser;

	beforeEach(() => {
		refParser = new RefParser();
	});

	it('should parse reference with namespace, name, and version', () => {
		const ref = 'namespace:name:1.0.0';
		const result = refParser.parseRef(ref);
		expect(result).toEqual({
			namespace: 'namespace',
			name: 'name',
			version: '1.0.0'
		});
	});

	it('should parse reference with name and version', () => {
		const ref = 'name:1.0.0';
		const result = refParser.parseRef(ref);
		expect(result).toEqual({
			namespace: undefined,
			name: 'name',
			version: '1.0.0'
		});
	});

	it('should throw an error for invalid reference format', () => {
		const ref = 'invalid-format';
		expect(() => refParser.parseRef(ref)).toThrow('Invalid reference format: invalid-format');
	});

	it('should throw an error for empty reference', () => {
		const ref = '';
		expect(() => refParser.parseRef(ref)).toThrow('Invalid reference format: ');
	});

	it('should throw an error for reference with more than three parts', () => {
		const ref = 'namespace:name:1.0.0:extra';
		expect(() => refParser.parseRef(ref)).toThrow('Invalid reference format: namespace:name:1.0.0:extra');
	});
});
