테스트 코드 - 계정 연장
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
import { config } from "dotenv";
|
||||
|
||||
config({ path: ".env.local" });
|
||||
|
||||
async function main() {
|
||||
const { db } = await import("@/lib/db");
|
||||
const { createExtensionRequest, approveExtensionRequest } = await import(
|
||||
"@/lib/extension-requests"
|
||||
);
|
||||
const { ACTIVATE_STATUSES, ACCOUNT_TYPES, REQUEST_STATUSES } = await import(
|
||||
"@/lib/constants"
|
||||
);
|
||||
|
||||
const scenarios = [
|
||||
{
|
||||
label: "TRIAL status + paid tier (BASIC_20)",
|
||||
accountType: ACCOUNT_TYPES.BASIC_20,
|
||||
},
|
||||
{
|
||||
label: "TRIAL status + trial tier (STUDENT_TRIAL)",
|
||||
accountType: ACCOUNT_TYPES.STUDENT_TRIAL,
|
||||
},
|
||||
];
|
||||
|
||||
let failures = 0;
|
||||
|
||||
for (const scenario of scenarios) {
|
||||
const stamp = Date.now();
|
||||
const testName = `__TEST_TRIAL_EXT_${stamp}__`.slice(0, 50);
|
||||
const initialAvailable = new Date(2000, 0, 1);
|
||||
let maestroID: number | null = null;
|
||||
|
||||
console.log(`\n=== Scenario: ${scenario.label} ===`);
|
||||
|
||||
try {
|
||||
const created = await db.maestro.create({
|
||||
data: {
|
||||
Name: testName,
|
||||
Password: "",
|
||||
Email: `${stamp}@test.invalid`.slice(0, 50),
|
||||
AccountType: scenario.accountType,
|
||||
ActivateStatus: ACTIVATE_STATUSES.TRIAL,
|
||||
AvailableActivateDateTime: initialAvailable,
|
||||
PlayerCount: 0,
|
||||
AcceptClausesDateTime: new Date(),
|
||||
AllowEditEnterCode: 0,
|
||||
},
|
||||
select: { MaestroID: true },
|
||||
});
|
||||
maestroID = created.MaestroID;
|
||||
console.log(` seeded maestro MaestroID=${maestroID}`);
|
||||
|
||||
const requestResult = await createExtensionRequest(maestroID);
|
||||
console.log(
|
||||
` createExtensionRequest → maestroExtensionID=${requestResult.maestroExtensionID}, status=${requestResult.status}`
|
||||
);
|
||||
|
||||
if (requestResult.status !== REQUEST_STATUSES.REQUESTED) {
|
||||
throw new Error(
|
||||
`expected new request status=${REQUEST_STATUSES.REQUESTED}, got ${requestResult.status}`
|
||||
);
|
||||
}
|
||||
|
||||
const approveResult = await approveExtensionRequest(
|
||||
requestResult.maestroExtensionID
|
||||
);
|
||||
console.log(
|
||||
` approveExtensionRequest → availableActivateDateTime=${approveResult.availableActivateDateTime}`
|
||||
);
|
||||
|
||||
const afterApprove = await db.maestro.findUniqueOrThrow({
|
||||
where: { MaestroID: maestroID },
|
||||
select: {
|
||||
ActivateStatus: true,
|
||||
AvailableActivateDateTime: true,
|
||||
AccountType: true,
|
||||
},
|
||||
});
|
||||
const requestRow = await db.maestro_extension.findUniqueOrThrow({
|
||||
where: { MaestroExtensionID: requestResult.maestroExtensionID },
|
||||
select: { Status: true, AccountType: true },
|
||||
});
|
||||
const logRows = await db.maestro_log.findMany({
|
||||
where: { MaestroID: maestroID },
|
||||
select: { Type: true },
|
||||
orderBy: { MaestroLogID: "asc" },
|
||||
});
|
||||
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
const expectedYear = today.getFullYear() + 1;
|
||||
const actualAvailable = afterApprove.AvailableActivateDateTime;
|
||||
const actualYear = actualAvailable.getFullYear();
|
||||
|
||||
const checks: Array<[string, boolean, string]> = [
|
||||
[
|
||||
"maestro.ActivateStatus becomes ACTIVE",
|
||||
afterApprove.ActivateStatus === ACTIVATE_STATUSES.ACTIVE,
|
||||
`got ${afterApprove.ActivateStatus}`,
|
||||
],
|
||||
[
|
||||
"maestro.AccountType preserved",
|
||||
afterApprove.AccountType === scenario.accountType,
|
||||
`got ${afterApprove.AccountType}`,
|
||||
],
|
||||
[
|
||||
"AvailableActivateDateTime = today +1 year (initial was in the past)",
|
||||
actualYear === expectedYear,
|
||||
`got year=${actualYear}, expected ${expectedYear}`,
|
||||
],
|
||||
[
|
||||
"extension request Status becomes APPLIED",
|
||||
requestRow.Status === REQUEST_STATUSES.APPLIED,
|
||||
`got ${requestRow.Status}`,
|
||||
],
|
||||
[
|
||||
"logs include request_extension_maestro",
|
||||
logRows.some((l) => l.Type === "request_extension_maestro"),
|
||||
JSON.stringify(logRows.map((l) => l.Type)),
|
||||
],
|
||||
[
|
||||
"logs include extension_maestro",
|
||||
logRows.some((l) => l.Type === "extension_maestro"),
|
||||
JSON.stringify(logRows.map((l) => l.Type)),
|
||||
],
|
||||
];
|
||||
|
||||
for (const [name, passed, detail] of checks) {
|
||||
console.log(` ${passed ? "PASS" : "FAIL"} ${name} (${detail})`);
|
||||
if (!passed) failures += 1;
|
||||
}
|
||||
} catch (error) {
|
||||
failures += 1;
|
||||
console.error(` ERROR:`, error);
|
||||
} finally {
|
||||
if (maestroID !== null) {
|
||||
await db.maestro_extension.deleteMany({ where: { MaestroID: maestroID } });
|
||||
await db.maestro_log.deleteMany({ where: { MaestroID: maestroID } });
|
||||
await db.maestro.delete({ where: { MaestroID: maestroID } });
|
||||
console.log(` cleanup: removed rows for MaestroID=${maestroID}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await db.$disconnect();
|
||||
|
||||
if (failures > 0) {
|
||||
console.error(`\n${failures} check(s) failed.`);
|
||||
process.exitCode = 1;
|
||||
} else {
|
||||
console.log(`\nAll checks passed.`);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
console.error("Test run failed");
|
||||
console.error(error);
|
||||
process.exitCode = 1;
|
||||
});
|
||||
Reference in New Issue
Block a user