Files
bitburner-src/test/jest/Netscript/Sleeve.test.ts
2026-01-28 22:10:55 -08:00

173 lines
6.4 KiB
TypeScript

import { FactionName } from "@enums";
import { Player } from "@player";
import { joinFaction } from "../../../src/Faction/FactionHelpers";
import { Factions } from "../../../src/Faction/Factions";
import {
getSleeveCost,
MaxSleevesFromCovenant,
recalculateNumberOfOwnedSleeves,
} from "../../../src/PersonObjects/Sleeve/SleeveCovenantPurchases";
import { getNS, initGameEnvironment, setupBasicTestingEnvironment } from "../Utilities";
import { prestigeSourceFile } from "../../../src/Prestige";
beforeAll(() => {
initGameEnvironment();
});
describe("Cost", () => {
beforeEach(() => {
setupBasicTestingEnvironment();
Player.bitNodeN = 10;
Player.sourceFiles.set(10, 0);
Player.sleevesFromCovenant = 0;
recalculateNumberOfOwnedSleeves();
});
test("getSleeveCost", () => {
// Invalid values
expect(getSleeveCost(-1)).toStrictEqual(Infinity);
expect(getSleeveCost(1.5)).toStrictEqual(Infinity);
expect(getSleeveCost(5)).toStrictEqual(Infinity);
expect(getSleeveCost(Infinity)).toStrictEqual(Infinity);
expect(getSleeveCost(NaN)).toStrictEqual(Infinity);
// Valid values
expect(getSleeveCost(0)).toStrictEqual(10e12);
expect(getSleeveCost(1)).toStrictEqual(100e12);
expect(getSleeveCost(2)).toStrictEqual(1e15);
expect(getSleeveCost(3)).toStrictEqual(10e15);
expect(getSleeveCost(4)).toStrictEqual(100e15);
});
test("getMemoryUpgradeCost", () => {
// Invalid values
Player.sleeves[0].memory = 1;
expect(Player.sleeves[0].getMemoryUpgradeCost(-1)).toStrictEqual(Infinity);
expect(Player.sleeves[0].getMemoryUpgradeCost(1.5)).toStrictEqual(Infinity);
expect(Player.sleeves[0].getMemoryUpgradeCost(100)).toStrictEqual(Infinity);
expect(Player.sleeves[0].getMemoryUpgradeCost(Infinity)).toStrictEqual(Infinity);
expect(Player.sleeves[0].getMemoryUpgradeCost(NaN)).toStrictEqual(Infinity);
// Valid values
Player.sleeves[0].memory = 1;
expect(Player.sleeves[0].getMemoryUpgradeCost(0)).toStrictEqual(0);
expect(Player.sleeves[0].getMemoryUpgradeCost(1)).toStrictEqual(1e12);
expect(Player.sleeves[0].getMemoryUpgradeCost(10)).toStrictEqual(1.0949720999737857e13);
expect(Player.sleeves[0].getMemoryUpgradeCost(99)).toStrictEqual(3.051297116790364e14);
Player.sleeves[0].memory = 50;
expect(Player.sleeves[0].getMemoryUpgradeCost(0)).toStrictEqual(0);
expect(Player.sleeves[0].getMemoryUpgradeCost(1)).toStrictEqual(2.6388117932094194e12);
expect(Player.sleeves[0].getMemoryUpgradeCost(10)).toStrictEqual(2.889425290646109e13);
expect(Player.sleeves[0].getMemoryUpgradeCost(50)).toStrictEqual(2.231891220185655e14);
});
});
describe("Success", () => {
beforeEach(() => {
setupBasicTestingEnvironment();
Player.bitNodeN = 10;
Player.sourceFiles.set(10, 0);
Player.sleevesFromCovenant = 0;
recalculateNumberOfOwnedSleeves();
joinFaction(Factions[FactionName.TheCovenant]);
});
test("purchaseSleeve", () => {
const ns = getNS();
for (let i = 0; i < 5; ++i) {
Player.money = getSleeveCost(Player.sleevesFromCovenant);
expect(Player.sleevesFromCovenant).toStrictEqual(i);
expect(ns.sleeve.getNumSleeves()).toStrictEqual(i + 1);
expect(ns.sleeve.purchaseSleeve().success).toStrictEqual(true);
expect(Player.sleevesFromCovenant).toStrictEqual(i + 1);
expect(ns.sleeve.getNumSleeves()).toStrictEqual(i + 2);
expect(Player.money).toStrictEqual(0);
}
});
test("upgradeMemory", () => {
const ns = getNS();
const sleeve = Player.sleeves[0];
// Upgrade memory from 1 to 100 gradually
sleeve.memory = 1;
for (let i = 0; i < 99; ++i) {
Player.money = sleeve.getMemoryUpgradeCost(1);
expect(sleeve.memory).toStrictEqual(i + 1);
expect(ns.sleeve.upgradeMemory(0, 1).success).toStrictEqual(true);
expect(sleeve.memory).toStrictEqual(i + 2);
expect(Player.money).toStrictEqual(0);
}
// Upgrade memory from 1 to 100 immediately
sleeve.memory = 1;
Player.money = sleeve.getMemoryUpgradeCost(99);
expect(ns.sleeve.upgradeMemory(0, 99).success).toStrictEqual(true);
expect(sleeve.memory).toStrictEqual(100);
expect(Player.money).toStrictEqual(0);
});
});
describe("Failure", () => {
beforeEach(() => {
setupBasicTestingEnvironment();
// Set BN to anything that is not BN10, then bitflume.
Player.bitNodeN = 1;
prestigeSourceFile(true);
});
test("purchaseSleeve", () => {
const ns = getNS();
// Not in BN10
expect(() => ns.sleeve.purchaseSleeve()).toThrow("You must be in BitNode 10");
let result;
// Not a member of The Covenant
Player.bitNodeN = 10;
Player.sourceFiles.set(10, 0);
Player.sleevesFromCovenant = 0;
recalculateNumberOfOwnedSleeves();
result = ns.sleeve.purchaseSleeve();
expect(result.success).toStrictEqual(false);
expect(result.message).toContain("You must be a member of");
// Have max number of purchasable sleeves
joinFaction(Factions[FactionName.TheCovenant]);
Player.sleevesFromCovenant = MaxSleevesFromCovenant;
recalculateNumberOfOwnedSleeves();
result = ns.sleeve.purchaseSleeve();
expect(result.success).toStrictEqual(false);
expect(result.message).toContain("You already have the maximum amount of sleeves");
// Not enough money
Player.sleevesFromCovenant = 0;
recalculateNumberOfOwnedSleeves();
Player.money = 0;
result = ns.sleeve.purchaseSleeve();
expect(result.success).toStrictEqual(false);
expect(result.message).toContain("You must have at least");
});
test("purchaseSleeve", () => {
const ns = getNS();
// Not in BN10
expect(() => ns.sleeve.upgradeMemory(0, 1)).toThrow("You must be in BitNode 10");
let result;
// Not a member of The Covenant
Player.bitNodeN = 10;
Player.sourceFiles.set(10, 0);
Player.sleevesFromCovenant = 0;
recalculateNumberOfOwnedSleeves();
result = ns.sleeve.upgradeMemory(0, 1);
expect(result.success).toStrictEqual(false);
expect(result.message).toContain("You must be a member of");
// Purchase too many upgrades
joinFaction(Factions[FactionName.TheCovenant]);
result = ns.sleeve.upgradeMemory(0, 100);
expect(result.success).toStrictEqual(false);
expect(result.message).toContain("Invalid amount of upgrade");
// Not enough money
Player.money = 0;
result = ns.sleeve.upgradeMemory(0, 1);
expect(result.success).toStrictEqual(false);
expect(result.message).toContain("You must have at least");
});
});