feat: add S3 bucket versioning support and related XML response handling refactor: rename temporary file paths from 'teleuploader' to 'filedrop' for consistency fix: update Swagger documentation to reflect new API name and descriptions test: add unit tests for authentication routes and utilities test: implement end-to-end tests for S3 bucket configuration and versioning chore: update environment variable defaults for new service name
91 lines
2.3 KiB
TypeScript
91 lines
2.3 KiB
TypeScript
import { afterAll, beforeEach, describe, expect, it, mock } from 'bun:test';
|
|
|
|
type ServeOptions = {
|
|
port?: number;
|
|
routes?: Record<string, unknown>;
|
|
};
|
|
|
|
type MockServer = {
|
|
port?: number;
|
|
routes?: Record<string, unknown>;
|
|
stop: ReturnType<typeof mock>;
|
|
};
|
|
|
|
const mockServe = mock((options: ServeOptions): MockServer => {
|
|
return {
|
|
port: options.port,
|
|
routes: options.routes,
|
|
stop: mock(),
|
|
};
|
|
});
|
|
|
|
const originalServe = Bun.serve;
|
|
Bun.serve = mockServe as unknown as typeof Bun.serve;
|
|
|
|
const mockStartBot = mock(() =>
|
|
Promise.resolve({
|
|
stop: mock(),
|
|
}),
|
|
);
|
|
|
|
mock.module('../src/bot', () => ({
|
|
startBot: mockStartBot,
|
|
}));
|
|
|
|
mock.module('../src/routes/upload', () => ({
|
|
handleUpload: mock(),
|
|
}));
|
|
|
|
mock.module('../src/routes/files', () => ({
|
|
handleFileRedirect: mock(),
|
|
handleFileInfo: mock(),
|
|
}));
|
|
|
|
mock.module('../src/routes/health', () => ({
|
|
handleHealth: mock(),
|
|
}));
|
|
|
|
mock.module('../src/routes/auth', () => ({
|
|
handleLogin: mock(),
|
|
handleLogout: mock(),
|
|
handleMe: mock(),
|
|
}));
|
|
|
|
mock.module('../src/utils/rateLimit', () => ({
|
|
cleanupRateLimitCache: mock(),
|
|
withRateLimit: <T extends Request>(
|
|
handler: (req: T) => Promise<Response>,
|
|
): ((req: T) => Promise<Response>) => handler,
|
|
}));
|
|
|
|
describe('Bootstrap Server', () => {
|
|
beforeEach(() => {
|
|
mockServe.mockClear();
|
|
mockStartBot.mockClear();
|
|
});
|
|
|
|
afterAll(() => {
|
|
Bun.serve = originalServe;
|
|
});
|
|
|
|
it('should bootstrap the application successfully', async () => {
|
|
await import('../src/index');
|
|
|
|
expect(mockServe).toHaveBeenCalled();
|
|
expect(mockStartBot).toHaveBeenCalled();
|
|
|
|
const serveCallArgs = mockServe.mock.calls[0][0];
|
|
expect(serveCallArgs).toHaveProperty('port');
|
|
expect(serveCallArgs).toHaveProperty('routes');
|
|
expect(serveCallArgs.routes).toBeDefined();
|
|
expect(serveCallArgs.routes).toHaveProperty('/api/upload');
|
|
expect(serveCallArgs.routes).toHaveProperty('/f/:public_id');
|
|
expect(serveCallArgs.routes).toHaveProperty('/file/:public_id/info');
|
|
expect(serveCallArgs.routes).toHaveProperty('/health');
|
|
expect(serveCallArgs.routes).toHaveProperty('/api/v1/auth/login');
|
|
expect(serveCallArgs.routes).toHaveProperty('/api/v1/auth/logout');
|
|
expect(serveCallArgs.routes).toHaveProperty('/api/v1/auth/me');
|
|
expect(serveCallArgs.routes).toHaveProperty('/api/v1/*');
|
|
});
|
|
});
|