import { render, screen, fireEvent } from "@testing-library/react"; import useQuery from "./useQuery"; const MyComponent = () => { const { payload, query, setQuery, } = useQuery(); return ( <> setQuery(e.target.value)} />
  1. {payload.search}
  2. {payload.vins}
  3. {query}
) } const template = (desc, data, expected) => { it(desc, () => { render(); const input = screen.getByTestId("input"); const search = screen.getByTestId("search"); const vins = screen.getByTestId("vins"); const query = screen.getByTestId("query"); fireEvent.change(input, { target: { value: data } }); expect(search.innerHTML).toBe(expected[0]); expect(vins.innerHTML).toBe(expected[1]); expect(query.innerHTML).toBe(expected[2]); }); } describe("useQuery", () => { [ [ "parses a search query", "test", ["test", "", "test"] ], [ "parses a vin query", "VCF1ZBU23PG001209", ["", "VCF1ZBU23PG001209", "vin:VCF1ZBU23PG001209"] ], [ "parses a mixed search and vin query", "test VCF1ZBU23PG001209", ["test", "VCF1ZBU23PG001209", "test vin:VCF1ZBU23PG001209"] ], [ "parses a comma separated search query", "ocean,pear,alaska,ronin", ["ocean pear alaska ronin", "", "ocean pear alaska ronin"] ], [ "parses a comma separated vin query", "VCF1EBE2008016235,VCF1EBE20PG001002,VCF1EBE20PG001162", ["", "VCF1EBE2008016235,VCF1EBE20PG001002,VCF1EBE20PG001162", "vin:VCF1EBE2008016235 vin:VCF1EBE20PG001002 vin:VCF1EBE20PG001162"] ], [ "parses a comma separated mixed search and vin query", "test,VCF1EBE2008016235,VCF1EBE20PG001002,VCF1EBE20PG001162", ["test", "VCF1EBE2008016235,VCF1EBE20PG001002,VCF1EBE20PG001162", "test vin:VCF1EBE2008016235 vin:VCF1EBE20PG001002 vin:VCF1EBE20PG001162"] ], [ "parses a space separated search query", "ocean pear alaska ronin", ["ocean pear alaska ronin", "", "ocean pear alaska ronin"] ], [ "parses a space separated vin query", "VCF1EBE2008016235 VCF1EBE20PG001002 VCF1EBE20PG001162", ["", "VCF1EBE2008016235,VCF1EBE20PG001002,VCF1EBE20PG001162", "vin:VCF1EBE2008016235 vin:VCF1EBE20PG001002 vin:VCF1EBE20PG001162"] ], [ "parses a space separated mixed search and vin query", "test VCF1EBE2008016235 VCF1EBE20PG001002 VCF1EBE20PG001162", ["test", "VCF1EBE2008016235,VCF1EBE20PG001002,VCF1EBE20PG001162", "test vin:VCF1EBE2008016235 vin:VCF1EBE20PG001002 vin:VCF1EBE20PG001162"] ], [ "trims extraneous values from search", "ocean,, , ,,,,pear,,, ", ["ocean pear", "", "ocean pear"] ], [ "trims extraneous values from vins", "VCF1EBE2008016235,, , ,,,,VCF1EBE20PG001002,,, ", ["", "VCF1EBE2008016235,VCF1EBE20PG001002", "vin:VCF1EBE2008016235 vin:VCF1EBE20PG001002"] ], [ "honors a declared vin", "vin:1209", ["", "1209", "vin:1209"] ], [ "keeps order of query parts", "test vin:1209 VCF1EBE2008016235,VCF1EBE20PG001002 test2", ["test test2", "1209,VCF1EBE2008016235,VCF1EBE20PG001002", "test vin:1209 vin:VCF1EBE2008016235 vin:VCF1EBE20PG001002 test2"] ], ].forEach((args) => template(...args)) });