Skip to content

Commit d51bf3e

Browse files
committed
Add api test modules
1 parent b1014fb commit d51bf3e

9 files changed

Lines changed: 1628 additions & 0 deletions
Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
import { AdminProjectManagementApi } from '../AdminProjectManagementApi';
2+
import type { Project, ProjectList } from '../../models';
3+
import { Configuration } from '../../runtime';
4+
import { createMockFetch, createMockResponse } from '../../__tests__/test-utils';
5+
6+
describe('AdminProjectManagementApi', () => {
7+
let api: AdminProjectManagementApi;
8+
let mockFetch: jest.Mock;
9+
10+
beforeEach(() => {
11+
const config = new Configuration({
12+
basePath: 'http://localhost/api',
13+
});
14+
api = new AdminProjectManagementApi(config);
15+
});
16+
17+
describe('adminAddProject', () => {
18+
it('should create a new project', async () => {
19+
const newProject: Project = {
20+
name: 'new-project',
21+
title: 'New Project',
22+
};
23+
24+
const responseProject: Project = {
25+
id: 'project-123',
26+
...newProject,
27+
};
28+
29+
mockFetch = createMockFetch(responseProject, 201);
30+
global.fetch = mockFetch;
31+
32+
const result = await api.adminAddProject({ project: newProject });
33+
34+
expect(mockFetch).toHaveBeenCalledWith(
35+
'http://localhost/api/admin/project',
36+
expect.objectContaining({
37+
method: 'POST',
38+
headers: expect.objectContaining({
39+
'Content-Type': 'application/json',
40+
}),
41+
})
42+
);
43+
expect(result.id).toBe('project-123');
44+
});
45+
46+
it('should handle errors when creating a project', async () => {
47+
mockFetch = jest.fn().mockResolvedValue(createMockResponse({ error: 'Bad Request' }, 400));
48+
global.fetch = mockFetch;
49+
50+
await expect(api.adminAddProject({ project: {} })).rejects.toThrow();
51+
});
52+
});
53+
54+
describe('adminGetProject', () => {
55+
it('should fetch a project by ID', async () => {
56+
const projectId = 'project-123';
57+
const expectedProject: Project = {
58+
id: projectId,
59+
name: 'my-project',
60+
};
61+
62+
mockFetch = createMockFetch(expectedProject);
63+
global.fetch = mockFetch;
64+
65+
const result = await api.adminGetProject({ id: projectId });
66+
67+
expect(mockFetch).toHaveBeenCalledWith(
68+
`http://localhost/api/admin/project/${projectId}`,
69+
expect.objectContaining({
70+
method: 'GET',
71+
})
72+
);
73+
expect(result.id).toBe(projectId);
74+
});
75+
76+
it('should handle 404 when project not found', async () => {
77+
mockFetch = jest.fn().mockResolvedValue(createMockResponse({ error: 'Not Found' }, 404));
78+
global.fetch = mockFetch;
79+
await expect(api.adminGetProject({ id: 'missing' })).rejects.toThrow();
80+
});
81+
82+
it('should require id parameter', async () => {
83+
await expect(api.adminGetProject({ id: null as unknown as string })).rejects.toThrow();
84+
});
85+
});
86+
87+
describe('adminGetProjectList', () => {
88+
it('should fetch a list of projects', async () => {
89+
const mockList: ProjectList = {
90+
projects: [
91+
{ id: '1', name: 'p1' },
92+
{ id: '2', name: 'p2' },
93+
],
94+
pagination: {
95+
page: 1,
96+
pageSize: 25,
97+
totalItems: 2,
98+
totalPages: 1,
99+
},
100+
};
101+
102+
mockFetch = createMockFetch(mockList);
103+
global.fetch = mockFetch;
104+
105+
const result = await api.adminGetProjectList({});
106+
107+
expect(mockFetch).toHaveBeenCalledWith(
108+
'http://localhost/api/admin/project',
109+
expect.objectContaining({
110+
method: 'GET',
111+
})
112+
);
113+
expect(result.projects).toHaveLength(2);
114+
});
115+
116+
it('should handle pagination parameters', async () => {
117+
mockFetch = createMockFetch({ projects: [] });
118+
global.fetch = mockFetch;
119+
120+
await api.adminGetProjectList({ page: 2, pageSize: 10 });
121+
122+
const url = mockFetch.mock.calls[0][0] as string;
123+
expect(url).toContain('page=2');
124+
expect(url).toContain('pageSize=10');
125+
});
126+
127+
it('should handle filter parameters', async () => {
128+
mockFetch = createMockFetch({ projects: [] });
129+
global.fetch = mockFetch;
130+
131+
await api.adminGetProjectList({ filter: ['name=test'] });
132+
133+
const url = mockFetch.mock.calls[0][0] as string;
134+
expect(url).toContain('filter=');
135+
});
136+
});
137+
138+
describe('adminUpdateProject', () => {
139+
it('should update an existing project', async () => {
140+
const projectId = 'project-123';
141+
const updatedProject: Project = {
142+
id: projectId,
143+
title: 'Updated Title',
144+
};
145+
146+
mockFetch = createMockFetch(updatedProject);
147+
global.fetch = mockFetch;
148+
149+
const result = await api.adminUpdateProject({ id: projectId, project: updatedProject });
150+
151+
expect(mockFetch).toHaveBeenCalledWith(
152+
`http://localhost/api/admin/project/${projectId}`,
153+
expect.objectContaining({
154+
method: 'PUT',
155+
})
156+
);
157+
expect(result.title).toBe('Updated Title');
158+
});
159+
160+
it('should require id parameter', async () => {
161+
await expect(
162+
api.adminUpdateProject({ id: null as unknown as string, project: {} })
163+
).rejects.toThrow();
164+
});
165+
});
166+
167+
describe('adminDeleteProject', () => {
168+
it('should delete a project', async () => {
169+
const projectId = 'project-delete';
170+
mockFetch = jest.fn().mockResolvedValue({ ok: true, status: 204 });
171+
global.fetch = mockFetch;
172+
173+
await api.adminDeleteProject({ id: projectId });
174+
175+
expect(mockFetch).toHaveBeenCalledWith(
176+
`http://localhost/api/admin/project/${projectId}`,
177+
expect.objectContaining({
178+
method: 'DELETE',
179+
})
180+
);
181+
});
182+
183+
it('should require id parameter', async () => {
184+
await expect(api.adminDeleteProject({ id: null as unknown as string })).rejects.toThrow();
185+
});
186+
});
187+
188+
describe('authentication', () => {
189+
it('should include Bearer token when configured', async () => {
190+
const config = new Configuration({
191+
basePath: 'http://localhost/api',
192+
accessToken: async () => 'test-token',
193+
});
194+
api = new AdminProjectManagementApi(config);
195+
mockFetch = createMockFetch({});
196+
global.fetch = mockFetch;
197+
198+
await api.adminGetProject({ id: '1' });
199+
200+
expect(mockFetch).toHaveBeenCalledWith(
201+
expect.any(String),
202+
expect.objectContaining({
203+
headers: expect.objectContaining({
204+
Authorization: 'Bearer test-token',
205+
}),
206+
})
207+
);
208+
});
209+
});
210+
});

0 commit comments

Comments
 (0)