core: fix api tests

This commit is contained in:
undefined committed 2025-05-07 18:46:12 +08:00
1 parent 5b3bcd1134
commit 2894d1e2ce
3 files changed
+18 -6

No files matched your search

+13 -1
View File
@@ -150,8 +150,20 @@ export class ApiHandler<C extends Context> extends Handler<C> {
await this.ctx.parallel('handler/api/before', this);
// @ts-ignore
await this.ctx.parallel(`handler/api/before/${op}`, this);
try {
if (typeof this.args.args === 'string') {
this.args.args = JSON.parse(this.args.args);
}
if (typeof this.args.projection === 'string') {
this.args.projection = '{['.includes(this.args.projection[0])
? JSON.parse(this.args.projection)
: this.args.projection.split(',').map((i) => i.trim()).filter((i) => i);
}
} catch (e) {
throw new BadRequestError('Invalid arguments');
}
const result = await this.ctx.api.execute(
this, op, { domainId: this.args.domainId, ...(this.args.args || {}) },
this, op, { domainId: this.args.domainId, ...this.args, ...(this.args.args || {}) },
(m, args) => (this.ctx.parallel as any)(m, args), this.args.projection,
);
if (BinaryResponse.check(result)) {
+1 -1
View File
@@ -546,7 +546,7 @@ const UserApi = {
if (arg.id) return user.getById(arg.domainId, arg.id);
if (arg.mail) return user.getByEmail(arg.domainId, arg.mail);
if (arg.uname) return user.getByUname(arg.domainId, arg.uname);
return c.user;
return user.getById(arg.domainId, c.user._id);
}),
users: Query(Schema.object({
ids: Schema.array(Schema.number().step(1)),
+4 -4
View File
@@ -29,15 +29,15 @@ describe('App', () => {
console.log('Application inited in %d ms', Date.now() - init);
}, { timeout: 30000 });
const routes = ['/', '/api', '/p', '/contest', '/homework', '/user/1', '/training'];
const routes = ['/', '/p', '/contest', '/homework', '/user/1', '/training'];
for (const route of routes) {
// eslint-disable-next-line @typescript-eslint/no-loop-func
it(`GET ${route}`, () => agent.get(route).expect(200));
}
it('API user', async () => {
await agent.get('/api?{user(id:1){uname}}').expect({ data: { user: { uname: 'Hydro' } } });
await agent.get('/api?{user(id:2){uname}}').expect({ data: { user: null } });
await agent.get('/api/user?args={"id":1}&projection=uname').expect({ uname: 'Hydro' });
await agent.get('/api/user?args={"id":2}&projection=uname').expect(null);
});
it('Create User', async () => {
@@ -59,7 +59,7 @@ describe('App', () => {
});
it('API registered user', async () => {
await agent.get('/api?{user(id:2){uname}}').expect({ data: { user: { uname: 'root' } } });
await agent.get('/api/user?args={"id":2}&projection=uname').expect({ uname: 'root' });
});
// TODO add more tests