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

test.describe(
	'ADO-2362 ADO-2350 NDV Prevent clipping long parameters and scrolling to expression',
	{
		annotation: [{ type: 'owner', description: 'Adore' }],
	},
	() => {
		test('should show last parameters and open at scroll top of parameters', async ({ n8n }) => {
			await n8n.start.fromImportedWorkflow('Test-workflow-with-long-parameters.json');

			await n8n.canvas.openNode('Schedule Trigger');

			await expect(n8n.ndv.getInlineExpressionEditorInput().first()).toBeVisible();

			await n8n.ndv.close();

			await n8n.canvas.openNode('Edit Fields1');

			await expect(n8n.ndv.getInputLabel().nth(0)).toContainText('Mode');
			await expect(n8n.ndv.getInputLabel().nth(0)).toBeVisible();

			await expect(n8n.ndv.getInlineExpressionEditorInput()).toHaveCount(2);

			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(0)).toHaveText(
				'should be visible!',
			);
			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(0)).toBeVisible();

			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(1)).toHaveText('not visible');
			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(1)).toBeVisible();

			await n8n.ndv.close();
			await n8n.canvas.openNode('Schedule Trigger');

			await expect(n8n.ndv.getNthParameter(0)).toContainText(
				'This workflow will run on the schedule ',
			);
			await expect(n8n.ndv.getInputLabel().nth(0)).toBeVisible();

			await expect(n8n.ndv.getInlineExpressionEditorInput()).toHaveCount(2);

			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(0)).toHaveText('should be visible');
			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(0)).toBeVisible();

			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(1)).toHaveText('not visible');
			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(1)).not.toBeInViewport();

			await n8n.ndv.close();
			await n8n.canvas.openNode('Slack');

			await expect(n8n.ndv.getCredentialsLabel()).toBeVisible();

			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(0)).toHaveText('should be visible');
			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(0)).toBeVisible();

			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(1)).toHaveText('not visible');
			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(1)).not.toBeInViewport();
		});

		test('NODE-1272 ensure expressions scrolled to top, not middle', async ({ n8n }) => {
			await n8n.start.fromImportedWorkflow('Test-workflow-with-long-parameters.json');

			await n8n.canvas.openNode('With long expression');

			await expect(n8n.ndv.getInlineExpressionEditorInput().nth(0)).toBeVisible();

			const editor = n8n.ndv.getInlineExpressionEditorInput().nth(0);
			await expect(editor.locator('.cm-line').nth(0)).toHaveText('1 visible!');
			await expect(editor.locator('.cm-line').nth(0)).toBeVisible();
			await expect(editor.locator('.cm-line').nth(6)).toHaveText('7 not visible!');
			await expect(editor.locator('.cm-line').nth(6)).not.toBeInViewport();
		});
	},
);
