chore: relation repository response when source model not found (#1546)
* chore: relation repository response when source model not found * fix: test * fix: test * fix: test
This commit is contained in:
parent
313217a671
commit
c86b91c586
@ -10,6 +10,9 @@
|
||||
"@nocobase/database": "0.9.1-alpha.1",
|
||||
"@nocobase/resourcer": "0.9.1-alpha.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nocobase/test": "0.9.1-alpha.1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/nocobase/nocobase.git",
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { MockServer, mockServer } from './index';
|
||||
import { MockServer, mockServer } from '@nocobase/test';
|
||||
import { registerActions } from '@nocobase/actions';
|
||||
|
||||
describe('get action', () => {
|
||||
@ -10,7 +10,9 @@ describe('get action', () => {
|
||||
let Profile;
|
||||
|
||||
beforeEach(async () => {
|
||||
app = mockServer();
|
||||
app = mockServer({
|
||||
dataWrapping: false,
|
||||
});
|
||||
registerActions(app);
|
||||
|
||||
PostTag = app.collection({
|
||||
@ -120,11 +122,13 @@ describe('get action', () => {
|
||||
|
||||
const postProfile = await Profile.repository.findOne();
|
||||
|
||||
const response = await app
|
||||
.agent()
|
||||
.resource('posts.profile', p1.get('id'))
|
||||
.get();
|
||||
const response = await app.agent().resource('posts.profile', p1.get('id')).get();
|
||||
|
||||
expect(response.body['id']).toEqual(postProfile.get('id'));
|
||||
});
|
||||
|
||||
it('should return null when source model not found', async () => {
|
||||
const response = await app.agent().resource('posts.profile', 999).get();
|
||||
expect(response.status).toEqual(200);
|
||||
});
|
||||
});
|
||||
|
@ -118,4 +118,14 @@ describe('list action', () => {
|
||||
expect(body.count).toEqual(2);
|
||||
expect(body.rows).toEqual([{ id: 1 }, { id: 2 }]);
|
||||
});
|
||||
|
||||
it('should return empty error when relation not exists', async () => {
|
||||
const response = await app
|
||||
.agent()
|
||||
.resource('posts.tags', 999)
|
||||
.list({ fields: ['id', 'postsTags.createdAt'], sort: ['id'] });
|
||||
|
||||
expect(response.status).toEqual(200);
|
||||
expect(response.body.count).toEqual(0);
|
||||
});
|
||||
});
|
||||
|
@ -16,6 +16,7 @@ export async function get(ctx: Context, next) {
|
||||
});
|
||||
|
||||
ctx.body = instance || null;
|
||||
ctx.status = 200;
|
||||
|
||||
await next();
|
||||
}
|
||||
|
@ -42,6 +42,8 @@ export abstract class MultipleRelationRepository extends RelationRepository {
|
||||
const getAccessor = this.accessors().get;
|
||||
const sourceModel = await this.getSourceModel(transaction);
|
||||
|
||||
if (!sourceModel) return [];
|
||||
|
||||
if (findOptions.include && findOptions.include.length > 0) {
|
||||
const ids = (
|
||||
await sourceModel[getAccessor]({
|
||||
@ -103,6 +105,8 @@ export abstract class MultipleRelationRepository extends RelationRepository {
|
||||
const transaction = await this.getTransaction(options);
|
||||
|
||||
const sourceModel = await this.getSourceModel(transaction);
|
||||
if (!sourceModel) return 0;
|
||||
|
||||
const queryOptions = this.buildQueryOptions(options);
|
||||
|
||||
const count = await sourceModel[this.accessors().get]({
|
||||
|
@ -54,6 +54,8 @@ export abstract class SingleRelationRepository extends RelationRepository {
|
||||
const getAccessor = this.accessors().get;
|
||||
const sourceModel = await this.getSourceModel(transaction);
|
||||
|
||||
if (!sourceModel) return null;
|
||||
|
||||
if (findOptions?.include?.length > 0) {
|
||||
const templateModel = await sourceModel[getAccessor]({
|
||||
...findOptions,
|
||||
|
@ -320,6 +320,7 @@ export class Application<StateT = DefaultState, ContextT = DefaultContext> exten
|
||||
|
||||
const handleRequest = (req, res) => {
|
||||
const ctx = this.createContext(req, res);
|
||||
|
||||
// @ts-ignore
|
||||
return this.handleRequest(ctx, fn);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user