/**
 * Copyright Super iPaaS Integration LLC, an IBM Company 2024
 */
import { isPolicyKind } from './policy-helper';
import { KindEnums } from '@apic/api-model/common/StudioEnums.js';

// Mock message-helper to avoid chalk import issues
jest.mock('../../common/message-helper.js', () => ({
	showError: jest.fn(),
	showWarning: jest.fn(),
	showSuccess: jest.fn(),
	showInfo: jest.fn(),
	showMessage: jest.fn(),
}));

describe('policy helper function test suite', () => {
	it('should return true for valid policy kinds', () => {
		const validKinds = [
			KindEnums.Log,
			KindEnums.ErrorProcessing,
			KindEnums.IdentifyAndAuthorize,
			KindEnums.SetContextVariable,
			KindEnums.MonitorTraffic,
			KindEnums.CacheServiceResult,
			KindEnums.RateLimiter,
			KindEnums.InvokeAWSLambdaFunction,
			KindEnums.DataMasking,
			KindEnums.HTTPInvoke,
			KindEnums.InvokeMessagingExtension,
			KindEnums.TransformRequest,
			KindEnums.TransformResponse,
			KindEnums.ValidateAPISpecification,
			KindEnums.Route,
			KindEnums.Transport
		];
        
		validKinds.forEach(kind => {
			expect(isPolicyKind(kind)).toBe(true);
		});
	});

	it('should return false for invalid policy kinds', () => {
		const invalidKinds = [
			'UnknownKind1',
			'UnknownKind2',
			'AnotherUnknownKind'
		];

		invalidKinds.forEach(kind => {
			expect(isPolicyKind(kind)).toBe(false);
		});
	});

	it('should return false for an empty string', () => {
		expect(isPolicyKind('')).toBe(false);
	});

	it('should return false for a null value', () => {
		expect(isPolicyKind(null as unknown as string)).toBe(false);
	});

	it('should return false for a number', () => {
		expect(isPolicyKind(123 as unknown as string)).toBe(false);
	});
});
