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

test.describe(
	'Node Creator Actions',
	{
		annotation: [{ type: 'owner', description: 'Adore' }],
	},
	() => {
		test.beforeEach(async ({ n8n }) => {
			await n8n.start.fromBlankCanvas();
		});

		test('should add node to canvas from actions panel', async ({ n8n }) => {
			const editImageNode = 'Edit Image';

			await n8n.canvas.nodeCreator.open();
			await n8n.canvas.nodeCreator.searchFor(editImageNode);
			await n8n.canvas.nodeCreator.selectItem(editImageNode);

			await expect(n8n.canvas.nodeCreator.getActiveSubcategory()).toContainText(editImageNode);
			await n8n.canvas.nodeCreator.selectItem('Crop Image');
			await expect(n8n.ndv.container).toBeVisible();
			await n8n.page.keyboard.press('Escape');

			await expect(n8n.canvas.getCanvasNodes()).toHaveCount(2);
		});

		test('should search through actions and confirm added action', async ({ n8n }) => {
			await n8n.canvas.nodeCreator.open();
			await n8n.canvas.nodeCreator.searchFor('ftp');
			await n8n.canvas.nodeCreator.selectItem('FTP');

			await expect(n8n.canvas.nodeCreator.getActiveSubcategory()).toContainText('FTP');
			await n8n.canvas.nodeCreator.clearSearch();
			await n8n.canvas.nodeCreator.searchFor('rename');
			await n8n.canvas.nodeCreator.selectItem('Rename');

			await expect(n8n.ndv.container).toBeVisible();
			await n8n.page.keyboard.press('Escape');

			await expect(n8n.canvas.getCanvasNodes()).toHaveCount(2);
		});

		test('should show multiple actions for multi-action nodes', async ({ n8n }) => {
			await n8n.canvas.nodeCreator.open();
			await n8n.canvas.nodeCreator.searchFor('OpenWeatherMap');
			await n8n.canvas.nodeCreator.selectItem('OpenWeatherMap');

			await expect(n8n.canvas.nodeCreator.getActiveSubcategory()).toContainText('OpenWeatherMap');
			await expect(n8n.canvas.nodeCreator.getNodeItems().first()).toBeVisible();
			await expect(n8n.canvas.nodeCreator.getNodeItems().nth(1)).toBeVisible();

			await n8n.canvas.nodeCreator.getNodeItems().first().click();
			await n8n.page.keyboard.press('Escape');
			await expect(n8n.canvas.getCanvasNodes()).toHaveCount(2);
		});

		test('should add node with specific operation configuration', async ({ n8n }) => {
			await n8n.canvas.nodeCreator.open();
			await n8n.canvas.nodeCreator.searchFor('Slack');
			await n8n.canvas.nodeCreator.selectItem('Slack');

			await expect(n8n.canvas.nodeCreator.getActiveSubcategory()).toContainText('Slack');
			await n8n.canvas.nodeCreator.getNodeItems().first().click();
			await n8n.page.keyboard.press('Escape');
			await expect(n8n.canvas.getCanvasNodes()).toHaveCount(1);
		});
	},
);
