mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 09:36:08 +08:00
core: fix api tests
This commit is contained in:
3 files changed
+18
-6
No files matched your search
@@ -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)) {
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in new issue
Block a user