fix: auth scheduler env vars, concurrency and browser stability
This commit is contained in:
@@ -2,13 +2,18 @@ import { getSchedulerStatus, startScheduler, stopScheduler } from '$lib/server/s
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
// Mock environment variables
|
||||
const setEnv = (key: string, value: string | undefined) => {
|
||||
if (value === undefined) {
|
||||
delete process.env[key];
|
||||
} else {
|
||||
process.env[key] = value;
|
||||
}
|
||||
};
|
||||
const { mockEnv } = vi.hoisted(() => {
|
||||
return {
|
||||
mockEnv: {
|
||||
AUTH_SCHEDULER_ENABLED: 'false',
|
||||
AUTH_SCHEDULER_INTERVAL_MINUTES: '720'
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
vi.mock('$env/dynamic/private', () => ({
|
||||
env: mockEnv
|
||||
}));
|
||||
|
||||
// Mock the browser module
|
||||
vi.mock('$lib/server/browser', () => ({
|
||||
@@ -28,8 +33,8 @@ const mockFs = {
|
||||
describe('Scheduler Service', () => {
|
||||
beforeEach(() => {
|
||||
// Reset environment variables
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', undefined);
|
||||
setEnv('AUTH_SCHEDULER_INTERVAL_HOURS', undefined);
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'false';
|
||||
mockEnv.AUTH_SCHEDULER_INTERVAL_MINUTES = '720';
|
||||
|
||||
// Clear all mocks
|
||||
vi.clearAllMocks();
|
||||
@@ -48,24 +53,24 @@ describe('Scheduler Service', () => {
|
||||
});
|
||||
|
||||
describe('Configuration', () => {
|
||||
it('should use default interval when AUTH_SCHEDULER_INTERVAL_HOURS is not set', async () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'true');
|
||||
setEnv('AUTH_SCHEDULER_INTERVAL_HOURS', undefined);
|
||||
it('should use default interval when AUTH_SCHEDULER_INTERVAL_MINUTES is not set', async () => {
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'true';
|
||||
mockEnv.AUTH_SCHEDULER_INTERVAL_MINUTES = '';
|
||||
|
||||
const status = getSchedulerStatus();
|
||||
expect(status.config.intervalHours).toBe(12);
|
||||
expect(status.config.intervalMinutes).toBe(720);
|
||||
});
|
||||
|
||||
it('should parse custom interval hours from environment', async () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'true');
|
||||
setEnv('AUTH_SCHEDULER_INTERVAL_HOURS', '6');
|
||||
it('should parse custom interval minutes from environment', async () => {
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'true';
|
||||
mockEnv.AUTH_SCHEDULER_INTERVAL_MINUTES = '30';
|
||||
|
||||
const status = getSchedulerStatus();
|
||||
expect(status.config.intervalHours).toBe(6);
|
||||
expect(status.config.intervalMinutes).toBe(30);
|
||||
});
|
||||
|
||||
it('should disable scheduler when AUTH_SCHEDULER_ENABLED is not true', async () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'false');
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'false';
|
||||
|
||||
const status = getSchedulerStatus();
|
||||
expect(status.config.enabled).toBe(false);
|
||||
@@ -73,7 +78,7 @@ describe('Scheduler Service', () => {
|
||||
});
|
||||
|
||||
it('should parse AUTH_SCHEDULER_ENABLED as true when set to "true"', async () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'true');
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'true';
|
||||
|
||||
const status = getSchedulerStatus();
|
||||
expect(status.config.enabled).toBe(true);
|
||||
@@ -82,7 +87,7 @@ describe('Scheduler Service', () => {
|
||||
|
||||
describe('Scheduler Lifecycle', () => {
|
||||
it('should not start when disabled', async () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'false');
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'false';
|
||||
|
||||
await startScheduler();
|
||||
|
||||
@@ -91,7 +96,7 @@ describe('Scheduler Service', () => {
|
||||
});
|
||||
|
||||
it('should start when enabled', async () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'true');
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'true';
|
||||
mockFs.existsSync.mockReturnValue(true);
|
||||
|
||||
await startScheduler();
|
||||
@@ -101,7 +106,7 @@ describe('Scheduler Service', () => {
|
||||
});
|
||||
|
||||
it('should not start twice', async () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'true');
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'true';
|
||||
mockFs.existsSync.mockReturnValue(true);
|
||||
|
||||
await startScheduler();
|
||||
@@ -113,7 +118,7 @@ describe('Scheduler Service', () => {
|
||||
});
|
||||
|
||||
it('should stop the scheduler', async () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'true');
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'true';
|
||||
mockFs.existsSync.mockReturnValue(true);
|
||||
|
||||
await startScheduler();
|
||||
@@ -132,7 +137,7 @@ describe('Scheduler Service', () => {
|
||||
|
||||
describe('Status Reporting', () => {
|
||||
it('should return scheduler status with default values', () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'false');
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'false';
|
||||
|
||||
const status = getSchedulerStatus();
|
||||
|
||||
@@ -142,13 +147,13 @@ describe('Scheduler Service', () => {
|
||||
isRenewing: false,
|
||||
config: {
|
||||
enabled: false,
|
||||
intervalHours: 12
|
||||
intervalMinutes: 720
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should report running state correctly', async () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'true');
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'true';
|
||||
mockFs.existsSync.mockReturnValue(true);
|
||||
|
||||
await startScheduler();
|
||||
@@ -159,13 +164,13 @@ describe('Scheduler Service', () => {
|
||||
});
|
||||
|
||||
it('should track configuration', async () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'true');
|
||||
setEnv('AUTH_SCHEDULER_INTERVAL_HOURS', '24');
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'true';
|
||||
mockEnv.AUTH_SCHEDULER_INTERVAL_MINUTES = '1440';
|
||||
|
||||
const status = getSchedulerStatus();
|
||||
|
||||
expect(status.config.enabled).toBe(true);
|
||||
expect(status.config.intervalHours).toBe(24);
|
||||
expect(status.config.intervalMinutes).toBe(1440);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -187,14 +192,14 @@ describe('Scheduler Service', () => {
|
||||
});
|
||||
|
||||
describe('Environment Variables', () => {
|
||||
it('should handle empty AUTH_SCHEDULER_INTERVAL_HOURS with default', () => {
|
||||
setEnv('AUTH_SCHEDULER_ENABLED', 'true');
|
||||
setEnv('AUTH_SCHEDULER_INTERVAL_HOURS', '');
|
||||
it('should handle empty AUTH_SCHEDULER_INTERVAL_MINUTES with default', () => {
|
||||
mockEnv.AUTH_SCHEDULER_ENABLED = 'true';
|
||||
mockEnv.AUTH_SCHEDULER_INTERVAL_MINUTES = '';
|
||||
|
||||
const status = getSchedulerStatus();
|
||||
// Empty string should fall back to default due to parseInt('', 10) returning NaN
|
||||
// and the || 12 fallback
|
||||
expect(status.config.intervalHours).toBeDefined();
|
||||
// and the || 720 fallback
|
||||
expect(status.config.intervalMinutes).toBeDefined();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user