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

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

		test('should open node creator on trigger tab if no trigger is on canvas', async ({ n8n }) => {
			await n8n.canvas.clickCanvasPlusButton();
			await expect(n8n.canvas.nodeCreator.getRoot()).toBeVisible();
			await expect(n8n.canvas.nodeCreator.getTriggerText()).toBeVisible();
		});

		test('should navigate subcategory and return', async ({ n8n }) => {
			await n8n.canvas.nodeCreator.open();

			await n8n.canvas.nodeCreator.navigateToSubcategory('On app event');
			await expect(n8n.canvas.nodeCreator.getActiveSubcategory()).toContainText('On app event');

			await n8n.canvas.nodeCreator.goBackFromSubcategory();
			await expect(n8n.canvas.nodeCreator.getActiveSubcategory()).not.toContainText('On app event');
		});

		test('should search for nodes with various queries', async ({ n8n }) => {
			await n8n.canvas.nodeCreator.open();

			await n8n.canvas.nodeCreator.searchFor('manual');
			await expect(n8n.canvas.nodeCreator.getNodeItems()).toHaveCount(1);

			await n8n.canvas.nodeCreator.clearSearch();
			await n8n.canvas.nodeCreator.searchFor('manual123');
			await expect(n8n.canvas.nodeCreator.getNodeItems()).toHaveCount(0);
			await expect(n8n.canvas.nodeCreator.getNoResults()).toBeVisible();
			await expect(n8n.canvas.nodeCreator.getNoResults()).toContainText(
				"We didn't make that... yet",
			);

			await n8n.canvas.nodeCreator.clearSearch();
			await n8n.canvas.nodeCreator.searchFor('edit image');
			await expect(n8n.canvas.nodeCreator.getNodeItems()).toHaveCount(1);

			await n8n.canvas.nodeCreator.clearSearch();
			await n8n.canvas.nodeCreator.searchFor('this node totally does not exist');
			await expect(n8n.canvas.nodeCreator.getNodeItems()).toHaveCount(0);

			await n8n.canvas.nodeCreator.clearSearch();
			await n8n.canvas.nodeCreator.navigateToSubcategory('On app event');

			await n8n.canvas.nodeCreator.searchFor('edit image');
			await expect(
				n8n.canvas.nodeCreator.getCategoryItem('Results in other categories'),
			).toBeVisible();
			await expect(n8n.canvas.nodeCreator.getNodeItems()).toHaveCount(1);
			await expect(n8n.canvas.nodeCreator.getItem('Edit Image')).toBeVisible();

			await n8n.canvas.nodeCreator.clearSearch();
			await n8n.canvas.nodeCreator.searchFor('edit image123123');
			await expect(n8n.canvas.nodeCreator.getNodeItems()).toHaveCount(0);
		});

		test('should check correct view panels after adding manual trigger', async ({ n8n }) => {
			await n8n.canvas.clickCanvasPlusButton();
			await expect(n8n.canvas.nodeCreator.getTriggerText()).toBeVisible();
			await n8n.canvas.nodeCreator.close();

			await n8n.canvas.addNode('Manual Trigger');
			await expect(n8n.canvas.getCanvasPlusButton()).toBeHidden();

			await n8n.canvas.clickNodePlusEndpoint(MANUAL_TRIGGER_NODE_DISPLAY_NAME);
			await expect(n8n.canvas.nodeCreator.getNextText()).toBeVisible();
		});
	},
);
