import { expect, test } from '@playwright/experimental-ct-react';
import { CypherEditor } from '../CypherEditor';
test('can complete pattern snippet', async ({ page, mount }) => {
await mount();
const textField = page.getByRole('textbox');
await textField.fill('MATCH ()-[]->()');
await page.locator('.cm-tooltip-autocomplete').getByText('-[]->()').click();
await expect(page.locator('.cm-tooltip-autocomplete')).not.toBeVisible();
await textField.press('Tab');
await textField.press('Tab');
await expect(textField).toHaveText('MATCH ()-[]->()-[ ]->( )');
});
test('can navigate snippet', async ({ page, mount }) => {
await mount();
const textField = page.getByRole('textbox');
await textField.fill('CREATE INDEX abc FOR ()');
await page
.locator('.cm-tooltip-autocomplete')
.getByText('-[]-()', { exact: true })
.click();
await expect(page.locator('.cm-tooltip-autocomplete')).not.toBeVisible();
await expect(page.locator('.cm-snippetField')).toHaveCount(2);
await textField.press('Tab');
await textField.press('Shift+Tab');
await expect(textField).toHaveText('CREATE INDEX abc FOR ()-[ ]-( )');
await textField.press('a');
await expect(textField).toHaveText('CREATE INDEX abc FOR ()-[a]-( )');
await textField.press('Escape');
await textField.press('Escape');
await expect(page.locator('.cm-snippetField')).toHaveCount(0);
await textField.press('Tab');
await expect(textField).toHaveText('CREATE INDEX abc FOR ()-[a ]-( )');
});
test('can accept completion inside pattern snippet', async ({
page,
mount,
}) => {
await mount();
const textField = page.getByRole('textbox');
await textField.fill('MATCH ()-[]->()');
await page.locator('.cm-tooltip-autocomplete').getByText('-[]->()').click();
await expect(page.locator('.cm-tooltip-autocomplete')).not.toBeVisible();
// move to node
await textField.press('Tab');
// get & accept completion
await textField.press(':');
await expect(
page.locator('.cm-tooltip-autocomplete').getByText('City'),
).toBeVisible();
await textField.press('Tab', { delay: 300 });
await expect(page.locator('.cm-tooltip-autocomplete')).not.toBeVisible();
// tab out of the snippet
await textField.press('Tab', { delay: 300 });
await expect(textField).toHaveText('MATCH ()-[]->()-[ ]->(:City)');
});
test('does not automatically open completion panel for expressions after snippet trigger char', async ({
page,
mount,
}) => {
await mount();
const textField = page.getByRole('textbox');
await textField.fill('RETURN (1)');
// expect the panel to not show up
await expect(page.locator('.cm-tooltip-autocomplete')).not.toBeVisible();
// unless manually triggered
await textField.press('Control+ ');
await expect(page.locator('.cm-tooltip-autocomplete')).toBeVisible();
});