47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
|
|
import { storage } from "../server/storage";
|
|
import { insertUserSchema } from "../shared/schema";
|
|
|
|
async function runTest() {
|
|
console.log("Starting Gamification Logic Test...");
|
|
|
|
// 1. Setup Test User
|
|
const timestamp = Date.now();
|
|
const username = `gamer_${timestamp}`;
|
|
const password = "password123";
|
|
const email = `gamer_${timestamp}@example.com`;
|
|
|
|
console.log(`Creating user: ${username}`);
|
|
const user = await storage.createUser({
|
|
username,
|
|
email,
|
|
password, // Note: In real app this wants hashed, but we are bypassing auth middleware for direct storage tests?
|
|
// API tests need real auth.
|
|
// Let's rely on Direct Storage + Logic Verification since pure API test is complex with auth cookies in a simple script.
|
|
role: 'user',
|
|
isActive: true
|
|
});
|
|
|
|
// We need to simulate the API logic because the logic resides in the Route handler (routes.ts), not just storage.
|
|
// This is tricky without a full HTTP client.
|
|
|
|
// ALTERNATIVE: We can define a helper to mock Request/Response and call the route handler?
|
|
// Too complex.
|
|
|
|
// Let's use fetch against the running server.
|
|
const baseUrl = "http://localhost:5001";
|
|
|
|
// Login to get cookie
|
|
console.log("Logging in via API...");
|
|
const loginRes = await fetch(`${baseUrl}/api/login`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ username, password })
|
|
});
|
|
|
|
// Wait, storage.createUser doesn't hash password! API login will fail if I stored plain text?
|
|
// Yes. Routes.ts: setupAuth uses comparePassword(password, user.password).
|
|
// So I must hash the password if I insert via storage.
|
|
// OR I can register via API.
|
|
}
|