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

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

		test('should correctly append a No Op node when Loop Over Items node is added (from add button)', async ({
			n8n,
		}) => {
			await n8n.canvas.nodeCreator.open();
			await n8n.canvas.nodeCreator.searchFor('Loop Over Items');
			await n8n.canvas.nodeCreator.selectItem('Loop Over Items');
			await n8n.ndv.close();

			await expect(n8n.canvas.getCanvasNodes()).toHaveCount(3);
			await expect(n8n.canvas.nodeConnections()).toHaveCount(3);
			await expect(n8n.canvas.nodeByName('Loop Over Items')).toBeVisible();
			await expect(n8n.canvas.nodeByName('Replace Me')).toBeVisible();
		});

		test('should correctly append a No Op node when Loop Over Items node is added (from connection)', async ({
			n8n,
		}) => {
			await n8n.canvas.addNode('Manual Trigger');

			await n8n.canvas.clickNodePlusEndpoint(MANUAL_TRIGGER_NODE_DISPLAY_NAME);
			await n8n.canvas.nodeCreator.searchFor('Loop Over Items');
			await n8n.canvas.nodeCreator.selectItem('Loop Over Items');
			await n8n.ndv.close();

			await expect(n8n.canvas.getCanvasNodes()).toHaveCount(3);
			await expect(n8n.canvas.nodeConnections()).toHaveCount(3);
			await expect(n8n.canvas.nodeByName('Loop Over Items')).toBeVisible();
			await expect(n8n.canvas.nodeByName('Replace Me')).toBeVisible();
		});

		test('should add a Send and Wait for Response node', async ({ n8n }) => {
			await n8n.canvas.addNode('Manual Trigger');
			await n8n.canvas.clickNodePlusEndpoint(MANUAL_TRIGGER_NODE_DISPLAY_NAME);

			await n8n.canvas.nodeCreator.navigateToSubcategory('Human review');
			await n8n.canvas.nodeCreator.selectItem('Slack');
			await n8n.ndv.setupHelper.setParameter('operation', 'Send and Wait for Response');
			await n8n.ndv.close();
			await expect(n8n.canvas.getCanvasNodes()).toHaveCount(2);
		});
	},
);
