From d1614b19a6abbcbeb4583cfd50789adfceecf9c9 Mon Sep 17 00:00:00 2001 From: Dev Date: Sun, 5 Nov 2023 10:49:20 +0000 Subject: [PATCH] Add tests for `InRaidHelper` --- project/tests/helpers/InRaidHelper.test.ts | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 project/tests/helpers/InRaidHelper.test.ts diff --git a/project/tests/helpers/InRaidHelper.test.ts b/project/tests/helpers/InRaidHelper.test.ts new file mode 100644 index 00000000..a90c0c50 --- /dev/null +++ b/project/tests/helpers/InRaidHelper.test.ts @@ -0,0 +1,116 @@ +import { InRaidHelper } from "@spt-aki/helpers/InRaidHelper"; +import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; +import "reflect-metadata"; +import { container } from "tsyringe"; +import { vi, beforeAll, afterEach, describe, expect, it } from "vitest"; + +describe("InRaidHelper", () => +{ + let inraidHelper: any; + + beforeAll(() => + { + inraidHelper = container.resolve("InRaidHelper"); + }); + + afterEach(() => + { + vi.restoreAllMocks(); + }); + + describe("calculateFenceStandingChangeFromKills", () => + { + it("should return negative value when player kills 2 scavs as scav", () => + { + const fenceStanding = 0; + const postRaidPlayerVictims = [ + { + Side: "Savage", + Role: "assault" + }, + { + Side: "Savage", + Role: "assault" + } + ]; // Kills + + const databaseServer = container.resolve("DatabaseServer"); + const scavStandingChangeOnKill = databaseServer.getTables().bots.types.assault.experience.standingForKill; + + const result = inraidHelper.calculateFenceStandingChangeFromKills(fenceStanding, postRaidPlayerVictims); + expect(result).toBe(scavStandingChangeOnKill * postRaidPlayerVictims.length); // Scav rep loss times number of scav kills + expect(result).lessThan(0); + }); + + it("should return positive value when player kills 2 PMCs of different sides as scav", () => + { + const fenceStanding = 0; + const postRaidPlayerVictims = [ + { + Side: "Usec", + Role: "sptUsec" + }, + { + Side: "Bear", + Role: "sptBear" + } + ]; // Kills + + const databaseServer = container.resolve("DatabaseServer"); + const bearStandingChangeOnKill = databaseServer.getTables().bots.types.bear.experience.standingForKill; + const usecStandingChangeOnKill = databaseServer.getTables().bots.types.bear.experience.standingForKill; + + const result = inraidHelper.calculateFenceStandingChangeFromKills(fenceStanding, postRaidPlayerVictims); + expect(result).toBe(bearStandingChangeOnKill + usecStandingChangeOnKill); + expect(result).greaterThan(0); + }); + + it("should return negative value when player kills 1 PMC, 1 boss and 2 scavs as scav", () => + { + const fenceStanding = 0; + const postRaidPlayerVictims = [ + { + Side: "Usec", + Role: "sptUsec" + }, + { + Side: "savage", + Role: "assault" + }, + { + Side: "savage", + Role: "bossBoar" + }, + { + Side: "savage", + Role: "assault" + } + ]; // Kills + + const databaseServer = container.resolve("DatabaseServer"); + const usecStandingChangeOnKill = databaseServer.getTables().bots.types.bear.experience.standingForKill; + const scavStandingChangeOnKill = databaseServer.getTables().bots.types.assault.experience.standingForKill; + const bossBoarStandingChangeOnKill = databaseServer.getTables().bots.types.bossboar.experience.standingForKill; + + const result = inraidHelper.calculateFenceStandingChangeFromKills(fenceStanding, postRaidPlayerVictims); + expect(result).toBe(usecStandingChangeOnKill + (scavStandingChangeOnKill * 2) + bossBoarStandingChangeOnKill); + expect(result).lessThan(0); + }); + + it("should return 0 when player kills bot with undefined standing as scav", () => + { + const fenceStanding = 0; + const postRaidPlayerVictims = [ + { + Side: "savage", + Role: "testRole" + } + ]; // Kills + + // Fake getFenceStandingChangeForKillAsScav() returning null + vi.spyOn(inraidHelper, "getFenceStandingChangeForKillAsScav").mockReturnValueOnce(null).mockReturnValueOnce(null); + const result = inraidHelper.calculateFenceStandingChangeFromKills(fenceStanding, postRaidPlayerVictims); + expect(result).toBe(0); + }); + }); +}); \ No newline at end of file