mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
96 lines
2.9 KiB
TypeScript
96 lines
2.9 KiB
TypeScript
import { describe, it, expect, vi } from 'vitest';
|
|
import { createComponentRenderer } from '@/__tests__/render';
|
|
import userEvent from '@testing-library/user-event';
|
|
import { fireEvent } from '@testing-library/vue';
|
|
|
|
import NodeTitle from '@/components/NodeTitle.vue';
|
|
import { createTestingPinia } from '@pinia/testing';
|
|
|
|
const renderComponent = createComponentRenderer(NodeTitle);
|
|
|
|
describe('NodeTitle', () => {
|
|
beforeEach(() => {
|
|
createTestingPinia();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it('renders the component', () => {
|
|
const { getByTestId } = renderComponent({
|
|
props: {
|
|
modelValue: 'Test Node',
|
|
},
|
|
});
|
|
expect(getByTestId('node-title-container')).toBeInTheDocument();
|
|
expect(getByTestId('node-rename-input')).toBeInTheDocument();
|
|
});
|
|
|
|
it('displays the node title', () => {
|
|
const { getByText } = renderComponent({
|
|
props: {
|
|
modelValue: 'My Test Node',
|
|
},
|
|
});
|
|
expect(getByText('My Test Node')).toBeInTheDocument();
|
|
});
|
|
|
|
it('shows the edit input when clicked', async () => {
|
|
const { getByTestId } = renderComponent({
|
|
props: {
|
|
modelValue: 'Test Node',
|
|
},
|
|
});
|
|
await userEvent.click(getByTestId('node-title-container'));
|
|
expect(getByTestId('node-rename-input')).toHaveValue('Test Node');
|
|
});
|
|
|
|
it('emits update:model-value when renaming', async () => {
|
|
const { getByTestId, getByRole, emitted } = renderComponent({
|
|
props: {
|
|
modelValue: 'Test Node',
|
|
},
|
|
});
|
|
await userEvent.click(getByTestId('node-title-container'));
|
|
const renameInput = getByTestId('node-rename-input');
|
|
await userEvent.clear(renameInput);
|
|
await userEvent.type(renameInput, 'New Node Name');
|
|
|
|
expect(renameInput).toHaveValue('New Node Name');
|
|
|
|
await userEvent.click(getByRole('button', { name: 'Rename' }));
|
|
expect(emitted('update:model-value')).toEqual([['New Node Name']]);
|
|
});
|
|
|
|
it('cancels renaming when cancel button is clicked', async () => {
|
|
const { getByTestId, getByRole, emitted } = renderComponent({
|
|
props: {
|
|
modelValue: 'Test Node',
|
|
},
|
|
});
|
|
await userEvent.click(getByTestId('node-title-container'));
|
|
await userEvent.click(getByRole('button', { name: 'Cancel' }));
|
|
expect(emitted('update:model-value')).toBeUndefined();
|
|
});
|
|
|
|
it('does not call onRename when Enter is pressed on cancel button', async () => {
|
|
const { getByTestId, getByRole, emitted } = renderComponent({
|
|
props: {
|
|
modelValue: 'Test Node',
|
|
},
|
|
});
|
|
await userEvent.click(getByTestId('node-title-container'));
|
|
const renameInput = getByTestId('node-rename-input');
|
|
await userEvent.clear(renameInput);
|
|
await userEvent.type(renameInput, 'New Node Name');
|
|
|
|
expect(renameInput).toHaveValue('New Node Name');
|
|
|
|
const cancelButton = getByRole('button', { name: 'Cancel' });
|
|
await fireEvent.focus(cancelButton);
|
|
await fireEvent.keyDown(cancelButton, { key: 'Enter' });
|
|
expect(emitted('update:model-value')).toBeUndefined();
|
|
});
|
|
});
|