94 lines
3.3 KiB
JavaScript
94 lines
3.3 KiB
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { registerHooks } from "node:module";
|
|
|
|
const configUrl = new URL("../functions/dailyTaskConfig.ts", import.meta.url);
|
|
const serviceUrl = new URL("../functions/dailyTaskService.ts", import.meta.url);
|
|
const functionUrl = new URL("../functions/dailyTaskDebug.ts", import.meta.url);
|
|
const state = { user: null };
|
|
|
|
registerHooks({
|
|
resolve(specifier, context, nextResolve) {
|
|
if (specifier === "@/dailyTaskConfig") return { url: configUrl.href, shortCircuit: true };
|
|
if (specifier === "@/dailyTaskService") return { url: serviceUrl.href, shortCircuit: true };
|
|
if (specifier === "@/Utils") {
|
|
return { url: "data:text/javascript,export default { checkToken: (a, b) => a === b }", shortCircuit: true };
|
|
}
|
|
if (specifier === "@lafjs/cloud") {
|
|
return {
|
|
url: `data:text/javascript,export default globalThis.__dailyTaskDebugCloud`,
|
|
shortCircuit: true,
|
|
};
|
|
}
|
|
return nextResolve(specifier, context);
|
|
},
|
|
});
|
|
|
|
globalThis.__dailyTaskDebugCloud = {
|
|
database() {
|
|
return {
|
|
collection() {
|
|
return {
|
|
where() {
|
|
return {
|
|
async getOne() { return { data: state.user }; },
|
|
async update(data) { Object.assign(state.user, data); return { updated: 1 }; },
|
|
};
|
|
},
|
|
};
|
|
},
|
|
};
|
|
},
|
|
};
|
|
process.env.DAILY_TASK_DEBUG_KEY = "debug-key";
|
|
|
|
const handler = (await import(functionUrl)).default;
|
|
|
|
function makeUser(isDebug = "true") {
|
|
state.user = { _id: "debug-user", token: "token", isDebug, levelAmount: 20, task: null };
|
|
}
|
|
|
|
async function call(action, extra = {}) {
|
|
return handler({ body: { uid: "debug-user", token: "token", debugKey: "debug-key", action, ...extra } });
|
|
}
|
|
|
|
test("rejects non-debug users", async () => {
|
|
makeUser(false);
|
|
const result = await call("complete_all_daily");
|
|
assert.equal(result.code, 403);
|
|
});
|
|
|
|
test("rejects an invalid debug key", async () => {
|
|
makeUser();
|
|
const result = await call("complete_all_daily", { debugKey: "wrong-key" });
|
|
assert.equal(result.code, 403);
|
|
});
|
|
|
|
test("completes one daily task by slot", async () => {
|
|
makeUser();
|
|
const result = await call("complete_daily", { slot: 0 });
|
|
assert.equal(result.code, 1);
|
|
assert.equal(result.data.task.dailyTasks[0].value, result.data.task.dailyTasks[0].target);
|
|
assert.equal(result.data.task.dailyTasks[0].state, 1);
|
|
});
|
|
|
|
test("sets weekly stars and unlocks matching rewards", async () => {
|
|
makeUser();
|
|
const result = await call("set_weekly_stars", { value: 105 });
|
|
assert.equal(result.data.task.weeklyStars, 105);
|
|
assert.deepEqual(result.data.task.weeklyRewards.map(item => item.state), [1, 1, 1, 0]);
|
|
});
|
|
|
|
test("daily reset preserves weekly progress and weekly reset preserves daily tasks", async () => {
|
|
makeUser();
|
|
const weekly = await call("set_weekly_stars", { value: 70 });
|
|
state.user.task = JSON.stringify(weekly.data.task);
|
|
const resetDaily = await call("reset_daily");
|
|
assert.equal(resetDaily.data.task.weeklyStars, 70);
|
|
const dailyIds = resetDaily.data.task.dailyTasks.map(item => item.taskId);
|
|
state.user.task = JSON.stringify(resetDaily.data.task);
|
|
const resetWeekly = await call("reset_weekly");
|
|
assert.equal(resetWeekly.data.task.weeklyStars, 0);
|
|
assert.deepEqual(resetWeekly.data.task.dailyTasks.map(item => item.taskId), dailyIds);
|
|
});
|