import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import EditableText from 'sentry/components/editableText';
describe('EditableText', function () {
it('edit value and click outside of the component', function () {
const handleChange = jest.fn();
render();
// Click on the input
userEvent.click(screen.getByText('foo'));
// Clear input value
userEvent.clear(screen.getByRole('textbox'));
// Edit input value
userEvent.type(screen.getByRole('textbox'), 'bar');
// Click outside of the component
userEvent.click(document.body);
expect(handleChange).toHaveBeenCalledWith('bar');
expect(screen.queryByText('foo')).not.toBeInTheDocument();
expect(screen.getByText('bar')).toBeInTheDocument();
});
it('clear value and show error message', function () {
const handleChange = jest.fn();
render();
// Click on the input
userEvent.click(screen.getByText('foo'));
// Clear input value
userEvent.clear(screen.getByRole('textbox'));
// Press enter to submit the value
userEvent.keyboard('{enter}');
expect(handleChange).toHaveBeenCalledTimes(0);
});
it('displays a disabled value', function () {
render();
// Click on the input
userEvent.click(screen.getByText('foo'));
expect(screen.queryByRole('textbox')).not.toBeInTheDocument();
});
it('edit value and press escape', function () {
const handleChange = jest.fn();
render();
// Click on the input
userEvent.click(screen.getByText('foo'));
// Edit input value
userEvent.type(screen.getByRole('textbox'), '-bar');
// Press escape to cancel the value
userEvent.keyboard('{esc}');
expect(handleChange).toHaveBeenCalledTimes(0);
expect(screen.getByText('foo')).toBeInTheDocument();
});
it('enforces a max length if provided', function () {
render();
// Click on the input
userEvent.click(screen.getByText('foo'));
// Edit input value
userEvent.type(screen.getByRole('textbox'), '-bar');
// Display a text with the max length of 4 caracters
expect(screen.getByText('foo-')).toBeInTheDocument();
});
});