/** * @jest-environment jsdom */ import React from "react"; import ReactDOM from "react-dom"; import ReactTestRenderer from "react-test-renderer"; import ReactTestUtils from "react-dom/test-utils"; import SearchForm from "../../../../src/settings/components/form/SearchForm"; import { FormSearch } from "../../../../src/shared/SettingData"; import { expect } from "chai"; describe("settings/form/SearchForm", () => { describe("render", () => { it("renders SearchForm", () => { const root = ReactTestRenderer.create( ).root; const names = root .findAllByType("input") .filter((instance) => instance.props.name === "name"); expect(names).to.have.lengthOf(2); expect(names[0].props.value).to.equal("google"); expect(names[1].props.value).to.equal("yahoo"); const urls = root .findAllByType("input") .filter((instance) => instance.props.name === "url"); expect(urls).to.have.lengthOf(2); expect(urls[0].props.value).to.equal("google.com"); expect(urls[1].props.value).to.equal("yahoo.com"); }); }); describe("onChange event", () => { let container: HTMLDivElement; beforeEach(() => { container = document.createElement("div"); document.body.appendChild(container); }); afterEach(() => { document.body.removeChild(container); }); it("invokes onChange event on edit", (done) => { ReactTestUtils.act(() => { ReactDOM.render( { const json = value.toJSON(); expect(json.default).to.equal("louvre"); expect(json.engines).to.have.lengthOf(2); expect(json.engines).to.have.deep.members([ ["louvre", "google.com"], ["yahoo", "yahoo.com"], ]); done(); }} />, container ); }); const radio = document.querySelector( "input[type=radio]" ) as HTMLInputElement; radio.checked = true; const name = document.querySelector( "input[name=name]" ) as HTMLInputElement; name.value = "louvre"; ReactTestUtils.Simulate.change(name); }); it("invokes onChange event on delete", (done) => { ReactTestUtils.act(() => { ReactDOM.render( { const json = value.toJSON(); expect(json.default).to.equal("yahoo"); expect(json.engines).to.have.lengthOf(1); expect(json.engines).to.have.deep.members([ ["yahoo", "yahoo.com"], ]); done(); }} />, container ); }); const button = document.querySelector( "input[type=button]" ) as HTMLInputElement; ReactTestUtils.Simulate.click(button); }); it("invokes onChange event on add", (done) => { ReactTestUtils.act(() => { ReactDOM.render( { const json = value.toJSON(); expect(json.default).to.equal("yahoo"); expect(json.engines).to.have.lengthOf(2); expect(json.engines).to.have.deep.members([ ["google", "google.com"], ["", ""], ]); done(); }} />, container ); }); const button = document.querySelector( "input[type=button][name=add]" ) as HTMLInputElement; ReactTestUtils.Simulate.click(button); }); }); });