Skip to main content
Glama

mcptix

by ownlytics
queries.test.ts6.71 kB
import fs from 'fs'; import path from 'path'; import { Ticket } from '../types'; import { TicketQueries } from './queries'; import { initializeDatabase, closeDatabase } from './schema'; describe('TicketQueries', () => { const testDbPath = path.join(process.cwd(), 'test-queries.db'); let db: any; let ticketQueries: TicketQueries; // Set up test database before each test beforeEach(() => { if (fs.existsSync(testDbPath)) { fs.unlinkSync(testDbPath); } db = initializeDatabase(testDbPath); ticketQueries = new TicketQueries(db); }); // Clean up test database after each test afterEach(() => { closeDatabase(db); if (fs.existsSync(testDbPath)) { fs.unlinkSync(testDbPath); } }); test('should create and retrieve a ticket', () => { // Create a ticket const ticket: Ticket = { id: 'test-ticket', title: 'Test Ticket', description: 'This is a test ticket', priority: 'medium', status: 'backlog', created: '2023-01-01T00:00:00.000Z', updated: '2023-01-01T00:00:00.000Z', }; const ticketId = ticketQueries.createTicket(ticket); expect(ticketId).toBe('test-ticket'); // Retrieve the ticket const retrievedTicket = ticketQueries.getTicketById('test-ticket'); expect(retrievedTicket).not.toBeNull(); expect(retrievedTicket?.title).toBe('Test Ticket'); expect(retrievedTicket?.description).toBe('This is a test ticket'); }); test('should update a ticket', () => { // Create a ticket const ticket: Ticket = { id: 'test-ticket', title: 'Test Ticket', description: 'This is a test ticket', priority: 'medium', status: 'backlog', created: '2023-01-01T00:00:00.000Z', updated: '2023-01-01T00:00:00.000Z', }; ticketQueries.createTicket(ticket); // Update the ticket const updatedTicket: Ticket = { ...ticket, title: 'Updated Ticket', description: 'This ticket has been updated', status: 'in-progress', }; const success = ticketQueries.updateTicket(updatedTicket); expect(success).toBe(true); // Retrieve the updated ticket const retrievedTicket = ticketQueries.getTicketById('test-ticket'); expect(retrievedTicket).not.toBeNull(); expect(retrievedTicket?.title).toBe('Updated Ticket'); expect(retrievedTicket?.description).toBe('This ticket has been updated'); expect(retrievedTicket?.status).toBe('in-progress'); }); test('should delete a ticket', () => { // Create a ticket const ticket: Ticket = { id: 'test-ticket', title: 'Test Ticket', description: 'This is a test ticket', priority: 'medium', status: 'backlog', created: '2023-01-01T00:00:00.000Z', updated: '2023-01-01T00:00:00.000Z', }; ticketQueries.createTicket(ticket); // Delete the ticket const success = ticketQueries.deleteTicket('test-ticket'); expect(success).toBe(true); // Try to retrieve the deleted ticket const retrievedTicket = ticketQueries.getTicketById('test-ticket'); expect(retrievedTicket).toBeNull(); }); test('should add a comment to a ticket', () => { // Create a ticket const ticket: Ticket = { id: 'test-ticket', title: 'Test Ticket', description: 'This is a test ticket', priority: 'medium', status: 'backlog', created: '2023-01-01T00:00:00.000Z', updated: '2023-01-01T00:00:00.000Z', }; ticketQueries.createTicket(ticket); // Add a comment const commentId = ticketQueries.addComment('test-ticket', { id: 'test-comment', ticket_id: 'test-ticket', content: 'This is a test comment', type: 'comment', author: 'developer', status: 'open', timestamp: '2023-01-01T00:00:00.000Z', }); expect(commentId).toBe('test-comment'); // Retrieve the ticket with comment const retrievedTicket = ticketQueries.getTicketById('test-ticket'); expect(retrievedTicket).not.toBeNull(); expect(retrievedTicket?.comments).toHaveLength(1); expect(retrievedTicket?.comments?.[0].content).toBe('This is a test comment'); }); test('should filter tickets by status', () => { // Create tickets with different statuses const ticket1: Ticket = { id: 'ticket-1', title: 'Ticket 1', description: 'This is ticket 1', priority: 'medium', status: 'backlog', created: '2023-01-01T00:00:00.000Z', updated: '2023-01-01T00:00:00.000Z', }; const ticket2: Ticket = { id: 'ticket-2', title: 'Ticket 2', description: 'This is ticket 2', priority: 'high', status: 'in-progress', created: '2023-01-01T00:00:00.000Z', updated: '2023-01-01T00:00:00.000Z', }; ticketQueries.createTicket(ticket1); ticketQueries.createTicket(ticket2); // Filter by status const backlogTickets = ticketQueries.getTickets({ status: 'backlog' }); expect(backlogTickets).toHaveLength(1); expect(backlogTickets[0].id).toBe('ticket-1'); const inProgressTickets = ticketQueries.getTickets({ status: 'in-progress' }); expect(inProgressTickets).toHaveLength(1); expect(inProgressTickets[0].id).toBe('ticket-2'); }); test('should export tickets to JSON format', () => { // Create tickets with different statuses const ticket1: Ticket = { id: 'ticket-1', title: 'Ticket 1', description: 'This is ticket 1', priority: 'medium', status: 'backlog', created: '2023-01-01T00:00:00.000Z', updated: '2023-01-01T00:00:00.000Z', }; const ticket2: Ticket = { id: 'ticket-2', title: 'Ticket 2', description: 'This is ticket 2', priority: 'high', status: 'in-progress', created: '2023-01-01T00:00:00.000Z', updated: '2023-01-01T00:00:00.000Z', }; ticketQueries.createTicket(ticket1); ticketQueries.createTicket(ticket2); // Export to JSON const exportedData = ticketQueries.exportToJson(); // Check the structure expect(exportedData.columns).toHaveLength(5); // Check the backlog column const backlogColumn = exportedData.columns.find(col => col.id === 'backlog'); expect(backlogColumn).toBeDefined(); expect(backlogColumn?.tickets).toHaveLength(1); expect(backlogColumn?.tickets[0].id).toBe('ticket-1'); // Check the in-progress column const inProgressColumn = exportedData.columns.find(col => col.id === 'in-progress'); expect(inProgressColumn).toBeDefined(); expect(inProgressColumn?.tickets).toHaveLength(1); expect(inProgressColumn?.tickets[0].id).toBe('ticket-2'); }); });

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/ownlytics/mcptix'

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