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

test.describe('AI-812-partial-execs-broken-when-using-chat-trigger', {
	annotation: [
		{ type: 'owner', description: 'AI' },
	],
}, () => {
	test.beforeEach(async ({ n8n }) => {
		await n8n.start.fromImportedWorkflow('Test_chat_partial_execution.json');
		await n8n.notifications.quickCloseAll();
		await n8n.canvas.clickZoomToFitButton();
		await n8n.canvas.deselectAll();
	});

	test.afterEach(async ({ n8n }) => {
		await n8n.notifications.quickCloseAll();
		await n8n.canvas.logsPanel.clearExecutionData();
		await n8n.canvas.logsPanel.sendManualChatMessage('Test Full Execution');

		await expect(n8n.canvas.logsPanel.getManualChatMessages()).toHaveCount(4);

		await expect(n8n.canvas.logsPanel.getManualChatMessages().last()).toContainText(
			'Set 3 with chatInput: Test Full Execution',
		);
	});

	test('should do partial execution when using chat trigger and clicking NDV execute node', async ({
		n8n,
	}) => {
		await n8n.canvas.openNode('Edit Fields1');
		await n8n.ndv.execute();

		await expect(n8n.canvas.logsPanel.getManualChatModal()).toBeVisible();
		await n8n.canvas.logsPanel.sendManualChatMessage('Test Partial Execution');

		await expect(n8n.canvas.logsPanel.getManualChatMessages()).toHaveCount(2);
		await expect(n8n.canvas.logsPanel.getManualChatMessages().first()).toContainText(
			'Test Partial Execution',
		);
		await expect(n8n.canvas.logsPanel.getManualChatMessages().last()).toContainText(
			'Set 2 with chatInput: Test Partial Execution',
		);
	});

	test('should do partial execution when using chat trigger and context-menu execute node', async ({
		n8n,
	}) => {
		// Workaround to prevent the context menu be blocked by the tabbar
		await n8n.canvas.dragNodeToRelativePosition('Edit Fields', 0, -100);
		await n8n.canvas.executeNodeFromContextMenu('Edit Fields');

		await expect(n8n.canvas.logsPanel.getManualChatModal()).toBeVisible();
		await n8n.canvas.logsPanel.sendManualChatMessage('Test Partial Execution');

		await expect(n8n.canvas.logsPanel.getManualChatMessages()).toHaveCount(2);
		await expect(n8n.canvas.logsPanel.getManualChatMessages().first()).toContainText(
			'Test Partial Execution',
		);
		await expect(n8n.canvas.logsPanel.getManualChatMessages().last()).toContainText(
			'Set 1 with chatInput: Test Partial Execution',
		);
	});
});
