import React from "react";
import Enzyme, { shallow } from "enzyme";
import Adapter from "enzyme-adapter-react-16";
import { MonsterBlock } from "../../../src/components/monster-block/monster-block";
Enzyme.configure({ adapter: new Adapter() });
class MonsterBlockPageObject {
private component;
constructor(component) {
this.component = component;
}
getSubTitle() {
return this.component
.find('[data-qa-target="sub-title"]')
.text()
.trim();
}
getAc() {
return this.component
.find('[data-qa-target="ac"]')
.text()
.trim();
}
getHp() {
return this.component
.find('[data-qa-target="hp"]')
.text()
.trim();
}
getSpeed() {
return this.component
.find('[data-qa-target="speed"]')
.text()
.trim();
}
getAbility(index) {
return this.component
.find("tr")
.at(1)
.find("td")
.at(index)
.text()
.trim();
}
getAbilityMod(index) {
return this.component
.find("tr")
.at(2)
.find("td")
.at(index)
.text()
.trim();
}
getCr() {
return this.component
.find('[data-qa-target="challenge"]')
.text()
.trim();
}
getFeatures() {
return this.component.find('[data-qa-target="features"]');
}
getActions() {
return this.component.find('[data-qa-target="actions"]');
}
getReactions() {
return this.component.find('[data-qa-target="reactions"]');
}
getDescription() {
return this.component.find('[data-qa-target="description"]');
}
getSavingThrows() {
return this.component.find('[data-qa-target="saving-throws"]');
}
getSkills() {
return this.component.find('[data-qa-target="skills"]');
}
getConditionImmunities() {
return this.component.find('[data-qa-target="condition-immunities"]');
}
getDamageImmunities() {
return this.component.find('[data-qa-target="damage-immunities"]');
}
getDamageResistances() {
return this.component.find('[data-qa-target="damage-resistances"]');
}
getDamageWeaknesses() {
return this.component.find('[data-qa-target="damage-weaknesses"]');
}
getLanguages() {
return this.component.find('[data-qa-target="languages"]');
}
getSenses() {
return this.component.find('[data-qa-target="senses"]');
}
getImage() {
return this.component.find('[data-qa-target="monster-image"]');
}
getInventory() {
return this.component.find('[data-qa-target="inventory"]');
}
}
const defaultProps = {
ac: 10,
alignment: "Chaotic Good",
challenge: "1",
hp: 100,
size: "Medium",
speed: "30 ft.",
stats: {
str: 10,
dex: 10,
con: 10,
int: 10,
wis: 10,
cha: 10
},
title: "Title",
type: "Humanoid"
};
describe("MonsterBlock", () => {
test("MonsterBlock renders with default props", () => {
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getImage()).toHaveLength(0);
expect(pageObject.getSubTitle()).toEqual(
"Medium Humanoid, Chaotic Good"
);
expect(pageObject.getAc()).toEqual("10");
expect(pageObject.getHp()).toEqual("100");
expect(pageObject.getSpeed()).toEqual("30 ft.");
expect(pageObject.getSpeed()).toEqual("30 ft.");
expect(pageObject.getAbility(0)).toEqual("10");
expect(pageObject.getAbility(1)).toEqual("10");
expect(pageObject.getAbility(2)).toEqual("10");
expect(pageObject.getAbility(3)).toEqual("10");
expect(pageObject.getAbility(4)).toEqual("10");
expect(pageObject.getAbility(5)).toEqual("10");
expect(pageObject.getAbilityMod(0)).toEqual("0");
expect(pageObject.getAbilityMod(1)).toEqual("0");
expect(pageObject.getAbilityMod(2)).toEqual("0");
expect(pageObject.getAbilityMod(3)).toEqual("0");
expect(pageObject.getAbilityMod(4)).toEqual("0");
expect(pageObject.getAbilityMod(5)).toEqual("0");
expect(pageObject.getFeatures()).toHaveLength(0);
expect(pageObject.getActions()).toHaveLength(0);
expect(pageObject.getReactions()).toHaveLength(0);
expect(pageObject.getDescription()).toHaveLength(0);
expect(pageObject.getSavingThrows()).toHaveLength(0);
expect(pageObject.getSkills()).toHaveLength(0);
expect(pageObject.getConditionImmunities()).toHaveLength(0);
expect(pageObject.getDamageImmunities()).toHaveLength(0);
expect(pageObject.getDamageResistances()).toHaveLength(0);
expect(pageObject.getDamageWeaknesses()).toHaveLength(0);
expect(pageObject.getLanguages()).toHaveLength(0);
expect(pageObject.getSenses()).toHaveLength(0);
expect(pageObject.getInventory()).toHaveLength(0);
});
test("MonsterBlock renders features", () => {
const props = {
...defaultProps,
features: [
{
title: "title",
description: "description"
}
]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getFeatures()).toHaveLength(1);
});
test("MonsterBlock renders actions", () => {
const props = {
...defaultProps,
actions: [
{
title: "title",
description: "description"
}
]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getActions()).toHaveLength(1);
});
test("MonsterBlock renders reactions", () => {
const props = {
...defaultProps,
reactions: [
{
title: "title",
description: "description"
}
]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getReactions()).toHaveLength(1);
});
test("MonsterBlock renders description", () => {
const props = {
...defaultProps,
description: "description"
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getDescription()).toHaveLength(1);
});
test("MonsterBlock renders saving throws", () => {
const props = {
...defaultProps,
savingThrows: ["savingThrows"]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getSavingThrows()).toHaveLength(1);
});
test("MonsterBlock renders skills", () => {
const props = {
...defaultProps,
skills: ["skills"]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getSkills()).toHaveLength(1);
});
test("MonsterBlock renders condition immunities", () => {
const props = {
...defaultProps,
conditionImmunities: ["immunities"]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getConditionImmunities()).toHaveLength(1);
});
test("MonsterBlock renders damage immunities", () => {
const props = {
...defaultProps,
damageImmunities: ["immunities"]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getDamageImmunities()).toHaveLength(1);
});
test("MonsterBlock renders damage resistance", () => {
const props = {
...defaultProps,
damageResistances: ["resistances"]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getDamageResistances()).toHaveLength(1);
});
test("MonsterBlock renders damage weakness", () => {
const props = {
...defaultProps,
damageWeaknesses: ["weaknesses"]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getDamageWeaknesses()).toHaveLength(1);
});
test("MonsterBlock renders languages", () => {
const props = {
...defaultProps,
languages: ["language"]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getLanguages()).toHaveLength(1);
});
test("MonsterBlock renders senses", () => {
const props = {
...defaultProps,
senses: ["sense"]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getSenses()).toHaveLength(1);
});
test("MonsterBlock renders inventory", () => {
const props = {
...defaultProps,
inventory: ["item"]
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getInventory()).toHaveLength(1);
});
test("MonsterBlock renders image", () => {
const props = {
...defaultProps,
image: "image"
};
const monsterBlock = shallow();
const pageObject = new MonsterBlockPageObject(monsterBlock);
expect(pageObject.getImage()).toHaveLength(1);
});
});