Files
bitburner-src/test/jest/Migration/Migration.test.ts
T
Michael Ficocelli 6073964768 DARKNET: Darkweb Expansion Project & Bitnode (#2139)
This is BN15. It is a really big change; see the PR for all the details.
2026-02-03 03:40:36 -08:00

61 lines
2.5 KiB
TypeScript

import { Player } from "@player";
import fs from "node:fs";
import type { ScriptFilePath } from "../../../src/Paths/ScriptFilePath";
import { loadGame } from "../../../src/SaveObject";
import * as db from "../../../src/db";
import * as FileUtils from "../../../src/utils/FileUtils";
describe("v3", () => {
test("v2.8.1 to v3.0.0", async () => {
const saveData = new Uint8Array(fs.readFileSync("test/jest/Migration/save-files/v2.8.1.gz"));
// Simulate loading the data in IndexedDB
const mockedLoad = jest.spyOn(db, "load");
/**
* We must use structuredClone(saveData) instead of saveData; otherwise, the check of mockedDownload won't catch
* wrong changes in evaluateVersionCompatibility (e.g., unexpectedly mutating saveData before passing it to
* downloadContentAsFile).
*/
mockedLoad.mockReturnValue(Promise.resolve(structuredClone(saveData)));
const mockedDownload = jest.spyOn(FileUtils, "downloadContentAsFile");
const originalConsoleError = console.error;
const originalConsoleWarning = console.warn;
const consoleError = jest.spyOn(console, "error").mockImplementation((...data: unknown[]) => {
if (Array.isArray(data) && data.length > 0 && (data[0] === "There was no Darknet savedata" || data[0] === "")) {
return;
}
originalConsoleError(...data);
});
const consoleWarning = jest.spyOn(console, "warn").mockImplementation((...data: unknown[]) => {
if (
Array.isArray(data) &&
data.length > 0 &&
(data[0] === "Encountered the following issue while loading Darknet savedata:" || data[0] === "Savedata:")
) {
return;
}
originalConsoleWarning(...data);
});
await loadGame(await db.load());
consoleError.mockRestore();
consoleWarning.mockRestore();
// Check if auto-migration works
expect(
Player.getHomeComputer()
.scripts.get("a.js" as ScriptFilePath)
?.code.includes("ns.ui.openTail()"),
).toStrictEqual(true);
if (!Player.corporation) {
throw new Error("The save file does not have corporation data");
}
expect(Object.keys(Player.corporation.upgrades).includes("DreamSense")).toStrictEqual(false);
expect(Player.corporation.funds).toStrictEqual(110e9);
// Check if evaluateVersionCompatibility correctly loads the data in IndexedDB and passes it to downloadContentAsFile
expect(mockedDownload).toHaveBeenCalledWith(saveData, "bitburnerSave_backup_2.8.1_1756913326.json.gz");
});
});