import React from "react"; import Enzyme, { shallow } from "enzyme"; import Adapter from "enzyme-adapter-react-16"; import { Spell } from "../../../src/components/spell/spell"; import { SpellFactory } from "../../../factories/spell-factory"; Enzyme.configure({ adapter: new Adapter() }); class SpellPageObject { private component; constructor(component) { this.component = component; } getLevelSchool() { return this.component.find("[data-qa-target='level-school']"); } getCasters() { return this.component.find("[data-qa-target='casters']"); } getConcentration() { return this.component.find("[data-qa-target='concentration']"); } getComponents() { return this.component.find("[data-qa-target='components']"); } getRitual() { return this.component.find("[data-qa-target='ritual']"); } getMaterials() { return this.component.find("[data-qa-target='materials']"); } } const defaultData = SpellFactory.build({ name: "Firebolt", rulesText: "You hurl a small flame at a creature or object, making a ranged spell attack. The target takes 1d10 fire damage on hit. The fire ignites any flammable object hit by it that isn't being worn or carried.", level: 1, school: "Evocation", castTime: "1 Action", range: "120 ft.", components: ["V", "S"], duration: "Instantaneous", casters: ["Sorcerers", "Wizards"] }); describe("Spell", () => { test("renders default", () => { const quickRef = shallow(); const pageObject = new SpellPageObject(quickRef); expect( pageObject .getCasters() .text() .trim() ).toEqual("Sorcerers, Wizards"); expect( pageObject .getLevelSchool() .text() .trim() ).toEqual("Evocation, Level 1"); expect( pageObject .getConcentration() .text() .trim() ).toEqual("No Concentration"); expect( pageObject .getComponents() .text() .trim() ).toEqual("V, S"); expect( pageObject .getRitual() .text() .trim() ).toEqual("No Ritual"); expect(pageObject.getMaterials()).toHaveLength(0); }); test("It handles cantrip", () => { const data = { ...defaultData }; data.level = 0; const quickRef = shallow(); const pageObject = new SpellPageObject(quickRef); expect( pageObject .getLevelSchool() .text() .trim() ).toEqual("Evocation, Cantrip"); }); test("It handles concentration", () => { const data = { ...defaultData }; data.concentration = true; const quickRef = shallow(); const pageObject = new SpellPageObject(quickRef); expect( pageObject .getConcentration() .text() .trim() ).toEqual("Concentration"); }); test("It handles ritual", () => { const data = { ...defaultData }; data.ritual = true; const quickRef = shallow(); const pageObject = new SpellPageObject(quickRef); expect( pageObject .getRitual() .text() .trim() ).toEqual("Ritual"); }); test("It handles materials", () => { const data = { ...defaultData }; data.material = ["foo", "bar"]; const quickRef = shallow(); const pageObject = new SpellPageObject(quickRef); const materials = pageObject.getMaterials(); expect(materials).toHaveLength(1); }); });