diff --git a/packages/nestjs-crud/src/crud/decorators/routes/crud-validate.decorator.ts b/packages/nestjs-crud/src/crud/decorators/routes/crud-validate.decorator.ts index d8af832d2..87246379f 100644 --- a/packages/nestjs-crud/src/crud/decorators/routes/crud-validate.decorator.ts +++ b/packages/nestjs-crud/src/crud/decorators/routes/crud-validate.decorator.ts @@ -1,4 +1,8 @@ -import { PlainLiteralObject, SetMetadata } from '@nestjs/common'; +import { + applyDecorators, + PlainLiteralObject, + SetMetadata, +} from '@nestjs/common'; import { CRUD_MODULE_ROUTE_VALIDATION_METADATA } from '../../../crud.constants'; import { CrudValidationOptions } from '../../../crud.types'; @@ -19,4 +23,5 @@ import { CrudValidationOptions } from '../../../crud.types'; */ export const CrudValidate = ( options?: CrudValidationOptions, -) => SetMetadata(CRUD_MODULE_ROUTE_VALIDATION_METADATA, options); +) => + applyDecorators(SetMetadata(CRUD_MODULE_ROUTE_VALIDATION_METADATA, options)); diff --git a/packages/nestjs-crud/src/util/configurable-crud.builder.e2e-spec.ts b/packages/nestjs-crud/src/util/configurable-crud.builder.e2e-spec.ts index 5d4f992c5..de3920cfe 100644 --- a/packages/nestjs-crud/src/util/configurable-crud.builder.e2e-spec.ts +++ b/packages/nestjs-crud/src/util/configurable-crud.builder.e2e-spec.ts @@ -47,10 +47,9 @@ describe.each([ .get('/photo?limit=10') .expect(200); - expect(response.body).toBeInstanceOf(Array); - expect(response.body.length).toEqual(10); - - expect(response.body).toBeInstanceOf(Object); + expect(response.body.data).toBeInstanceOf(Object); + expect(response.body.data).toBeInstanceOf(Array); + expect(response.body.data.length).toEqual(10); }); it('GET /photo?limit=10&page=1', async () => { diff --git a/packages/nestjs-crud/src/util/configurable-crud.builder.ts b/packages/nestjs-crud/src/util/configurable-crud.builder.ts index cb1050371..b1453157b 100644 --- a/packages/nestjs-crud/src/util/configurable-crud.builder.ts +++ b/packages/nestjs-crud/src/util/configurable-crud.builder.ts @@ -283,7 +283,11 @@ export class ConfigurableCrudBuilder< ), ); CrudRequest()(InternalCrudClass.prototype, 'createOne', 0); - CrudBody()(InternalCrudClass.prototype, 'createOne', 1); + CrudBody({ validation: { expectedType: options.createOne?.dto } })( + InternalCrudClass.prototype, + 'createOne', + 1, + ); } if (options?.updateOne) { @@ -308,7 +312,11 @@ export class ConfigurableCrudBuilder< ), ); CrudRequest()(InternalCrudClass.prototype, 'updateOne', 0); - CrudBody()(InternalCrudClass.prototype, 'updateOne', 1); + CrudBody({ validation: { expectedType: options.updateOne?.dto } })( + InternalCrudClass.prototype, + 'updateOne', + 1, + ); } if (options?.replaceOne) { diff --git a/packages/nestjs-org/src/__fixtures__/dto/org-profile-update.dto.fixture.ts b/packages/nestjs-org/src/__fixtures__/dto/org-profile-update.dto.fixture.ts index b4e2b79f8..bc38e569d 100644 --- a/packages/nestjs-org/src/__fixtures__/dto/org-profile-update.dto.fixture.ts +++ b/packages/nestjs-org/src/__fixtures__/dto/org-profile-update.dto.fixture.ts @@ -1,4 +1,4 @@ -import { IntersectionType, PickType } from '@nestjs/swagger'; +import { IntersectionType, PartialType, PickType } from '@nestjs/swagger'; import { OrgProfileUpdateDto } from '../../dto/profile/org-profile-update.dto'; @@ -6,5 +6,5 @@ import { OrgProfileDtoFixture } from './org-profile.dto.fixture'; export class OrgProfileUpdateDtoFixture extends IntersectionType( OrgProfileUpdateDto, - PickType(OrgProfileDtoFixture, ['name'] as const), + PartialType(PickType(OrgProfileDtoFixture, ['name'] as const)), ) {} diff --git a/packages/nestjs-org/src/utils/org-profile.crud-builder.e2e-spec.ts b/packages/nestjs-org/src/utils/org-profile.crud-builder.e2e-spec.ts index 69a819078..8188ac902 100644 --- a/packages/nestjs-org/src/utils/org-profile.crud-builder.e2e-spec.ts +++ b/packages/nestjs-org/src/utils/org-profile.crud-builder.e2e-spec.ts @@ -167,7 +167,7 @@ describe('Org Profile Crud Builder (e2e)', () => { await supertest(app.getHttpServer()) .post('/org-profile') - .send({ orgId: org.id }) + .send({ orgId: org.id, name: 'My Org' }) .expect(201); }); @@ -178,7 +178,7 @@ describe('Org Profile Crud Builder (e2e)', () => { // create org profile first const createResponse = await supertest(app.getHttpServer()) .post('/org-profile') - .send({ orgId: org.id }) + .send({ orgId: org.id, name: 'My Org Updated' }) .expect(201); const id = createResponse.body.id; diff --git a/packages/nestjs-user/src/__fixtures__/dto/user-profile-update.dto.fixture.ts b/packages/nestjs-user/src/__fixtures__/dto/user-profile-update.dto.fixture.ts index 9c5d4cc93..7b8d52458 100644 --- a/packages/nestjs-user/src/__fixtures__/dto/user-profile-update.dto.fixture.ts +++ b/packages/nestjs-user/src/__fixtures__/dto/user-profile-update.dto.fixture.ts @@ -1,4 +1,4 @@ -import { IntersectionType, PickType } from '@nestjs/swagger'; +import { IntersectionType, PartialType, PickType } from '@nestjs/swagger'; import { UserProfileUpdateDto } from '../../dto/profile/user-profile-update.dto'; @@ -6,5 +6,5 @@ import { UserProfileDtoFixture } from './user-profile.dto.fixture'; export class UserProfileUpdateDtoFixture extends IntersectionType( UserProfileUpdateDto, - PickType(UserProfileDtoFixture, ['firstName'] as const), + PartialType(PickType(UserProfileDtoFixture, ['firstName'] as const)), ) {} diff --git a/packages/nestjs-user/src/utils/user-profile.crud-builder.e2e-spec.ts b/packages/nestjs-user/src/utils/user-profile.crud-builder.e2e-spec.ts index cd0c304e3..a94cedc96 100644 --- a/packages/nestjs-user/src/utils/user-profile.crud-builder.e2e-spec.ts +++ b/packages/nestjs-user/src/utils/user-profile.crud-builder.e2e-spec.ts @@ -78,7 +78,7 @@ describe('User Profile Crud Builder (e2e)', () => { await supertest(app.getHttpServer()) .post('/user-profile') - .send({ userId: user.id }) + .send({ userId: user.id, firstName: 'Foo' }) .expect(201); }); @@ -89,7 +89,7 @@ describe('User Profile Crud Builder (e2e)', () => { // create user profile first const createResponse = await supertest(app.getHttpServer()) .post('/user-profile') - .send({ userId: user.id }) + .send({ userId: user.id, firstName: 'Bar' }) .expect(201); const id = createResponse.body.id;