133 lines
3.6 KiB
TypeScript
133 lines
3.6 KiB
TypeScript
import { fireEvent, render } from "@testing-library/react";
|
|
import SearchBar, {
|
|
handleQueryWithProvider,
|
|
ISearchProviderProps,
|
|
ISearchProps,
|
|
} from "../../components/searchBar";
|
|
|
|
const defaultProps: ISearchProps = {
|
|
defaultProvider: "https://test.com?q=",
|
|
placeholder: "",
|
|
providers: [
|
|
{
|
|
name: "Allmusic",
|
|
url: "https://www.allmusic.com/search/all/",
|
|
prefix: "/a",
|
|
},
|
|
{
|
|
name: "Discogs",
|
|
url: "https://www.discogs.com/search/?q=",
|
|
prefix: "/di",
|
|
},
|
|
{
|
|
name: "Duck Duck Go",
|
|
url: "https://duckduckgo.com/?q=",
|
|
prefix: "/d",
|
|
},
|
|
],
|
|
};
|
|
|
|
const setup = (props: ISearchProps = defaultProps) => {
|
|
const searchBar = render(<SearchBar search={props} />);
|
|
const input = searchBar.getByTestId("search-input");
|
|
const clearButton = searchBar.getByTestId("search-clear");
|
|
const submitButton = searchBar.getByTestId("search-submit");
|
|
|
|
return {
|
|
searchBar,
|
|
input,
|
|
clearButton,
|
|
submitButton,
|
|
};
|
|
};
|
|
|
|
const location: Location = window.location;
|
|
|
|
describe("searchBar.tsx", () => {
|
|
beforeEach(() => {
|
|
// @ts-ignore
|
|
delete window.location;
|
|
|
|
window.location = {
|
|
...location,
|
|
reload: jest.fn(),
|
|
};
|
|
});
|
|
|
|
it("Tests SearchBar rendering with properties", () => {
|
|
const { searchBar } = setup();
|
|
expect(searchBar.baseElement).toMatchSnapshot();
|
|
});
|
|
|
|
it("Tests searchBar rendering without properties", () => {
|
|
const searchBar = render(<SearchBar />);
|
|
expect(searchBar.baseElement).toMatchSnapshot();
|
|
});
|
|
|
|
it("Tests handleQueryWithProvider", () => {
|
|
defaultProps.providers?.forEach((provider: ISearchProviderProps) => {
|
|
handleQueryWithProvider(defaultProps, provider.prefix + " test");
|
|
expect(window.location.href).toEqual(provider.url + "test");
|
|
});
|
|
});
|
|
|
|
it("Tests handleQueryWithProvider default", () => {
|
|
handleQueryWithProvider(defaultProps, "test");
|
|
expect(window.location.href).toEqual(defaultProps.defaultProvider + "test");
|
|
});
|
|
|
|
it("Tests handleQueryWithProvider without providers", () => {
|
|
const test: ISearchProps = {
|
|
defaultProvider: "https://test.com?q=",
|
|
placeholder: "",
|
|
providers: undefined,
|
|
};
|
|
|
|
handleQueryWithProvider(test, "test");
|
|
expect(window.location.href).toEqual(test.defaultProvider + "test");
|
|
});
|
|
|
|
it("Tests SearchBar with autoFocus not set", () => {
|
|
const { input } = setup();
|
|
expect(!input.focus);
|
|
});
|
|
|
|
it("Tests SearchBar with autoFocus set to true", () => {
|
|
const { input } = setup({ ...defaultProps, autoFocus: true });
|
|
expect(input.focus);
|
|
});
|
|
|
|
it("Tests SearchBar with autoFocus set to false", () => {
|
|
const { input } = setup({ ...defaultProps, autoFocus: false });
|
|
expect(!input.focus);
|
|
});
|
|
|
|
it("Tests SearchBar component with default search", () => {
|
|
const { input, submitButton } = setup();
|
|
fireEvent.change(input, { target: { value: "test" } });
|
|
fireEvent.click(submitButton);
|
|
|
|
expect(window.location.href).toEqual(defaultProps.defaultProvider + "test");
|
|
});
|
|
|
|
it("Tests SearchBar component with other search", () => {
|
|
const { input, submitButton } = setup();
|
|
|
|
fireEvent.change(input, { target: { value: "/a test" } });
|
|
fireEvent.click(submitButton);
|
|
|
|
expect(window.location.href).toEqual(
|
|
"https://www.allmusic.com/search/all/test",
|
|
);
|
|
});
|
|
|
|
it("Tests SearchBar component clear", () => {
|
|
const { input, clearButton, submitButton } = setup();
|
|
|
|
fireEvent.change(input, { target: { value: "/a test" } });
|
|
fireEvent.click(clearButton);
|
|
fireEvent.click(submitButton);
|
|
|
|
expect(window.location.href).toEqual(defaultProps.defaultProvider);
|
|
});
|
|
});
|