import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
import { McpServer } from '../../mcp-server';
import { SearchService } from '../../search-service';
import { SlackAPIClient } from '../../slack-api-client';
import { LoggingService } from '../../logging-service';
const originalEnv = process.env;
describe('エラーハンドリングのテスト', () => {
let server: McpServer;
let slackClient: SlackAPIClient;
let searchService: SearchService;
let loggingService: LoggingService;
beforeEach(() => {
// テストごとに環境変数をクリア
process.env = { ...originalEnv };
loggingService = new LoggingService();
slackClient = new SlackAPIClient(loggingService);
searchService = new SearchService(slackClient, loggingService);
server = new McpServer({
name: 'slack-mcp',
version: '1.0.0',
});
});
afterEach(async () => {
if (server) {
await server.closeServer();
}
// 環境変数を元に戻す
process.env = originalEnv;
});
describe('起動時エラーのテスト', () => {
it('環境変数未設定時に適切なエラーを throw する', async () => {
delete process.env.SLACK_USER_TOKEN;
await expect(server.startServer()).rejects.toThrow(/SLACK_USER_TOKEN/);
});
it('Slack API 接続失敗時に適切なエラーを throw する', async () => {
process.env.SLACK_USER_TOKEN = 'invalid-token';
await expect(server.startServer()).rejects.toThrow();
});
});
describe('リクエスト時エラーのテスト', () => {
beforeEach(() => {
process.env.SLACK_USER_TOKEN =
'xoxb-test-token-1234567890-1234567890123-AbCdEfGhIjKlMnOpQrStUvWx';
slackClient.initializeClient(process.env.SLACK_USER_TOKEN);
});
it('無効なリクエスト(空のクエリ)でエラーを throw する', async () => {
await expect(searchService.searchMessages({ query: '' })).rejects.toThrow();
});
it('認証エラーが適切に処理される', async () => {
// 認証エラーの処理を確認
// 実際の認証エラーは統合テストで行う
expect(searchService).toBeDefined();
});
});
describe('レート制限エラー時のリトライロジックのテスト', () => {
beforeEach(() => {
process.env.SLACK_USER_TOKEN =
'xoxb-test-token-1234567890-1234567890123-AbCdEfGhIjKlMnOpQrStUvWx';
slackClient.initializeClient(process.env.SLACK_USER_TOKEN);
});
it('レート制限エラー時にリトライロジックが実行される', async () => {
// レート制限エラーのリトライロジックを確認
// 実際のレート制限エラーは統合テストで行う
expect(slackClient).toBeDefined();
});
});
describe('無効なチャンネルIDの処理のテスト', () => {
beforeEach(() => {
process.env.SLACK_USER_TOKEN =
'xoxb-test-token-1234567890-1234567890123-AbCdEfGhIjKlMnOpQrStUvWx';
slackClient.initializeClient(process.env.SLACK_USER_TOKEN);
});
it('無効なチャンネルIDでエラーを throw する', async () => {
await expect(
searchService.searchMessages({
query: 'test',
channelIds: [''],
})
).rejects.toThrow();
});
});
});