import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
import { McpServer } from '../../mcp-server';
import { ConfigService } from '../../config-service';
const originalEnv = process.env;
describe('起動フローの統合テスト', () => {
let server: McpServer;
beforeEach(() => {
// テストごとに環境変数をクリア
process.env = { ...originalEnv };
server = new McpServer({
name: 'slack-mcp',
version: '1.0.0',
});
});
afterEach(async () => {
if (server) {
await server.closeServer();
}
// 環境変数を元に戻す
process.env = originalEnv;
});
describe('環境変数の読み込みと検証の統合テスト', () => {
it('環境変数が正しく読み込まれ、検証される', async () => {
process.env.SLACK_USER_TOKEN =
'xoxb-test-token-1234567890-1234567890123-AbCdEfGhIjKlMnOpQrStUvWx';
process.env.SLACK_TEAM_ID = 'T1234567890';
process.env.SLACK_CHANNEL_IDS = 'C1234567890,C0987654321';
await server.startServer();
// サーバーが正常に起動したことを確認
expect(server).toBeDefined();
expect(server.server).toBeDefined();
});
it('SLACK_USER_TOKEN が未設定の場合、起動を中止する', async () => {
delete process.env.SLACK_USER_TOKEN;
await expect(server.startServer()).rejects.toThrow();
});
it('SLACK_CHANNEL_IDS がカンマ区切りで正しく読み込まれる', async () => {
process.env.SLACK_USER_TOKEN =
'xoxb-test-token-1234567890-1234567890123-AbCdEfGhIjKlMnOpQrStUvWx';
process.env.SLACK_CHANNEL_IDS = 'C1234567890,C0987654321';
const config = ConfigService.loadConfig();
expect(config.slackChannelIds).toEqual(['C1234567890', 'C0987654321']);
});
});
describe('Slack API Client の初期化の統合テスト', () => {
it('有効なトークンで Slack API Client が初期化される', async () => {
process.env.SLACK_USER_TOKEN =
'xoxb-test-token-1234567890-1234567890123-AbCdEfGhIjKlMnOpQrStUvWx';
await server.startServer();
// サーバーが正常に起動したことを確認
expect(server).toBeDefined();
});
it('無効なトークン形式の場合、起動を中止する', async () => {
process.env.SLACK_USER_TOKEN = 'invalid-token';
await expect(server.startServer()).rejects.toThrow();
});
});
describe('起動時のエラーハンドリングのテスト', () => {
it('環境変数未設定時に適切なエラーメッセージを返す', async () => {
delete process.env.SLACK_USER_TOKEN;
await expect(server.startServer()).rejects.toThrow(/SLACK_USER_TOKEN/);
});
it('Slack API Client 初期化失敗時に適切なエラーメッセージを返す', async () => {
process.env.SLACK_USER_TOKEN = 'invalid-token';
await expect(server.startServer()).rejects.toThrow(/Slack API/);
});
});
});