97 lines
3.3 KiB
JavaScript
97 lines
3.3 KiB
JavaScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
const moduleUrl = new URL("../functions/wucaiMigration.ts", import.meta.url);
|
|
const {
|
|
addWucaiReward,
|
|
buildWucaiPreview,
|
|
isPristineWucaiTarget,
|
|
normalizeWucaiUser,
|
|
} = await import(moduleUrl);
|
|
|
|
test("normalization preserves valid zero values and derived entitlements", () => {
|
|
const normalized = normalizeWucaiUser({
|
|
levelAmount: 0,
|
|
freezeAmount: 0,
|
|
hammerAmount: 0,
|
|
magicAmount: 0,
|
|
pay_user: true,
|
|
monthCardTime: 123,
|
|
passCheck: [{ activate: true }],
|
|
headArr: [7],
|
|
catArr: [8],
|
|
});
|
|
|
|
assert.equal(normalized.levelAmount, 0);
|
|
assert.equal(normalized.freezeAmount, 0);
|
|
assert.equal(normalized.hammerAmount, 0);
|
|
assert.equal(normalized.magicAmount, 0);
|
|
assert.equal(normalized.pay_user, true);
|
|
assert.equal(normalized.monthCardTime, 123);
|
|
assert.deepEqual(normalized.headArr, [7]);
|
|
assert.deepEqual(normalized.catArr, [8]);
|
|
});
|
|
|
|
test("preview is sanitized and includes paid activation booleans", () => {
|
|
const preview = buildWucaiPreview({
|
|
levelAmount: 12,
|
|
coinAmount: 300,
|
|
healthAmount: 4,
|
|
headArr: [1, 2],
|
|
catArr: [1, 2, 3],
|
|
monthCardTime: 200,
|
|
passCheck: JSON.stringify([{ activate: true }]),
|
|
token: "must-not-leak",
|
|
unionid: "must-not-leak",
|
|
}, 100);
|
|
|
|
assert.equal(preview.monthCardActive, true);
|
|
assert.equal(preview.passCheckActive, true);
|
|
assert.equal(preview.headCount, 2);
|
|
assert.equal(preview.catCount, 3);
|
|
assert.equal("token" in preview, false);
|
|
assert.equal("unionid" in preview, false);
|
|
});
|
|
|
|
test("pristine classification requires explicit unpaid state and no activity", () => {
|
|
const defaults = {
|
|
levelAmount: 0,
|
|
coinAmount: 0,
|
|
healthAmount: 5,
|
|
freezeAmount: 3,
|
|
hammerAmount: 3,
|
|
magicAmount: 3,
|
|
pay_user: false,
|
|
headArr: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17],
|
|
catArr: [1, 2, 3],
|
|
};
|
|
|
|
assert.equal(isPristineWucaiTarget(defaults, false), true);
|
|
const { pay_user, ...withoutPayUser } = defaults;
|
|
assert.equal(isPristineWucaiTarget(withoutPayUser, false), false);
|
|
assert.equal(isPristineWucaiTarget({ ...defaults, coinAmount: 1 }, false), false);
|
|
assert.equal(isPristineWucaiTarget({ ...defaults, pay_user: true }, false), false);
|
|
assert.equal(isPristineWucaiTarget({ ...defaults, pay_user: 1 }, false), false);
|
|
assert.equal(isPristineWucaiTarget({ ...defaults, pay_user: "true" }, false), false);
|
|
assert.equal(isPristineWucaiTarget({ ...defaults, task: JSON.stringify({ levelPass: { value: 1, state: 0 } }) }, false), false);
|
|
assert.equal(isPristineWucaiTarget({ ...defaults, task: JSON.stringify({ levelPass: { value: 0, state: 0 } }) }, false), true);
|
|
assert.equal(isPristineWucaiTarget({ ...defaults, shareLv: JSON.stringify([{ id: "friend", lv: 1 }]) }, false), false);
|
|
assert.equal(isPristineWucaiTarget({ ...defaults, passCheckLv: 1 }, false), false);
|
|
assert.equal(isPristineWucaiTarget({ ...defaults, levelTJ: 1 }, false), false);
|
|
assert.equal(isPristineWucaiTarget(defaults, true), false);
|
|
});
|
|
|
|
test("reward increments the four configured resources", () => {
|
|
assert.deepEqual(addWucaiReward({
|
|
coinAmount: 10,
|
|
freezeAmount: 1,
|
|
hammerAmount: 2,
|
|
magicAmount: 3,
|
|
}), {
|
|
coinAmount: 2010,
|
|
freezeAmount: 4,
|
|
hammerAmount: 5,
|
|
magicAmount: 6,
|
|
});
|
|
});
|