import React from "react";
import Enzyme, { shallow } from "enzyme";
import Adapter from "enzyme-adapter-react-16";
import { SpellSearch } from "../../../src/components/compendium/spell-search";
import { SpellFactory } from "../../../factories/spell-factory";
Enzyme.configure({ adapter: new Adapter() });
class SpellSearchPageObject {
private component;
constructor(component) {
this.component = component;
}
spells() {
return this.component.find('[data-qa-target="spell-search-item"]');
}
searchField() {
return this.component.find('[data-qa-target="spell-search-field"]');
}
}
const spells = [
SpellFactory.build({
name: "Foo"
}),
SpellFactory.build({
name: "Bar"
}),
SpellFactory.build({
name: "Baz"
})
];
describe("SpellSearch", () => {
test("renders", () => {
const list = shallow();
expect(list.exists()).toBe(true);
});
test("renders all spells", () => {
const list = shallow();
const pageObject = new SpellSearchPageObject(list);
const listItems = pageObject.spells();
expect(listItems).toHaveLength(3);
});
test("searches spells", () => {
const list = shallow();
const pageObject = new SpellSearchPageObject(list);
pageObject
.searchField()
.simulate("change", { target: { value: "Ba" } });
expect(pageObject.spells()).toHaveLength(2);
});
});