import { describe, it, expect, beforeAll, afterAll, afterEach } from 'vitest';
import { setupServer } from 'msw/node';
import { http, HttpResponse } from 'msw';
const BASE = 'https://api.apollo.io/api/v1';
const mockServer = setupServer(
http.post(`${BASE}/mixed_people/api_search`, () =>
HttpResponse.json({
people: [{ id: '1', name: 'Jane Doe', title: 'VP Sales' }],
pagination: { page: 1, per_page: 25, total_entries: 1, total_pages: 1 },
}),
),
http.post(`${BASE}/people/match`, () =>
HttpResponse.json({
person: { id: '1', name: 'Jane Doe', email: 'jane@test.com', title: 'VP Sales' },
}),
),
http.get(`${BASE}/auth/health`, () =>
HttpResponse.json({ is_logged_in: true }),
),
);
beforeAll(() => mockServer.listen());
afterEach(() => mockServer.resetHandlers());
afterAll(() => mockServer.close());
describe('People Search', () => {
it('returns contacts from search', async () => {
const { searchPeople } = await import('../workflows/lead-search');
const result = await searchPeople({ domains: ['test.com'] });
expect(result.people).toHaveLength(1);
expect(result.people[0].name).toBe('Jane Doe');
});
it('handles 429 errors', async () => {
mockServer.use(
http.post(`${BASE}/mixed_people/api_search`, () =>
HttpResponse.json({ message: 'Rate limited' }, { status: 429 }),
),
);
const { searchPeople } = await import('../workflows/lead-search');
await expect(searchPeople({ domains: ['test.com'] })).rejects.toThrow();
});
});
import { describe, it, expect } from 'vitest';
import axios from 'axios';
const SKIP = !process.env.APOLLO_API_KEY;
const client = axios.create({
baseURL: 'https://api.apollo.io/api/v1',
headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.APOLLO_API_KEY! },
});
describe.skipIf(SKIP)('Apollo Live Integration', () => {
it('searches for people at apollo.io', async () => {
const { data } = await client.post('/mixed_people/api_search', {
q_organization_domains_list: ['apollo.io'],
per_page: 5,
});
expect(data.people.length).toBeGreaterThan(0);
});
it('enriches organization by domain', async () => {
const { data } = await client.get('/organizations/enrich', { params: { domain: 'apollo.io' } });
expect(data.organization).toBeDefined();
expect(data.organization.name).toContain('Apollo');
});
});