Skip to main content
Glama

Discogs MCP Server

by cswkim
label.test.ts6.07 kB
// Mock imports need to go before all other imports import '../mocks/discogsService'; import { beforeEach, describe, expect, it } from 'vitest'; import { LabelService } from '../../src/services/label'; import type { Label, LabelReleases } from '../../src/types/label'; // Mock label data const mockLabel: Label = { id: 123, name: 'Test Label', resource_url: 'https://discogs.test/label/123', contact_info: 'test@example.com', profile: 'Test label profile', urls: ['https://example.com/label'], images: [ { height: 1000, width: 1000, resource_url: 'https://example.com/label.jpg', type: 'primary', uri: 'https://example.com/label.jpg', uri150: 'https://example.com/label-150.jpg', }, ], parent_label: { id: 456, name: 'Parent Label', resource_url: 'https://api.discogs.com/labels/456', }, sublabels: [ { id: 789, name: 'Sub Label', resource_url: 'https://api.discogs.com/labels/789', }, ], uri: 'https://www.discogs.com/label/123', releases_url: 'https://api.discogs.com/labels/123/releases', data_quality: 'Correct', }; // Mock label releases data const mockReleases: LabelReleases = { pagination: { page: 1, pages: 1, per_page: 50, items: 1, urls: { first: 'https://api.discogs.com/labels/123/releases?page=1', last: 'https://api.discogs.com/labels/123/releases?page=1', }, }, releases: [ { id: 456, title: 'Test Release', year: 2020, artist: 'Test Artist', resource_url: 'https://api.discogs.com/releases/456', thumb: 'https://example.com/thumb.jpg', format: 'Vinyl', label: 'Test Label', catno: 'TEST-001', status: 'Accepted', type: 'release', role: 'Main', stats: { community: { in_collection: 42, in_wantlist: 10, }, user: { in_collection: 1, in_wantlist: 0, }, }, }, ], }; describe('LabelService', () => { let service: LabelService; beforeEach(() => { service = new LabelService(); }); describe('get', () => { it('should return a validated label object', async () => { (service as any).request.mockResolvedValueOnce(mockLabel); const result = await service.get({ label_id: 123 }); expect(result).toEqual(mockLabel); expect(service['request']).toHaveBeenCalledWith('/123'); }); it('should handle Discogs resource not found errors properly', async () => { const discogsError = new Error('Discogs API Error'); discogsError.name = 'DiscogsResourceNotFoundError'; (service as any).request.mockRejectedValueOnce(discogsError); await expect(service.get({ label_id: 999 })).rejects.toThrow('DiscogsResourceNotFoundError'); }); it('should handle validation errors properly', async () => { const invalidLabel = { ...mockLabel, id: 'not-a-number' }; (service as any).request.mockResolvedValueOnce(invalidLabel); await expect(service.get({ label_id: 999 })).rejects.toThrow(); }); it('should handle network errors properly', async () => { const networkError = new Error('Network Error'); (service as any).request.mockRejectedValueOnce(networkError); await expect(service.get({ label_id: 999 })).rejects.toThrow('Failed to get label:'); }); }); describe('getReleases', () => { it('should return a validated label releases object with default parameters', async () => { (service as any).request.mockResolvedValueOnce(mockReleases); const result = await service.getReleases({ label_id: 123, per_page: 50, }); expect(result).toEqual(mockReleases); expect(service['request']).toHaveBeenCalledWith('/123/releases', { params: { per_page: 50 }, }); }); it('should handle pagination parameters correctly', async () => { (service as any).request.mockResolvedValueOnce(mockReleases); const result = await service.getReleases({ label_id: 123, page: 2, per_page: 20, }); expect(result).toEqual(mockReleases); expect(service['request']).toHaveBeenCalledWith('/123/releases', { params: { page: 2, per_page: 20 }, }); }); it('should handle sorting parameters correctly', async () => { (service as any).request.mockResolvedValueOnce(mockReleases); const result = await service.getReleases({ label_id: 123, per_page: 50, sort: 'year', sort_order: 'desc', }); expect(result).toEqual(mockReleases); expect(service['request']).toHaveBeenCalledWith('/123/releases', { params: { per_page: 50, sort: 'year', sort_order: 'desc' }, }); }); it('should handle Discogs resource not found errors properly', async () => { const discogsError = new Error('Discogs API Error'); discogsError.name = 'DiscogsResourceNotFoundError'; (service as any).request.mockRejectedValueOnce(discogsError); await expect( service.getReleases({ label_id: 999, per_page: 50, }), ).rejects.toThrow('DiscogsResourceNotFoundError'); }); it('should handle validation errors properly', async () => { const invalidReleases = { pagination: { page: 1, pages: 1, items: 1 }, releases: [{ id: 'not-a-number', title: 'Test Release' }], }; (service as any).request.mockResolvedValueOnce(invalidReleases); await expect( service.getReleases({ label_id: 999, per_page: 50, }), ).rejects.toThrow(); }); it('should handle network errors properly', async () => { const networkError = new Error('Network Error'); (service as any).request.mockRejectedValueOnce(networkError); await expect( service.getReleases({ label_id: 999, per_page: 50, }), ).rejects.toThrow('Failed to get label releases:'); }); }); });

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/cswkim/discogs-mcp-server'

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