Skip to main content
Glama

MPC Tally API Server

tally.service.address-created-proposals.test.ts3 kB
import { TallyService } from '../tally.service'; import dotenv from 'dotenv'; import path from 'path'; // Load environment variables from the root directory dotenv.config({ path: path.resolve(__dirname, '../../../.env') }); describe('TallyService - Address Created Proposals', () => { let service: TallyService; beforeAll(() => { const apiKey = process.env.TALLY_API_KEY; if (!apiKey) { throw new Error('TALLY_API_KEY environment variable is required for tests'); } console.log('Using API key:', apiKey.substring(0, 8) + '...'); service = new TallyService({ apiKey }); }); it('should require an address', async () => { // @ts-expect-error Testing invalid input await expect(service.getAddressCreatedProposals({})).rejects.toThrow( 'address is required' ); }); it('should fetch proposals created by an address', async () => { const result = await service.getAddressCreatedProposals({ address: '0x1234567890123456789012345678901234567890' }); expect(result).toBeDefined(); expect(result.proposals).toBeDefined(); expect(result.proposals.pageInfo).toBeDefined(); if (result.proposals.nodes.length > 0) { const proposal = result.proposals.nodes[0]; expect(proposal.id).toBeDefined(); expect(proposal.metadata.title).toBeDefined(); expect(proposal.status).toBeDefined(); expect(proposal.proposer.address).toBeDefined(); expect(proposal.governor.organization.slug).toBeDefined(); expect(proposal.voteStats.votesCount).toBeDefined(); } }); it('should handle invalid addresses gracefully', async () => { await expect( service.getAddressCreatedProposals({ address: 'invalid-address' }) ).rejects.toThrow('Failed to fetch created proposals'); }); it('should return empty nodes array for address with no proposals', async () => { const result = await service.getAddressCreatedProposals({ address: '0x0000000000000000000000000000000000000000' }); expect(result).toBeDefined(); expect(result.proposals.nodes).toHaveLength(0); expect(result.proposals.pageInfo).toBeDefined(); }); it('should handle pagination correctly', async () => { const firstPage = await service.getAddressCreatedProposals({ address: '0x1234567890123456789012345678901234567890', limit: 1 }); expect(firstPage.proposals.nodes.length).toBeLessThanOrEqual(1); if (firstPage.proposals.nodes.length === 1 && firstPage.proposals.pageInfo.lastCursor) { const secondPage = await service.getAddressCreatedProposals({ address: '0x1234567890123456789012345678901234567890', limit: 1, afterCursor: firstPage.proposals.pageInfo.lastCursor }); expect(secondPage.proposals.nodes.length).toBeLessThanOrEqual(1); if (secondPage.proposals.nodes.length === 1) { expect(secondPage.proposals.nodes[0].id).not.toBe(firstPage.proposals.nodes[0].id); } } }); });

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/crazyrabbitLTC/mpc-tally-api-server'

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