Skip to main content
Glama

Discogs MCP Server

by cswkim
inventory.test.ts4.13 kB
// Mock imports need to go before all other imports import '../../mocks/discogsService'; import { beforeEach, describe, expect, it } from 'vitest'; import { UserInventoryService } from '../../../src/services/user/inventory'; import type { UserInventoryResponse } from '../../../src/types/user'; // Mock inventory response const mockInventoryResponse: UserInventoryResponse = { pagination: { page: 1, per_page: 50, pages: 2, items: 75, urls: { first: 'https://api.discogs.com/users/testuser/inventory?page=1', next: 'https://api.discogs.com/users/testuser/inventory?page=2', last: 'https://api.discogs.com/users/testuser/inventory?page=2', }, }, listings: [ { id: 123, status: 'For Sale', condition: 'Mint (M)', price: { value: 29.99, currency: 'USD', }, allow_offers: true, sleeve_condition: 'Near Mint (NM or M-)', comments: 'Test listing', audio: true, resource_url: 'https://api.discogs.com/marketplace/listings/123', uri: 'https://www.discogs.com/sell/item/123', ships_from: 'US', posted: '2024-01-01T00:00:00Z', original_price: { value: 29.99, curr_abbr: 'USD', }, seller: { id: 789, username: 'testuser', stats: { rating: '4.5', stars: 4.5, total: 100, }, min_order_total: 0, html_url: 'https://www.discogs.com/user/testuser', uid: 789, url: 'https://api.discogs.com/users/testuser', payment: 'PayPal', shipping: 'Worldwide', resource_url: 'https://api.discogs.com/users/testuser', avatar_url: 'https://api.discogs.com/images/u-789-1.jpg', }, release: { id: 456, description: 'Test Release', resource_url: 'https://api.discogs.com/releases/456', stats: { community: { in_wantlist: 10, in_collection: 20, }, }, year: 2020, artist: 'Test Artist', title: 'Test Title', format: 'Vinyl, LP', thumbnail: 'https://api.discogs.com/images/R-456-1.jpg', }, }, ], }; describe('UserInventoryService', () => { let service: UserInventoryService; beforeEach(() => { service = new UserInventoryService(); }); describe('get', () => { it('should return a validated inventory response', async () => { (service as any).request.mockResolvedValueOnce(mockInventoryResponse); const result = await service.get({ username: 'testuser' }); expect(result).toEqual(mockInventoryResponse); expect(service['request']).toHaveBeenCalledWith('/testuser/inventory', { params: {}, }); }); it('should pass query parameters to the API', async () => { (service as any).request.mockResolvedValueOnce(mockInventoryResponse); const params = { username: 'testuser', page: 2, per_page: 25, status: 'Draft' as const, sort: 'price', sort_order: 'desc' as const, }; await service.get(params); expect(service['request']).toHaveBeenCalledWith('/testuser/inventory', { params: { page: 2, per_page: 25, status: 'Draft', sort: 'price', 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.get({ username: 'nonexistent' })).rejects.toThrow( 'DiscogsResourceNotFoundError', ); }); it('should handle validation errors properly', async () => { const invalidResponse = { ...mockInventoryResponse, listings: [{ id: 'not-a-number' }] }; (service as any).request.mockResolvedValueOnce(invalidResponse); await expect(service.get({ username: 'testuser' })).rejects.toThrow(); }); }); });

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