Skip to content

Commit b5e879c

Browse files
test(validate-user): add mock integration coverage (JhaSourav07#3050)
1 parent 2c5ead4 commit b5e879c

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// services/github/validate-user.mock-integrations.test.ts
2+
3+
import { beforeEach, describe, expect, it, vi } from 'vitest';
4+
5+
vi.mock('../../lib/github', () => ({
6+
fetchUserProfile: vi.fn(),
7+
}));
8+
9+
import { fetchUserProfile } from '../../lib/github';
10+
import { gitHubUserValidator } from './validate-user';
11+
12+
describe('GitHubUserValidator Mock Integrations', () => {
13+
beforeEach(() => {
14+
vi.clearAllMocks();
15+
gitHubUserValidator.reset();
16+
});
17+
18+
it('loads user data through mocked async service', async () => {
19+
vi.mocked(fetchUserProfile).mockResolvedValue({} as never);
20+
21+
const result = await gitHubUserValidator.validateUser('ganesh');
22+
23+
expect(result).toBe(true);
24+
expect(fetchUserProfile).toHaveBeenCalledTimes(1);
25+
});
26+
27+
it('queries cache before triggering another service request', async () => {
28+
vi.mocked(fetchUserProfile).mockResolvedValue({} as never);
29+
30+
await gitHubUserValidator.validateUser('ganesh');
31+
await gitHubUserValidator.validateUser('ganesh');
32+
33+
expect(fetchUserProfile).toHaveBeenCalledTimes(1);
34+
});
35+
36+
it('stores successful validation results in cache', async () => {
37+
vi.mocked(fetchUserProfile).mockResolvedValue({} as never);
38+
39+
const first = await gitHubUserValidator.validateUser('ganesh');
40+
const second = await gitHubUserValidator.validateUser('ganesh');
41+
42+
expect(first).toBe(true);
43+
expect(second).toBe(true);
44+
45+
expect(fetchUserProfile).toHaveBeenCalledTimes(1);
46+
});
47+
48+
it('caches negative lookup results from mocked service', async () => {
49+
vi.mocked(fetchUserProfile).mockRejectedValue(new Error('User not found'));
50+
51+
const first = await gitHubUserValidator.validateUser('missing-user');
52+
const second = await gitHubUserValidator.validateUser('missing-user');
53+
54+
expect(first).toBe(false);
55+
expect(second).toBe(false);
56+
57+
expect(fetchUserProfile).toHaveBeenCalledTimes(1);
58+
});
59+
60+
it('falls back correctly when async endpoint returns temporary failure', async () => {
61+
vi.mocked(fetchUserProfile).mockRejectedValue(new Error('GitHub API timeout'));
62+
63+
await expect(gitHubUserValidator.validateUser('ganesh')).rejects.toThrow('GitHub API timeout');
64+
65+
expect(fetchUserProfile).toHaveBeenCalledTimes(1);
66+
});
67+
});

0 commit comments

Comments
 (0)