import React from "react"; import Enzyme, { shallow } from "enzyme"; import Adapter from "enzyme-adapter-react-16"; import { CreatureSearch } from "../../../src/components/compendium/creature-search"; import { CreatureFactory } from "../../../factories/creature-factory"; Enzyme.configure({ adapter: new Adapter() }); class CreatureSearchPageObject { private component; constructor(component) { this.component = component; } creatures() { return this.component.find('[data-qa-target="creatures-list"]'); } nameField() { return this.component.find( '[data-qa-target="creature-search-name-field"]' ); } typeField() { return this.component.find( '[data-qa-target="creature-search-type-field"]' ); } minCrField() { return this.component.find( '[data-qa-target="creature-search-min-cr-field"]' ); } maxCrField() { return this.component.find( '[data-qa-target="creature-search-max-cr-field"]' ); } alignmentDropdown() { return this.component.find( '[data-qa-target="creature-search-alignment-dropdown"]' ); } } describe("CreatureSearch", () => { describe("name", () => { const creatures = [ CreatureFactory.build({ name: "Foo" }), CreatureFactory.build({ name: "Bar" }), CreatureFactory.build({ name: "Baz" }) ]; test("renders", () => { const search = shallow(); expect(search.exists()).toBe(true); }); test("renders all creatures", () => { const search = shallow(); const pageObject = new CreatureSearchPageObject(search); expect(pageObject.creatures()).toHaveLength(3); }); test("searches creatures", () => { const search = shallow(); const pageObject = new CreatureSearchPageObject(search); pageObject .nameField() .simulate("change", { target: { value: "Fo" } }); expect(pageObject.creatures()).toHaveLength(1); }); }); describe("type", () => { const creatures = [ CreatureFactory.build({ type: "Foo", name: "Test A" }), CreatureFactory.build({ type: "Bar", name: "Test B" }), CreatureFactory.build({ type: "Baz", name: "Test C" }) ]; test("renders", () => { const search = shallow(); expect(search.exists()).toBe(true); }); test("renders all creatures", () => { const search = shallow(); const pageObject = new CreatureSearchPageObject(search); expect(pageObject.creatures()).toHaveLength(3); }); test("searches creatures", () => { const search = shallow(); const pageObject = new CreatureSearchPageObject(search); pageObject .typeField() .simulate("change", { target: { value: "Fo" } }); expect(pageObject.creatures()).toHaveLength(1); }); }); describe("cr", () => { const creatures = [ CreatureFactory.build({ challenge: "5", name: "Test A" }), CreatureFactory.build({ challenge: "5", name: "Test B" }), CreatureFactory.build({ challenge: "10", name: "Test C" }) ]; test("renders", () => { const search = shallow(); expect(search.exists()).toBe(true); }); test("renders all creatures", () => { const search = shallow(); const pageObject = new CreatureSearchPageObject(search); expect(pageObject.creatures()).toHaveLength(3); }); }); describe("min cr", () => { const creatures = [ CreatureFactory.build({ challenge: "5", name: "Test A" }), CreatureFactory.build({ challenge: "5", name: "Test B" }), CreatureFactory.build({ challenge: "10", name: "Test C" }) ]; test("searches creatures", () => { const search = shallow(); const pageObject = new CreatureSearchPageObject(search); pageObject .minCrField() .simulate("change", { target: { value: "9" } }); expect(pageObject.creatures()).toHaveLength(1); }); }); describe("max cr", () => { const creatures = [ CreatureFactory.build({ challenge: "5", name: "Test B" }), CreatureFactory.build({ challenge: "10", name: "Test C" }), CreatureFactory.build({ challenge: "10", name: "Test D" }) ]; test("searches creatures", () => { const search = shallow(); const pageObject = new CreatureSearchPageObject(search); pageObject .maxCrField() .simulate("change", { target: { value: "9" } }); expect(pageObject.creatures()).toHaveLength(1); }); }); describe("min and max cr", () => { const creatures = [ CreatureFactory.build({ challenge: "3", name: "Test A" }), CreatureFactory.build({ challenge: "5", name: "Test B" }), CreatureFactory.build({ challenge: "7", name: "Test C" }), CreatureFactory.build({ challenge: "10", name: "Test D" }), CreatureFactory.build({ challenge: "12", name: "Test E" }) ]; test("searches creatures", () => { const search = shallow(); const pageObject = new CreatureSearchPageObject(search); pageObject .minCrField() .simulate("change", { target: { value: "6" } }); pageObject .maxCrField() .simulate("change", { target: { value: "9" } }); expect(pageObject.creatures()).toHaveLength(1); }); }); describe("alignment", () => { const creatures = [ CreatureFactory.build({ alignment: "Chaotic Good", name: "Test A" }), CreatureFactory.build({ alignment: "Lawful Evile", name: "Test B" }), CreatureFactory.build({ alignment: "Lawful Evil", name: "Test C" }) ]; test("renders", () => { const search = shallow(); expect(search.exists()).toBe(true); }); test("renders all creatures", () => { const search = shallow(); const pageObject = new CreatureSearchPageObject(search); expect(pageObject.creatures()).toHaveLength(3); }); test("searches creatures", () => { const search = shallow(); const pageObject = new CreatureSearchPageObject(search); pageObject .alignmentDropdown() .simulate("change", { target: { value: "Chaotic Good" } }); expect(pageObject.creatures()).toHaveLength(1); }); }); });