import { describe, it, expect, vi, beforeEach } from 'vitest';
import { createEventsResource } from '../events.js';
import type { MySQLAdapter } from '../../MySQLAdapter.js';
import { createMockMySQLAdapter, createMockRequestContext, createMockQueryResult } from '../../../../__tests__/mocks/index.js';
describe('createEventsResource', () => {
let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
let mockContext: ReturnType<typeof createMockRequestContext>;
let resource: ReturnType<typeof createEventsResource>;
beforeEach(() => {
vi.clearAllMocks();
mockAdapter = createMockMySQLAdapter();
mockContext = createMockRequestContext();
resource = createEventsResource(mockAdapter as unknown as MySQLAdapter);
});
it('should return scheduler enabled when variable is ON', async () => {
// Mock scheduler variable
mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
{ Variable_name: 'event_scheduler', Value: 'ON' }
]));
// Mock events list
mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
{ schema_name: 'test', name: 'event1', status: 'ENABLED' }
]));
const result = await resource.handler(resource.uri, mockContext);
expect(result).toEqual({
schedulerEnabled: true,
schedulerStatus: 'ON',
eventCount: 1,
events: [{ schema_name: 'test', name: 'event1', status: 'ENABLED' }]
});
});
it('should return scheduler disabled when variable is OFF', async () => {
// Mock scheduler variable
mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
{ Variable_name: 'event_scheduler', Value: 'OFF' }
]));
// Mock events list
mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([]));
const result = await resource.handler(resource.uri, mockContext);
expect(result).toEqual({
schedulerEnabled: false,
schedulerStatus: 'OFF',
eventCount: 0,
events: []
});
});
it('should handle missing variable execution gracefully (default OFF)', async () => {
// Mock scheduler variable empty result
mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([]));
// Mock events list
mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([]));
const result = await resource.handler(resource.uri, mockContext);
expect(result).toEqual({
schedulerEnabled: false,
schedulerStatus: 'OFF',
eventCount: 0,
events: []
});
});
it('should propagate errors since no try/catch in handler', async () => {
mockAdapter.executeQuery.mockRejectedValue(new Error('DB Error'));
await expect(resource.handler(resource.uri, mockContext)).rejects.toThrow('DB Error');
});
it('should handle undefined rows gracefully', async () => {
// Mock scheduler variable with undefined rows
mockAdapter.executeQuery.mockResolvedValueOnce({ rows: undefined } as any);
// Mock events list with undefined rows
mockAdapter.executeQuery.mockResolvedValueOnce({ rows: undefined } as any);
const result = await resource.handler(resource.uri, mockContext);
expect(result).toEqual({
schedulerEnabled: false,
schedulerStatus: 'OFF',
eventCount: 0,
events: []
});
});
});