mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 18:40:53 +00:00
f700c53154
## Description: Changes the team order to Red, Blue, Yellow, Green, Orange, Purple, Teal instead of what it originally was (Red, Blue, Teal, Purple, Yellow, Orange, Green) Teal and Blue look similar, so I think it's better to move them further apart. Instead, the primary colors are chosen first. Fixes #614 In the long run, I think it would be nice to have the teams randomly chosen from available colors and not always in the same order - e.g. a three-team game isn't always Red, Blue, and Yellow, it could be any mix of the colors. However, my programming skills aren't great enough to do that. ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced - [x] I understand that submitting code with bugs that could have been caught through manual testing blocks releases and new features for all contributors ## Please put your Discord username so you can be contacted if a bug or regression is found: Spartan Oligarchy/Loymdayddaud
169 lines
5.7 KiB
TypeScript
169 lines
5.7 KiB
TypeScript
import { ColoredTeams, PlayerInfo, PlayerType } from "../src/core/game/Game";
|
|
import { assignTeams } from "../src/core/game/TeamAssignment";
|
|
|
|
const teams = [ColoredTeams.Red, ColoredTeams.Blue];
|
|
|
|
describe("assignTeams", () => {
|
|
const createPlayer = (id: string, clan?: string): PlayerInfo => {
|
|
const name = clan ? `[${clan}]Player ${id}` : `Player ${id}`;
|
|
return new PlayerInfo(
|
|
"🏳️", // flag
|
|
name,
|
|
PlayerType.Human,
|
|
null, // clientID (null for testing)
|
|
id,
|
|
null, // nation (null for testing)
|
|
);
|
|
};
|
|
|
|
it("should assign players to teams when no clans are present", () => {
|
|
const players = [
|
|
createPlayer("1"),
|
|
createPlayer("2"),
|
|
createPlayer("3"),
|
|
createPlayer("4"),
|
|
];
|
|
|
|
const result = assignTeams(players, teams);
|
|
|
|
// Check that players are assigned alternately
|
|
expect(result.get(players[0])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[1])).toEqual(ColoredTeams.Blue);
|
|
expect(result.get(players[2])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[3])).toEqual(ColoredTeams.Blue);
|
|
});
|
|
|
|
it("should keep clan members together on the same team", () => {
|
|
const players = [
|
|
createPlayer("1", "CLANA"),
|
|
createPlayer("2", "CLANA"),
|
|
createPlayer("3", "CLANB"),
|
|
createPlayer("4", "CLANB"),
|
|
];
|
|
|
|
const result = assignTeams(players, teams);
|
|
|
|
// Check that clan members are on the same team
|
|
expect(result.get(players[0])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[1])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[2])).toEqual(ColoredTeams.Blue);
|
|
expect(result.get(players[3])).toEqual(ColoredTeams.Blue);
|
|
});
|
|
|
|
it("should handle mixed clan and non-clan players", () => {
|
|
const players = [
|
|
createPlayer("1", "CLANA"),
|
|
createPlayer("2", "CLANA"),
|
|
createPlayer("3"),
|
|
createPlayer("4"),
|
|
];
|
|
|
|
const result = assignTeams(players, teams);
|
|
|
|
// Check that clan members are together and non-clan players balance teams
|
|
expect(result.get(players[0])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[1])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[2])).toEqual(ColoredTeams.Blue);
|
|
expect(result.get(players[3])).toEqual(ColoredTeams.Blue);
|
|
});
|
|
|
|
it("should kick players when teams are full", () => {
|
|
const players = [
|
|
createPlayer("1", "CLANA"),
|
|
createPlayer("2", "CLANA"),
|
|
createPlayer("3", "CLANA"),
|
|
createPlayer("4", "CLANA"),
|
|
createPlayer("5", "CLANB"),
|
|
createPlayer("6", "CLANB"),
|
|
];
|
|
|
|
const result = assignTeams(players, teams);
|
|
|
|
// Check that players are kicked when teams are full
|
|
expect(result.get(players[0])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[1])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[2])).toEqual(ColoredTeams.Red);
|
|
|
|
expect(result.get(players[3])).toEqual("kicked");
|
|
|
|
expect(result.get(players[4])).toEqual(ColoredTeams.Blue);
|
|
expect(result.get(players[5])).toEqual(ColoredTeams.Blue);
|
|
});
|
|
|
|
it("should handle empty player list", () => {
|
|
const result = assignTeams([], teams);
|
|
expect(result.size).toBe(0);
|
|
});
|
|
|
|
it("should handle single player", () => {
|
|
const players = [createPlayer("1")];
|
|
const result = assignTeams(players, teams);
|
|
expect(result.get(players[0])).toEqual(ColoredTeams.Red);
|
|
});
|
|
|
|
it("should handle multiple clans with different sizes", () => {
|
|
const players = [
|
|
createPlayer("1", "CLANA"),
|
|
createPlayer("2", "CLANA"),
|
|
createPlayer("3", "CLANA"),
|
|
createPlayer("4", "CLANB"),
|
|
createPlayer("5", "CLANB"),
|
|
createPlayer("6", "CLANC"),
|
|
];
|
|
|
|
const result = assignTeams(players, teams);
|
|
|
|
// Check that larger clans are assigned first
|
|
expect(result.get(players[0])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[1])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[2])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[3])).toEqual(ColoredTeams.Blue);
|
|
expect(result.get(players[4])).toEqual(ColoredTeams.Blue);
|
|
expect(result.get(players[5])).toEqual(ColoredTeams.Blue);
|
|
});
|
|
|
|
it("should distribute players among a larger number of teams", () => {
|
|
const players = [
|
|
createPlayer("1", "CLANA"),
|
|
createPlayer("2", "CLANA"),
|
|
createPlayer("3", "CLANA"),
|
|
createPlayer("4", "CLANB"),
|
|
createPlayer("5", "CLANB"),
|
|
createPlayer("6", "CLANC"),
|
|
createPlayer("7"),
|
|
createPlayer("8"),
|
|
createPlayer("9"),
|
|
createPlayer("10"),
|
|
createPlayer("11"),
|
|
createPlayer("12"),
|
|
createPlayer("13"),
|
|
createPlayer("14"),
|
|
];
|
|
|
|
const result = assignTeams(players, [
|
|
ColoredTeams.Red,
|
|
ColoredTeams.Blue,
|
|
ColoredTeams.Yellow,
|
|
ColoredTeams.Green,
|
|
ColoredTeams.Purple,
|
|
ColoredTeams.Orange,
|
|
ColoredTeams.Teal,
|
|
]);
|
|
|
|
expect(result.get(players[0])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[1])).toEqual(ColoredTeams.Red);
|
|
expect(result.get(players[2])).toEqual("kicked");
|
|
expect(result.get(players[3])).toEqual(ColoredTeams.Blue);
|
|
expect(result.get(players[4])).toEqual(ColoredTeams.Blue);
|
|
expect(result.get(players[5])).toEqual(ColoredTeams.Yellow);
|
|
expect(result.get(players[6])).toEqual(ColoredTeams.Green);
|
|
expect(result.get(players[7])).toEqual(ColoredTeams.Purple);
|
|
expect(result.get(players[8])).toEqual(ColoredTeams.Orange);
|
|
expect(result.get(players[9])).toEqual(ColoredTeams.Teal);
|
|
expect(result.get(players[10])).toEqual(ColoredTeams.Yellow);
|
|
expect(result.get(players[11])).toEqual(ColoredTeams.Green);
|
|
expect(result.get(players[12])).toEqual(ColoredTeams.Purple);
|
|
expect(result.get(players[13])).toEqual(ColoredTeams.Orange);
|
|
});
|
|
});
|