Skip to main content
Glama

tv-recommender-mcp-server

watchProviders.test.ts4.41 kB
import { getWatchProviders } from '../../tools/watchProviders'; import { tmdbClient } from '../../services/tmdbClient'; // 模拟tmdbClient jest.mock('../../services/tmdbClient', () => ({ tmdbClient: { searchTvShowByTitle: jest.fn(), getTvShowWatchProviders: jest.fn() } })); describe('getWatchProviders', () => { beforeEach(() => { jest.clearAllMocks(); }); it('应当返回格式化的观看渠道信息', async () => { // 模拟搜索结果 const mockSearchResults = { results: [ { id: 1396, name: '绝命毒师' } ] }; // 模拟观看渠道数据 const mockWatchProvidersData = { id: 1396, results: { link: 'https://www.themoviedb.org/tv/1396-breaking-bad/watch?locale=US', flatrate: [ { provider_id: 8, provider_name: 'Netflix', logo_path: '/logo1.jpg' } ], rent: [ { provider_id: 2, provider_name: 'Apple TV', logo_path: '/logo2.jpg' } ], buy: [ { provider_id: 3, provider_name: 'Amazon Prime Video', logo_path: '/logo3.jpg' } ] } }; // 设置模拟函数返回值 (tmdbClient.searchTvShowByTitle as jest.Mock).mockResolvedValue(mockSearchResults); (tmdbClient.getTvShowWatchProviders as jest.Mock).mockResolvedValue(mockWatchProvidersData); // 执行测试 const result = await getWatchProviders({ show_title: '绝命毒师' }); // 验证结果 expect(tmdbClient.searchTvShowByTitle).toHaveBeenCalledWith('绝命毒师'); expect(tmdbClient.getTvShowWatchProviders).toHaveBeenCalledWith(1396, 'US'); expect(result).toEqual({ country: 'US', link: 'https://www.themoviedb.org/tv/1396-breaking-bad/watch?locale=US', streaming: [ { provider_id: 8, provider_name: 'Netflix', logo_path: '/logo1.jpg' } ], rent: [ { provider_id: 2, provider_name: 'Apple TV', logo_path: '/logo2.jpg' } ], buy: [ { provider_id: 3, provider_name: 'Amazon Prime Video', logo_path: '/logo3.jpg' } ] }); }); it('应当使用自定义国家/地区代码', async () => { // 模拟搜索结果 const mockSearchResults = { results: [ { id: 1396, name: '绝命毒师' } ] }; // 模拟观看渠道数据 (针对中国) const mockWatchProvidersData = { id: 1396, results: { link: 'https://www.themoviedb.org/tv/1396-breaking-bad/watch?locale=CN', flatrate: [ { provider_id: 100, provider_name: '爱奇艺', logo_path: '/logo-iqiyi.jpg' } ], rent: [], buy: [] } }; // 设置模拟函数返回值 (tmdbClient.searchTvShowByTitle as jest.Mock).mockResolvedValue(mockSearchResults); (tmdbClient.getTvShowWatchProviders as jest.Mock).mockResolvedValue(mockWatchProvidersData); // 执行测试 const result = await getWatchProviders({ show_title: '绝命毒师', country_code: 'CN' }); // 验证结果 expect(tmdbClient.getTvShowWatchProviders).toHaveBeenCalledWith(1396, 'CN'); expect(result.country).toBe('CN'); expect(result.streaming).toHaveLength(1); expect(result.streaming[0].provider_name).toBe('爱奇艺'); }); it('应当处理未找到剧集的情况', async () => { // 模拟空搜索结果 (tmdbClient.searchTvShowByTitle as jest.Mock).mockResolvedValue({ results: [] }); // 执行测试并验证抛出的错误 await expect(getWatchProviders({ show_title: '不存在的剧集' })) .rejects .toThrow('未找到名为"不存在的剧集"的剧集'); }); it('应当处理没有观看渠道信息的情况', async () => { // 模拟搜索结果 const mockSearchResults = { results: [ { id: 9999, name: '冷门剧集' } ] }; // 模拟空的观看渠道数据 const mockEmptyWatchProvidersData = { id: 9999, results: {} }; // 设置模拟函数返回值 (tmdbClient.searchTvShowByTitle as jest.Mock).mockResolvedValue(mockSearchResults); (tmdbClient.getTvShowWatchProviders as jest.Mock).mockResolvedValue(mockEmptyWatchProvidersData); // 执行测试 const result = await getWatchProviders({ show_title: '冷门剧集' }); // 验证结果 expect(result).toEqual({ country: 'US', streaming: [], rent: [], buy: [] }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/terryso/tv-recommender-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server