import type { ICredentialDataDecryptedObject, IHttpRequestOptions } from 'n8n-workflow';

import { PerplexityApi } from '../../../../credentials/PerplexityApi.credentials';

describe('Perplexity API Credentials', () => {
	describe('authenticate', () => {
		const perplexityApi = new PerplexityApi();

		it('should generate a valid authorization header', async () => {
			const credentials: ICredentialDataDecryptedObject = {
				apiKey: 'test-api-key',
				baseUrl: 'https://api.perplexity.ai',
			};

			const requestOptions: IHttpRequestOptions = {
				url: 'https://api.perplexity.ai/chat/completions',
				method: 'POST',
				body: {
					model: 'sonar',
					messages: [{ role: 'user', content: 'test' }],
				},
				headers: {
					'Content-Type': 'application/json',
				},
				json: true,
			};

			const authProperty = perplexityApi.authenticate;

			const result = {
				...requestOptions,
				headers: {
					...requestOptions.headers,
					Authorization: `Bearer ${credentials.apiKey}`,
				},
			};

			expect(result.headers?.Authorization).toBe('Bearer test-api-key');

			expect(authProperty.type).toBe('generic');
		});
	});

	describe('test', () => {
		const perplexityApi = new PerplexityApi();

		it('should have a valid test property', () => {
			expect(perplexityApi.test).toBeDefined();
			expect(perplexityApi.test.request).toBeDefined();
		});
	});
});
