import { test, expect } from '../../../fixtures/base';

test.describe(
	'OAuth Credentials',
	{
		annotation: [{ type: 'owner', description: 'Identity & Access' }],
	},
	() => {
		test('should create and connect with Google OAuth2', async ({ n8n }) => {
			const projectId = await n8n.start.fromNewProjectBlankCanvas();
			await n8n.navigate.toCredentials(projectId);
			await n8n.credentials.emptyListCreateCredentialButton.click();
			await n8n.credentials.createCredentialFromCredentialPicker(
				'Google OAuth2 API',
				{
					clientId: 'test-key',
					clientSecret: 'test-secret',
				},
				{ closeDialog: false, skipSave: true },
			);

			const popupPromise = n8n.page.waitForEvent('popup');
			await n8n.credentials.credentialModal.oauthConnectButton.click();

			const popup = await popupPromise;
			const popupUrl = popup.url();
			expect(popupUrl).toContain('accounts.google.com');
			expect(popupUrl).toContain('client_id=test-key');

			await popup.close();

			await n8n.page.evaluate(() => {
				const channel = new BroadcastChannel('oauth-callback');
				channel.postMessage('success');
			});

			await expect(n8n.credentials.credentialModal.oauthConnectSuccessBanner).toContainText(
				'Account connected',
			);
		});
	},
);
