From 4a0d3c348736ec706b8e74c6c94d7e9dd0f62533 Mon Sep 17 00:00:00 2001 From: Refringe Date: Thu, 11 Apr 2024 21:12:43 -0400 Subject: [PATCH] Test - BotGenerator - Refactored - Made the sessionId parameter for generateBotNickname optional and marked it as deprecated, to be removed in v3.9. It wasn't being used. - Refactored the tests for the generateBotNickname method in the BotGenerator class. Mostly to bring it inline with v3.8 changes to the structure of botGenerationDetails. --- project/src/generators/BotGenerator.ts | 10 +- project/tests/generators/BotGenerator.test.ts | 169 ++++++++++++------ 2 files changed, 122 insertions(+), 57 deletions(-) diff --git a/project/src/generators/BotGenerator.ts b/project/src/generators/BotGenerator.ts index 0a9c5f93..dc572a86 100644 --- a/project/src/generators/BotGenerator.ts +++ b/project/src/generators/BotGenerator.ts @@ -258,13 +258,15 @@ export class BotGenerator * @param botJsonTemplate x.json from database * @param botGenerationDetails * @param botRole role of bot e.g. assault + * @param sessionId profile session id * @returns Nickname for bot */ + // TODO: Remove sessionId parameter from this function in v3.9.0 protected generateBotNickname( botJsonTemplate: IBotType, botGenerationDetails: BotGenerationDetails, botRole: string, - sessionId: string, + sessionId?: string, // @deprecated as of v3.8.1 ): string { const isPlayerScav = botGenerationDetails.isPlayerScav; @@ -273,9 +275,9 @@ export class BotGenerator this.randomUtil.getArrayValue(botJsonTemplate.lastName) || "" }`; name = name.trim(); - const playerProfile = this.profileHelper.getPmcProfile(sessionId); - // Simulate bot looking like a Player scav with the pmc name in brackets + // Simulate bot looking like a player scav with the PMC name in brackets. + // E.g. "ScavName (PMCName)" if (botRole === "assault" && this.randomUtil.getChance100(this.botConfig.chanceAssaultScavHasPlayerScavName)) { if (isPlayerScav) @@ -300,7 +302,7 @@ export class BotGenerator if (botGenerationDetails.isPmc && botGenerationDetails.allPmcsHaveSameNameAsPlayer) { const prefix = this.localisationService.getRandomTextThatMatchesPartialKey("pmc-name_prefix_"); - name = `${prefix} ${botGenerationDetails.playerName}`; + name = `${prefix} ${name}`; } return name; diff --git a/project/tests/generators/BotGenerator.test.ts b/project/tests/generators/BotGenerator.test.ts index 05d9f402..6562bcae 100644 --- a/project/tests/generators/BotGenerator.test.ts +++ b/project/tests/generators/BotGenerator.test.ts @@ -55,94 +55,157 @@ describe("BotGenerator", () => describe("generateBotNickname", () => { - it("should return single name `test` for non pscav assault bot name ", () => + it("should choose random firstname for non player scav assault bot", () => { + const botJsonTemplate = { firstName: ["one", "two"], lastName: [] }; + const botGenerationDetails = { isPlayerScav: false, isPmc: true, allPmcsHaveSameNameAsPlayer: false }; + const botRole = "assault"; + botGenerator.botConfig.chanceAssaultScavHasPlayerScavName = 0; const mockPlayerProfile = { Info: { Nickname: "Player Nickname", Level: 1 } }; - vi.spyOn(botGenerator.profileHelper, "getPmcProfile").mockReturnValue(mockPlayerProfile); - const botJsonTemplate = { firstName: ["test"], lastName: [] }; + const result = botGenerator.generateBotNickname(botJsonTemplate, botGenerationDetails, botRole); - const sessionId = "sessionId"; - const isPlayerScav = false; - const botRole = "assault"; - - const result = botGenerator.generateBotNickname(botJsonTemplate, isPlayerScav, botRole, sessionId); - expect(result).toBe("test"); + expect(result).toMatch(/(one|two)/); }); - it("should return `test assault` for non pscav assault bot with `showTypeInNickname` enabled ", () => + it("should choose random lastname for non player scav assault bot", () => { + const botJsonTemplate = { firstName: [], lastName: [["one", "two"]] }; + const botGenerationDetails = { isPlayerScav: false, isPmc: true, allPmcsHaveSameNameAsPlayer: false }; + const botRole = "assault"; + + botGenerator.botConfig.chanceAssaultScavHasPlayerScavName = 0; + + const mockPlayerProfile = { Info: { Nickname: "Player Nickname", Level: 1 } }; + vi.spyOn(botGenerator.profileHelper, "getPmcProfile").mockReturnValue(mockPlayerProfile); + + const result = botGenerator.generateBotNickname(botJsonTemplate, botGenerationDetails, botRole); + + expect(result).toMatch(/(one|two)/); + }); + + it("should choose random firstname and lastname for non player scav assault bot", () => + { + const botJsonTemplate = { firstName: ["first-one", "first-two"], lastName: [["last-one", "last-two"]] }; + const botGenerationDetails = { isPlayerScav: false, isPmc: true, allPmcsHaveSameNameAsPlayer: false }; + const botRole = "assault"; + + botGenerator.botConfig.chanceAssaultScavHasPlayerScavName = 0; + + const mockPlayerProfile = { Info: { Nickname: "Player Nickname", Level: 1 } }; + vi.spyOn(botGenerator.profileHelper, "getPmcProfile").mockReturnValue(mockPlayerProfile); + + const result = botGenerator.generateBotNickname(botJsonTemplate, botGenerationDetails, botRole); + + expect(result).toMatch(/first-(one|two) last-(one|two)/); + }); + + it("should choose random firstname for player scav assault bot", () => + { + const botJsonTemplate = { firstName: ["one", "two"], lastName: [] }; + const botGenerationDetails = { isPlayerScav: true, isPmc: false, allPmcsHaveSameNameAsPlayer: false }; + const botRole = "assault"; + + botGenerator.botConfig.chanceAssaultScavHasPlayerScavName = 0; + + const mockPlayerProfile = { Info: { Nickname: "Player Nickname", Level: 1 } }; + vi.spyOn(botGenerator.profileHelper, "getPmcProfile").mockReturnValue(mockPlayerProfile); + + const result = botGenerator.generateBotNickname(botJsonTemplate, botGenerationDetails, botRole); + + expect(result).toMatch(/(one|two)/); + }); + + it("should choose random lastname for player scav assault bot", () => + { + const botJsonTemplate = { firstName: [], lastName: [["one", "two"]] }; + const botGenerationDetails = { isPlayerScav: true, isPmc: false, allPmcsHaveSameNameAsPlayer: false }; + const botRole = "assault"; + + botGenerator.botConfig.chanceAssaultScavHasPlayerScavName = 0; + + const mockPlayerProfile = { Info: { Nickname: "Player Nickname", Level: 1 } }; + vi.spyOn(botGenerator.profileHelper, "getPmcProfile").mockReturnValue(mockPlayerProfile); + + const result = botGenerator.generateBotNickname(botJsonTemplate, botGenerationDetails, botRole); + + expect(result).toMatch(/(one|two)/); + }); + + it("should choose random firstname and lastname for player scav assault bot", () => + { + const botJsonTemplate = { firstName: ["first-one", "first-two"], lastName: [["last-one", "last-two"]] }; + const botGenerationDetails = { isPlayerScav: true, isPmc: false, allPmcsHaveSameNameAsPlayer: false }; + const botRole = "assault"; + + botGenerator.botConfig.chanceAssaultScavHasPlayerScavName = 0; + + const mockPlayerProfile = { Info: { Nickname: "Player Nickname", Level: 1 } }; + vi.spyOn(botGenerator.profileHelper, "getPmcProfile").mockReturnValue(mockPlayerProfile); + + const result = botGenerator.generateBotNickname(botJsonTemplate, botGenerationDetails, botRole); + + expect(result).toMatch(/first-(one|two) last-(one|two)/); + }); + + it("should append bot type to end of name when showTypeInNickname option is enabled ", () => + { + const botJsonTemplate = { firstName: ["firstname"], lastName: ["lastname"] }; + const botGenerationDetails = { isPlayerScav: false, isPmc: true, allPmcsHaveSameNameAsPlayer: false }; + const botRole = "assault"; + + botGenerator.botConfig.chanceAssaultScavHasPlayerScavName = 0; botGenerator.botConfig.showTypeInNickname = true; const mockPlayerProfile = { Info: { Nickname: "Player Nickname", Level: 1 } }; vi.spyOn(botGenerator.profileHelper, "getPmcProfile").mockReturnValue(mockPlayerProfile); - const botJsonTemplate = { firstName: ["test"], lastName: [] }; + const result = botGenerator.generateBotNickname(botJsonTemplate, botGenerationDetails, botRole); - const sessionId = "sessionId"; - const isPlayerScav = false; - const botRole = "assault"; - - const result = botGenerator.generateBotNickname(botJsonTemplate, isPlayerScav, botRole, sessionId); - expect(result).toBe("test assault"); + expect(result).toBe("firstname lastname assault"); }); - it("should return name `test Player` for bot with same name as player and `addPrefixToSameNamePMCAsPlayerChance` 100%", () => + it("should return name prefix for PMC bot with same name as player if allPmcsHaveSameNameAsPlayer is enabled", () => { + const botJsonTemplate = { firstName: ["player"], lastName: [] }; + const botGenerationDetails = { isPlayerScav: false, isPmc: true, allPmcsHaveSameNameAsPlayer: true }; + const botRole = "assault"; + botGenerator.botConfig.showTypeInNickname = false; botGenerator.pmcConfig.addPrefixToSameNamePMCAsPlayerChance = 100; - const mockPlayerProfile = { Info: { Nickname: "Player", Level: 1 } }; - vi.spyOn(botGenerator.profileHelper, "getPmcProfile").mockReturnValue(mockPlayerProfile); - vi.spyOn(botGenerator.localisationService, "getRandomTextThatMatchesPartialKey").mockReturnValue("test"); - - const botJsonTemplate = { firstName: ["Player"], lastName: [] }; - - const sessionId = "sessionId"; - const isPlayerScav = false; - const botRole = "assault"; - - const result = botGenerator.generateBotNickname(botJsonTemplate, isPlayerScav, botRole, sessionId); - expect(result).toBe("test Player"); - }); - - it("should return name `test` for player scav bot", () => - { - botGenerator.botConfig.chanceAssaultScavHasPlayerScavName = 100; - - const mockPlayerProfile = { Info: { Nickname: "Player", Level: 1 } }; + const mockPlayerProfile = { Info: { Nickname: "player", Level: 1 } }; vi.spyOn(botGenerator.profileHelper, "getPmcProfile").mockReturnValue(mockPlayerProfile); - const botJsonTemplate = { firstName: ["test"], lastName: [] }; + const getRandomTextThatMatchesPartialKeySpy = vi.spyOn( + (botGenerator as any).localisationService, + "getRandomTextThatMatchesPartialKey", + ).mockReturnValue("test"); - const sessionId = "sessionId"; - const isPlayerScav = true; - const botRole = "assault"; + const result = botGenerator.generateBotNickname(botJsonTemplate, botGenerationDetails, botRole); - const result = botGenerator.generateBotNickname(botJsonTemplate, isPlayerScav, botRole, sessionId); - expect(result).toBe("test"); + expect(getRandomTextThatMatchesPartialKeySpy).toHaveBeenCalled(); + expect(result).toBe("test player"); }); - it("should return name `test (usec)` for player scav bot", () => + it("should generate PMC name in brackets behind scav name when chanceAssaultScavHasPlayerScavName is enabled", () => { + const botJsonTemplate = { firstName: ["scav"], lastName: [] }; + const botGenerationDetails = { isPlayerScav: false, isPmc: true, allPmcsHaveSameNameAsPlayer: false }; + const botRole = "assault"; + botGenerator.botConfig.chanceAssaultScavHasPlayerScavName = 100; - botGenerator.databaseServer.getTables().bots.types.usec.firstName = ["usec"]; + botGenerator.databaseServer.getTables().bots.types.usec.firstName = ["player"]; botGenerator.databaseServer.getTables().bots.types.bear.firstName = []; const mockPlayerProfile = { Info: { Nickname: "Player", Level: 1 } }; vi.spyOn(botGenerator.profileHelper, "getPmcProfile").mockReturnValue(mockPlayerProfile); - const botJsonTemplate = { firstName: ["test"], lastName: [] }; - - const sessionId = "sessionId"; - const isPlayerScav = false; - const botRole = "assault"; - - const result = botGenerator.generateBotNickname(botJsonTemplate, isPlayerScav, botRole, sessionId); - expect(result).toBe("test (usec)"); + const result = botGenerator.generateBotNickname(botJsonTemplate, botGenerationDetails, botRole); + expect(result).toBe("scav (player)"); }); }); });