Skip to content

Commit

Permalink
Merge pull request #56 from DevKor-github/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
astorverse authored Aug 7, 2024
2 parents 706ddd3 + 78b8fce commit 7dad4f4
Show file tree
Hide file tree
Showing 6 changed files with 271 additions and 116 deletions.
23 changes: 20 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ erDiagram
- **컨트롤러 메서드**: HTTP 요청 중점 네이밍
- 생성: `create{Entity}`
- 조회: `get{Entity}`, `get{Entities}`
- 업데이트: `patch{Entity}`, `put{Entity}`
- 업데이트: `patch{Entity}`, `put{Entity}`
- 삭제: `delete{Entity}`
- **서비스 메서드**: Entity 명시
- 생성: `create{Entity}`
Expand All @@ -273,9 +273,26 @@ erDiagram

## 테스트 코드 네이밍 룰

{메서드명}{기대결과}{테스트상태}
### jest 코드

`isAdult_False_AgeLessThan18)`
```typescript
describe('{layer}', () => {
describe('{method}', async () => {
it('should {result}{condition}', () => {});
});
});
```

### 예시

```typescript
AgreementsService
createAgreement
should return AgreementDto with valid input (6 ms)
existCheck
should throw exception when agreement does not exist (5 ms)
should return AgreementDto when agreement exists (2 ms)
```

## 접두사 정리

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"deploy:staging": "./deploy/deploy-staging.sh",
"deploy:prod": "./deploy/deploy-prod.sh",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test": "jest --verbose",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
Expand Down
114 changes: 114 additions & 0 deletions src/APIs/agreements/__test__/agreements.controller.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import { Test, TestingModule } from '@nestjs/testing';
import { AgreementsService } from '../agreements.service';
import { AgreementDto } from '../dtos/common/agreement.dto';
import {
MockService,
MockServiceFactory,
TEST_DATE_FIELDS,
} from '@/utils/test.utils';
import { AgreementType } from '@/common/enums/agreement-type.enum';
import { AgreementsController } from '../agreements.controller';
import { AgreementCreateRequestDto } from '../dtos/request/agreement-create-request.dto';
import { Request } from 'express';
import { AgreementPatchRequestDto } from '../dtos/request/agreement-patch-request.dto';

describe('AgreementsService', () => {
let ctrl_agreements: AgreementsController;
let svc_agreements: MockService<AgreementsService>;
let dto_agreement: AgreementDto;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [AgreementsController],
providers: [
{
provide: AgreementsService,
useValue: MockServiceFactory.getMockService(AgreementsService),
},
],
}).compile();

ctrl_agreements = module.get<AgreementsController>(AgreementsController);
svc_agreements =
module.get<MockService<AgreementsService>>(AgreementsService);
dto_agreement = {
id: 1,
userId: 1,
agreementType: AgreementType.TERMS_OF_SERVICE,
isAgreed: true,
...TEST_DATE_FIELDS,
};
});

describe('agree', () => {
it('should return AgreementDto with valid input', async () => {
const req = { user: { userId: 1 } } as Request;
const dto: AgreementCreateRequestDto = {
agreementType: AgreementType.TERMS_OF_SERVICE,
isAgreed: true,
};
svc_agreements.createAgreement.mockResolvedValue(dto_agreement);

const result = await ctrl_agreements.agree(req, dto);
expect(result).toEqual(dto_agreement);
expect(svc_agreements.createAgreement).toHaveBeenCalledWith({
...dto,
userId: 1,
});
});
});

describe('fetchAgreements', () => {
it('should fetch agreements for the user', async () => {
const req = { user: { userId: 1 } } as Request;
svc_agreements.findAgreements.mockResolvedValue([dto_agreement]);

const result = await ctrl_agreements.fetchAgreements(req);
expect(result).toEqual([dto_agreement]);
expect(svc_agreements.findAgreements).toHaveBeenCalledWith({ userId: 1 });
});
});

describe('fetchAgreementAdmin', () => {
it('should fetch agreements for the target user as admin', async () => {
const req = { user: { userId: 1 } } as Request;
const targetUserKakaoId = 2;
svc_agreements.adminCheck.mockResolvedValue(true);
svc_agreements.findAgreements.mockResolvedValue([dto_agreement]);

const result = await ctrl_agreements.fetchAgreementAdmin(
req,
targetUserKakaoId,
);
expect(result).toEqual([dto_agreement]);
expect(svc_agreements.adminCheck).toHaveBeenCalledWith({ userId: 1 });
expect(svc_agreements.findAgreements).toHaveBeenCalledWith({
userId: targetUserKakaoId,
});
});
});
describe('patchAgreement', () => {
it('should patch an agreement', async () => {
const req = { user: { userId: 1 } } as Request;
const agreementId = 1;
const patchAgreementInput: AgreementPatchRequestDto = { isAgreed: false };
const patchAgreementOutput: AgreementDto = {
...dto_agreement,
isAgreed: patchAgreementInput.isAgreed,
};
svc_agreements.patchAgreement.mockResolvedValue(patchAgreementOutput);

const result = await ctrl_agreements.patchAgreement(
req,
agreementId,
patchAgreementInput,
);
expect(result).toEqual(patchAgreementOutput);
expect(svc_agreements.patchAgreement).toHaveBeenCalledWith({
...patchAgreementInput,
agreementId,
userId: req.user.userId,
});
});
});
});
Loading

0 comments on commit 7dad4f4

Please sign in to comment.