const request = require('supertest'); const app = require('../../app'); const { User } = require('../../models'); const { createTestUser } = require('../helpers/testUtils'); describe('Telegram Routes', () => { let user, agent; beforeEach(async () => { user = await createTestUser({ email: 'test@example.com', }); // Create authenticated agent agent = request.agent(app); await agent.post('/api/login').send({ email: 'test@example.com', password: 'password123', }); }); describe('POST /api/telegram/setup', () => { it('should setup telegram bot token', async () => { const botToken = '123456789:ABCdefGHIjklMNOPQRSTUVwxyz-12345678'; const response = await agent .post('/api/telegram/setup') .send({ token: botToken }); expect(response.status).toBe(200); expect(response.body.message).toBe( 'Telegram bot token updated successfully' ); // Verify token was saved to user const updatedUser = await User.findByPk(user.id); expect(updatedUser.telegram_bot_token).toBe(botToken); }); it('should require authentication', async () => { const response = await request(app) .post('/api/telegram/setup') .send({ token: '123456789:ABCdefGHIjklMNOPQRSTUVwxyz-1234567890', }); expect(response.status).toBe(401); expect(response.body.error).toBe('Authentication required'); }); it('should require token parameter', async () => { const response = await agent.post('/api/telegram/setup').send({}); expect(response.status).toBe(400); expect(response.body.error).toBe('Telegram bot token is required.'); }); it('should validate token format', async () => { const response = await agent .post('/api/telegram/setup') .send({ token: 'invalid-token-format' }); expect(response.status).toBe(400); expect(response.body.error).toBe( 'Invalid Telegram bot token format.' ); }); it('should validate token format with correct pattern', async () => { // Test various invalid formats const invalidTokens = [ '123456:short', 'notnum:ABCdefGHIjklMNOPQRSTUVwxyz-12345678', '123456789-ABCdefGHIjklMNOPQRSTUVwxyz-12345678', '123456789:', ':ABCdefGHIjklMNOPQRSTUVwxyz-12345678', ]; for (const token of invalidTokens) { const response = await agent .post('/api/telegram/setup') .send({ token }); expect(response.status).toBe(400); expect(response.body.error).toBe( 'Invalid Telegram bot token format.' ); } }); it('should accept valid token formats', async () => { const validTokens = [ '123456789:ABCdefGHIjklMNOPQRSTUVwxyz-12345678', '987654321:XYZabcDEFghiJKLmnoPQRstUVW_09876543', '555555555:abcdefghijklmnopqrstuvwxyzABCDEFGHI', ]; for (const token of validTokens) { const response = await agent .post('/api/telegram/setup') .send({ token }); expect(response.status).toBe(200); expect(response.body.message).toBe( 'Telegram bot token updated successfully' ); } }); }); describe('POST /api/telegram/start-polling', () => { beforeEach(async () => { // Setup bot token first await user.update({ telegram_bot_token: '123456789:ABCdefGHIjklMNOPQRSTUVwxyz-12345678', }); }); it('should require authentication', async () => { const response = await request(app).post( '/api/telegram/start-polling' ); expect(response.status).toBe(401); expect(response.body.error).toBe('Authentication required'); }); it('should require bot token to be configured', async () => { // Remove bot token await user.update({ telegram_bot_token: null }); const response = await agent.post('/api/telegram/start-polling'); expect(response.status).toBe(400); expect(response.body.error).toBe('Telegram bot token not set.'); }); }); describe('POST /api/telegram/stop-polling', () => { it('should require authentication', async () => { const response = await request(app).post( '/api/telegram/stop-polling' ); expect(response.status).toBe(401); expect(response.body.error).toBe('Authentication required'); }); }); describe('GET /api/telegram/polling-status', () => { it('should require authentication', async () => { const response = await request(app).get( '/api/telegram/polling-status' ); expect(response.status).toBe(401); expect(response.body.error).toBe('Authentication required'); }); }); });