import React from 'react';
import { fireEvent, render, screen } from '@testing-library/react';
import { ImportPolygonForm } from './ImportPolygonForm';
describe('ImportPolygonForm', () => {
it('should initially display the empty state', () => {
render();
expect(screen.queryByText('Enter polygon coordinates')).toBeInTheDocument();
});
it('should display the valid status when the entered polygon is valid GeoJSON', () => {
render();
fireEvent.change(screen.getByRole('textbox'), {
target: {
value: `{
"type": "Polygon",
"coordinates": [
[
[0, 0],
[1, 1],
[0, 1],
[0, 0]
]
]
}`,
},
});
expect(screen.queryByText('GeoJSON. Valid data.')).toBeInTheDocument();
});
it('should display the valid status when the entered polygon is invalid GeoJSON', () => {
render();
fireEvent.change(screen.getByRole('textbox'), {
target: { value: 'invalid GeoJSON' },
});
expect(screen.queryByText('Invalid format')).toBeInTheDocument();
});
it('should import the polygon when valid GeoJSON was pasted into the input', () => {
const onSubmitMock = jest.fn();
render();
fireEvent.change(screen.getByRole('textbox'), {
target: {
value: `{
"type": "Polygon",
"coordinates": [
[
[0, 0],
[1, 1],
[0, 1],
[0, 0]
]
]
}`,
},
});
fireEvent.submit(screen.getByRole('form'));
expect(onSubmitMock).toHaveBeenCalledWith([
{ latitude: 0, longitude: 0 },
{ latitude: 1, longitude: 1 },
{ latitude: 1, longitude: 0 },
{ latitude: 0, longitude: 0 },
]);
});
it('should not import polygon when the GeoJSON is invalid', () => {
const onSubmitMock = jest.fn();
render();
fireEvent.change(screen.getByRole('textbox'), {
target: { value: 'invalid GeoJSON' },
});
const submitBtn = screen.getByText('Import');
fireEvent.click(submitBtn);
expect(submitBtn).toBeDisabled();
expect(onSubmitMock).not.toHaveBeenCalled();
});
});