Files
wownerogue/test/adminRoutes.test.js
T

73 lines
2.2 KiB
JavaScript

/**
* Admin routes extraction smoke test (Phase 4.1).
*
* Verifies the extracted admin route factory loads and registers all expected routes
* with a stub ctx — catches load-time/reference errors from the index.js -> routes/admin.js
* split without needing a live server.
*/
const createAdminRoutes = require('../src/routes/admin');
const createAuthRoutes = require('../src/routes/auth');
function stubCtx() {
return {
db: { query: jest.fn(), getClient: jest.fn() },
gameModeManager: {},
walletRPCService: {},
socketHandlers: {},
io: {},
alertService: null
};
}
describe('admin routes factory', () => {
test('builds a router and registers the expected admin endpoints', () => {
const router = createAdminRoutes(stubCtx());
expect(typeof router).toBe('function'); // express router is a middleware function
const paths = router.stack.filter(l => l.route).map(l => l.route.path);
const expected = [
'/api/admin/refund/payment',
'/api/admin/credits/adjust',
'/api/admin/alerts/test-email',
'/api/admin/queue',
'/api/admin/queue/remove',
'/api/admin/chat',
'/api/admin/chat/:id',
'/api/admin/users/:id/chat-ban',
'/api/admin/users/search',
'/api/admin/stats/overview',
'/api/admin/stats/payouts',
'/api/admin/stats/refunds',
'/api/admin/stats/games',
'/api/admin/users',
'/api/admin/users/:id',
'/api/admin/payouts/:id/retry'
];
for (const p of expected) {
expect(paths).toContain(p);
}
expect(paths.length).toBe(expected.length);
});
});
describe('auth (smirk) routes factory', () => {
test('builds a router and registers the smirk endpoints', () => {
const query = jest.fn();
const router = createAuthRoutes({
db: { query, withTransaction: jest.fn() },
sessionManager: {
generateSecureToken: jest.fn(),
disconnectUserSessions: jest.fn()
}
});
const paths = router.stack.filter(l => l.route).map(l => l.route.path);
expect(paths).toEqual(expect.arrayContaining([
'/api/auth/smirk/challenge',
'/api/auth/smirk/verify',
'/api/auth/smirk/status'
]));
expect(paths.length).toBe(3);
});
});