| require("../../web/scripts/api"); |
|
|
| const fs = require("fs"); |
| const path = require("path"); |
| function* walkSync(dir) { |
| const files = fs.readdirSync(dir, { withFileTypes: true }); |
| for (const file of files) { |
| if (file.isDirectory()) { |
| yield* walkSync(path.join(dir, file.name)); |
| } else { |
| yield path.join(dir, file.name); |
| } |
| } |
| } |
|
|
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| export function mockApi(config = {}) { |
| let { mockExtensions, mockNodeDefs, userConfig, settings, userData } = { |
| userConfig, |
| settings: {}, |
| userData: {}, |
| ...config, |
| }; |
| if (!mockExtensions) { |
| mockExtensions = Array.from(walkSync(path.resolve("../web/extensions/core"))) |
| .filter((x) => x.endsWith(".js")) |
| .map((x) => path.relative(path.resolve("../web"), x)); |
| } |
| if (!mockNodeDefs) { |
| mockNodeDefs = JSON.parse(fs.readFileSync(path.resolve("./data/object_info.json"))); |
| } |
|
|
| const events = new EventTarget(); |
| const mockApi = { |
| addEventListener: events.addEventListener.bind(events), |
| removeEventListener: events.removeEventListener.bind(events), |
| dispatchEvent: events.dispatchEvent.bind(events), |
| getSystemStats: jest.fn(), |
| getExtensions: jest.fn(() => mockExtensions), |
| getNodeDefs: jest.fn(() => mockNodeDefs), |
| init: jest.fn(), |
| apiURL: jest.fn((x) => "../../web/" + x), |
| createUser: jest.fn((username) => { |
| if(username in userConfig.users) { |
| return { status: 400, json: () => "Duplicate" } |
| } |
| userConfig.users[username + "!"] = username; |
| return { status: 200, json: () => username + "!" } |
| }), |
| getUserConfig: jest.fn(() => userConfig ?? { storage: "browser", migrated: false }), |
| getSettings: jest.fn(() => settings), |
| storeSettings: jest.fn((v) => Object.assign(settings, v)), |
| getUserData: jest.fn((f) => { |
| if (f in userData) { |
| return { status: 200, json: () => userData[f] }; |
| } else { |
| return { status: 404 }; |
| } |
| }), |
| storeUserData: jest.fn((file, data) => { |
| userData[file] = data; |
| }), |
| }; |
| jest.mock("../../web/scripts/api", () => ({ |
| get api() { |
| return mockApi; |
| }, |
| })); |
| } |
|
|