Skip to content

Commit

Permalink
test(factories): multiple factories for clearer tests (#78)
Browse files Browse the repository at this point in the history
  • Loading branch information
antoinezanardi committed Mar 28, 2023
1 parent a9e827f commit 9ed0189
Show file tree
Hide file tree
Showing 7 changed files with 5,100 additions and 4,913 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
import { faker } from "@faker-js/faker";
import { plainToInstance } from "class-transformer";
import { gameSourceValues } from "../../../../../../src/modules/game/constants/game.constant";
import { PLAYER_ATTRIBUTE_NAMES, PLAYER_GROUPS } from "../../../../../../src/modules/game/enums/player.enum";
import { PlayerAttribute } from "../../../../../../src/modules/game/schemas/player/player-attribute/player-attribute.schema";
import { ROLE_NAMES } from "../../../../../../src/modules/role/enums/role.enum";

function createFakePlayerSheriffAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.SHERIFF,
source: PLAYER_GROUPS.ALL,
...obj,
});
}

function createFakePlayerSeenAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.SEEN,
source: ROLE_NAMES.SEER,
...obj,
});
}

function createFakePlayerEatenAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.EATEN,
source: PLAYER_GROUPS.WEREWOLVES,
...obj,
});
}

function createFakePlayerDrankLifePotionAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.DRANK_LIFE_POTION,
source: ROLE_NAMES.WITCH,
...obj,
});
}

function createFakePlayerDrankDeathPotionAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.DRANK_DEATH_POTION,
source: ROLE_NAMES.WITCH,
...obj,
});
}

function createFakePlayerProtectedAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.PROTECTED,
source: ROLE_NAMES.GUARD,
...obj,
});
}

function createFakePlayerRavenMarkedAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.RAVEN_MARKED,
source: ROLE_NAMES.RAVEN,
...obj,
});
}

function createFakePlayerInLoveAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.IN_LOVE,
source: ROLE_NAMES.CUPID,
...obj,
});
}

function createFakePlayerWorshipedAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.WORSHIPED,
source: ROLE_NAMES.WILD_CHILD,
...obj,
});
}

function createFakePlayerPowerlessAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.POWERLESS,
source: ROLE_NAMES.ANCIENT,
...obj,
});
}

function createFakePlayerCantVoteAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.CANT_VOTE,
source: ROLE_NAMES.SCAPEGOAT,
...obj,
});
}

function createFakePlayerCharmedAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.CHARMED,
source: ROLE_NAMES.PIED_PIPER,
...obj,
});
}

function createFakePlayerGrowledAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.GROWLED,
source: ROLE_NAMES.BEAR_TAMER,
...obj,
});
}

function createFakePlayerContaminatedAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return createFakePlayerAttribute({
name: PLAYER_ATTRIBUTE_NAMES.CONTAMINATED,
source: ROLE_NAMES.RUSTY_SWORD_KNIGHT,
...obj,
});
}

function createFakePlayerAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return plainToInstance(PlayerAttribute, {
name: obj.name ?? faker.helpers.arrayElement(Object.values(PLAYER_ATTRIBUTE_NAMES)),
source: obj.source ?? faker.helpers.arrayElement(gameSourceValues),
});
}

function bulkCreateFakePlayerAttributes(length: number, attributes: Partial<PlayerAttribute>[] = []): PlayerAttribute[] {
return plainToInstance(PlayerAttribute, Array.from(Array(length)).map((item, index) => {
const override = index < attributes.length ? attributes[index] : {};
return createFakePlayerAttribute(override);
}));
}

export {
createFakePlayerSheriffAttribute,
createFakePlayerSeenAttribute,
createFakePlayerEatenAttribute,
createFakePlayerDrankLifePotionAttribute,
createFakePlayerDrankDeathPotionAttribute,
createFakePlayerProtectedAttribute,
createFakePlayerRavenMarkedAttribute,
createFakePlayerInLoveAttribute,
createFakePlayerWorshipedAttribute,
createFakePlayerPowerlessAttribute,
createFakePlayerCantVoteAttribute,
createFakePlayerCharmedAttribute,
createFakePlayerGrowledAttribute,
createFakePlayerContaminatedAttribute,
createFakePlayerAttribute,
bulkCreateFakePlayerAttributes,
};
164 changes: 164 additions & 0 deletions tests/factories/game/schemas/player/player-with-role.schema.factory.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
import type { PlayerRole } from "../../../../../src/modules/game/schemas/player/player-role.schema";
import type { PlayerSide } from "../../../../../src/modules/game/schemas/player/player-side.schema";
import type { Player } from "../../../../../src/modules/game/schemas/player/player.schema";
import { villagerRoles } from "../../../../../src/modules/role/constants/role.constant";
import { ROLE_NAMES, ROLE_SIDES } from "../../../../../src/modules/role/enums/role.enum";
import { createFakePlayer } from "./player.schema.factory";

function createFakeWerewolfPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.WEREWOLF, obj);
}

function createFakeBigBadWolfPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.BIG_BAD_WOLF, obj);
}

function createFakeVileFatherOfWolvesPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.VILE_FATHER_OF_WOLVES, obj);
}

function createFakeWhiteWerewolfPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.WHITE_WEREWOLF, obj);
}

function createFakeVillagerPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.VILLAGER, obj);
}

function createFakeVillagerVillagerPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.VILLAGER_VILLAGER, obj);
}

function createFakeSeerPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.SEER, obj);
}

function createFakeCupidPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.CUPID, obj);
}

function createFakeWitchPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.WITCH, obj);
}

function createFakeHunterPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.HUNTER, obj);
}

function createFakeLittleGirlPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.LITTLE_GIRL, obj);
}

function createFakeGuardPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.GUARD, obj);
}

function createFakeAncientPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.ANCIENT, obj);
}

function createFakeScapegoatPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.SCAPEGOAT, obj);
}

function createFakeIdiotPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.IDIOT, obj);
}

function createFakeTwoSistersPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.TWO_SISTERS, obj);
}

function createFakeThreeBrothersPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.THREE_BROTHERS, obj);
}

function createFakeFoxPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.FOX, obj);
}

function createFakeBearTamerPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.BEAR_TAMER, obj);
}

function createFakeStutteringJudgePlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.STUTTERING_JUDGE, obj);
}

function createFakeRustySwordKnightPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.RUSTY_SWORD_KNIGHT, obj);
}

function createFakeWildChildPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.WILD_CHILD, obj);
}

function createFakeDogWolfPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.DOG_WOLF, obj);
}

function createFakeThiefPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.THIEF, obj);
}

function createFakeAngelPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.ANGEL, obj);
}

function createFakePiedPiperPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.PIED_PIPER, obj);
}

function createFakeRavenPlayer(obj: Partial<Player> = {}): Player {
return createFakePlayerWithRole(ROLE_NAMES.RAVEN, obj);
}

function createFakePlayerWithRole(role: ROLE_NAMES, obj: Partial<Player> = {}): Player {
const playerRole: PlayerRole = {
current: role,
original: role,
isRevealed: role === ROLE_NAMES.VILLAGER_VILLAGER,
};
const playerSide: PlayerSide = {
current: villagerRoles.find(({ name }) => name === role) ? ROLE_SIDES.VILLAGERS : ROLE_SIDES.WEREWOLVES,
original: villagerRoles.find(({ name }) => name === role) ? ROLE_SIDES.VILLAGERS : ROLE_SIDES.WEREWOLVES,
};
return createFakePlayer({
role: playerRole,
side: playerSide,
attributes: [],
isAlive: true,
...obj,
});
}

export {
createFakePlayerWithRole,
createFakeWerewolfPlayer,
createFakeBigBadWolfPlayer,
createFakeVileFatherOfWolvesPlayer,
createFakeWhiteWerewolfPlayer,
createFakeVillagerPlayer,
createFakeVillagerVillagerPlayer,
createFakeSeerPlayer,
createFakeCupidPlayer,
createFakeWitchPlayer,
createFakeHunterPlayer,
createFakeLittleGirlPlayer,
createFakeGuardPlayer,
createFakeAncientPlayer,
createFakeScapegoatPlayer,
createFakeIdiotPlayer,
createFakeTwoSistersPlayer,
createFakeThreeBrothersPlayer,
createFakeFoxPlayer,
createFakeBearTamerPlayer,
createFakeStutteringJudgePlayer,
createFakeRustySwordKnightPlayer,
createFakeWildChildPlayer,
createFakeDogWolfPlayer,
createFakeThiefPlayer,
createFakeAngelPlayer,
createFakePiedPiperPlayer,
createFakeRavenPlayer,
};
20 changes: 1 addition & 19 deletions tests/factories/game/schemas/player/player.schema.factory.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,10 @@
import { faker } from "@faker-js/faker";
import { plainToInstance } from "class-transformer";
import { gameSourceValues } from "../../../../../src/modules/game/constants/game.constant";
import { PLAYER_ATTRIBUTE_NAMES } from "../../../../../src/modules/game/enums/player.enum";
import { PlayerAttribute } from "../../../../../src/modules/game/schemas/player/player-attribute/player-attribute.schema";
import { PlayerRole } from "../../../../../src/modules/game/schemas/player/player-role.schema";
import { PlayerSide } from "../../../../../src/modules/game/schemas/player/player-side.schema";
import { Player } from "../../../../../src/modules/game/schemas/player/player.schema";
import { ROLE_NAMES, ROLE_SIDES } from "../../../../../src/modules/role/enums/role.enum";

function createFakePlayerAttribute(obj: Partial<PlayerAttribute> = {}): PlayerAttribute {
return plainToInstance(PlayerAttribute, {
name: obj.name ?? faker.helpers.arrayElement(Object.values(PLAYER_ATTRIBUTE_NAMES)),
source: obj.source ?? faker.helpers.arrayElement(gameSourceValues),
});
}

function bulkCreateFakePlayerAttributes(length: number, attributes: Partial<PlayerAttribute>[] = []): PlayerAttribute[] {
return plainToInstance(PlayerAttribute, Array.from(Array(length)).map((item, index) => {
const override = index < attributes.length ? attributes[index] : {};
return createFakePlayerAttribute(override);
}));
}
import { bulkCreateFakePlayerAttributes } from "./player-attribute/player-attribute.schema.factory";

function createFakePlayerSide(obj: Partial<PlayerSide> = {}): PlayerSide {
return plainToInstance(PlayerSide, {
Expand Down Expand Up @@ -57,8 +41,6 @@ function bulkCreateFakePlayers(length: number, players: Partial<Player>[] = []):
}

export {
createFakePlayerAttribute,
bulkCreateFakePlayerAttributes,
createFakePlayerSide,
createFakePlayerRole,
createFakePlayer,
Expand Down

0 comments on commit 9ed0189

Please sign in to comment.