Files
exercise-typescript/typescript/dnd-character/dnd-character.test.ts
2022-11-04 15:13:10 +01:00

111 lines
3.3 KiB
TypeScript

/* eslint-disable @typescript-eslint/semi */
import { DnDCharacter } from "./dnd-character";
describe("Ability modifier", () => {
it("Ability modifier for score 3 is -4", () => {
expect(DnDCharacter.getModifierFor(3)).toEqual(-4);
});
it("Ability modifier for score 4 is -3", () => {
expect(DnDCharacter.getModifierFor(4)).toEqual(-3);
});
it("Ability modifier for score 5 is -3", () => {
expect(DnDCharacter.getModifierFor(5)).toEqual(-3);
});
it("Ability modifier for score 6 is -2", () => {
expect(DnDCharacter.getModifierFor(6)).toEqual(-2);
});
it("Ability modifier for score 7 is -2", () => {
expect(DnDCharacter.getModifierFor(7)).toEqual(-2);
});
it("Ability modifier for score 8 is -1", () => {
expect(DnDCharacter.getModifierFor(8)).toEqual(-1);
});
it("Ability modifier for score 9 is -1", () => {
expect(DnDCharacter.getModifierFor(9)).toEqual(-1);
});
it("Ability modifier for score 10 is 0", () => {
expect(DnDCharacter.getModifierFor(10)).toEqual(0);
});
it("Ability modifier for score 11 is 0", () => {
expect(DnDCharacter.getModifierFor(11)).toEqual(0);
});
it("Ability modifier for score 12 is 1", () => {
expect(DnDCharacter.getModifierFor(12)).toEqual(1);
});
it("Ability modifier for score 13 is 1", () => {
expect(DnDCharacter.getModifierFor(13)).toEqual(1);
});
it("Ability modifier for score 14 is 2", () => {
expect(DnDCharacter.getModifierFor(14)).toEqual(2);
});
it("Ability modifier for score 15 is 2", () => {
expect(DnDCharacter.getModifierFor(15)).toEqual(2);
});
it("Ability modifier for score 16 is 3", () => {
expect(DnDCharacter.getModifierFor(16)).toEqual(3);
});
it("Ability modifier for score 17 is 3", () => {
expect(DnDCharacter.getModifierFor(17)).toEqual(3);
});
it("Ability modifier for score 18 is 4", () => {
expect(DnDCharacter.getModifierFor(18)).toEqual(4);
});
});
describe("Ability generator", () => {
it("Random ability is within range", () => {
const abilityScore = DnDCharacter.generateAbilityScore();
expect(abilityScore).toBeGreaterThanOrEqual(3);
expect(abilityScore).toBeLessThanOrEqual(18);
});
});
describe("Character creation", () => {
it("Random character is valid", () => {
const character = new DnDCharacter();
expect(character.hitpoints).toEqual(
10 + DnDCharacter.getModifierFor(character.constitution)
);
expect(character.strength).toBeGreaterThanOrEqual(3);
expect(character.strength).toBeLessThanOrEqual(18);
expect(character.dexterity).toBeGreaterThanOrEqual(3);
expect(character.dexterity).toBeLessThanOrEqual(18);
expect(character.constitution).toBeGreaterThanOrEqual(3);
expect(character.constitution).toBeLessThanOrEqual(18);
expect(character.intelligence).toBeGreaterThanOrEqual(3);
expect(character.intelligence).toBeLessThanOrEqual(18);
expect(character.wisdom).toBeGreaterThanOrEqual(3);
expect(character.wisdom).toBeLessThanOrEqual(18);
expect(character.charisma).toBeGreaterThanOrEqual(3);
expect(character.charisma).toBeLessThanOrEqual(18);
});
it("Each ability is only calculated once", () => {
const character = new DnDCharacter();
expect(character.strength === character.strength).toBeTruthy();
});
});