-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* ADD Payments * ADD payments * UPDATE refund result * fix : conflict --------- Co-authored-by: STEVE <ymyd.steve@gmail.com>
- Loading branch information
Showing
33 changed files
with
785 additions
and
111 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
80 changes: 80 additions & 0 deletions
80
vet_nest/src/payments/__test__/payments.controller.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
import { Test, TestingModule } from '@nestjs/testing'; | ||
import { HttpStatus, INestApplication } from '@nestjs/common'; | ||
import * as request from 'supertest'; | ||
|
||
const LOCAL_HOST = 'http://localhost:3001'; | ||
|
||
describe('CREATE PAYMENT', () => { | ||
let app: INestApplication; | ||
|
||
beforeEach(async () => { | ||
const module: TestingModule = await Test.createTestingModule({}).compile(); | ||
|
||
app = module.createNestApplication(); | ||
await app.init; | ||
}); | ||
|
||
test('POST /payments creates a new payment', () => { | ||
const createPaymentDto = { | ||
reservationId: 1, | ||
amount: 100, | ||
}; | ||
|
||
request(LOCAL_HOST) | ||
.post('/payments') | ||
.send(createPaymentDto) | ||
.then((res: request.Response) => { | ||
expect(res.statusCode).toEqual(HttpStatus.CREATED); | ||
}); | ||
}); | ||
|
||
test('POST /payments fails with invalid data', () => { | ||
const invalidDto = { | ||
amount: 100, | ||
}; | ||
|
||
request(LOCAL_HOST) | ||
.post('/payments') | ||
.send(invalidDto) | ||
.then((res: request.Response) => { | ||
expect(res.statusCode).toEqual(HttpStatus.BAD_REQUEST); | ||
expect(res.body.message).toEqual('invalid data'); | ||
}); | ||
}); | ||
}); | ||
|
||
describe('REFUND PAYMENT', () => { | ||
let app: INestApplication; | ||
|
||
beforeEach(async () => { | ||
const module: TestingModule = await Test.createTestingModule({}).compile(); | ||
|
||
app = module.createNestApplication(); | ||
await app.init; | ||
}); | ||
|
||
test('POST /payments/refund refunds', () => { | ||
const refundPaymentDto = { reservationId: 1 }; | ||
|
||
request(LOCAL_HOST) | ||
.post('/payments/refund') | ||
.send(refundPaymentDto) | ||
.then((res: request.Response) => { | ||
expect(res.statusCode).toEqual(HttpStatus.OK); | ||
}); | ||
}); | ||
|
||
test('POST /payments/refund fails with invalid data', () => { | ||
const invalidDto = { | ||
amount: 100, | ||
}; | ||
|
||
request(LOCAL_HOST) | ||
.post('/payments/refund') | ||
.send(invalidDto) | ||
.then((res: request.Response) => { | ||
expect(res.statusCode).toEqual(HttpStatus.BAD_REQUEST); | ||
expect(res.body.message).toEqual('paymentId is required'); | ||
}); | ||
}); | ||
}); |
152 changes: 152 additions & 0 deletions
152
vet_nest/src/payments/__test__/payments.service.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,152 @@ | ||
import { Test, TestingModule } from '@nestjs/testing'; | ||
import { PaymentsService } from '../payments.service'; | ||
import { PaymentsRepositoryMock } from '../repository/payments.repository.mock'; | ||
import { PaymentsRepository } from '../repository/payments.repository'; | ||
import { HttpService, HttpModule } from '@nestjs/axios'; | ||
import { of } from 'rxjs'; | ||
import { AxiosResponse } from 'axios'; | ||
|
||
// 여기만 하면 된다.. | ||
describe('CREATE PAYMENT', () => { | ||
let service: PaymentsService; | ||
let httpService: HttpService; | ||
|
||
beforeEach(async () => { | ||
const module: TestingModule = await Test.createTestingModule({ | ||
imports: [HttpModule], | ||
providers: [ | ||
{ | ||
provide: PaymentsRepository, | ||
useClass: PaymentsRepositoryMock, | ||
}, | ||
PaymentsService, | ||
{ | ||
provide: HttpService, | ||
useFactory: () => ({ | ||
post: jest.fn(), | ||
}), | ||
}, | ||
], | ||
}).compile(); | ||
service = module.get<PaymentsService>(PaymentsService); | ||
httpService = module.get<HttpService>(HttpService); | ||
}); | ||
|
||
test('invalid data fails', async () => { | ||
const createPaymentDto = { | ||
reservationId: null, | ||
amount: 100, | ||
}; | ||
|
||
try { | ||
await service.create(createPaymentDto); | ||
} catch (error) { | ||
expect(error).toBeInstanceOf(Error); | ||
} | ||
|
||
expect.assertions(1); | ||
}); | ||
|
||
test('duplicate payment fails', async () => { | ||
const createPaymentDto = { | ||
reservationId: 2, | ||
amount: 50, | ||
}; | ||
|
||
try { | ||
await service.create(createPaymentDto); | ||
} catch (error) { | ||
expect(error).toBeInstanceOf(Error); | ||
} | ||
|
||
expect.assertions(1); | ||
}); | ||
|
||
test('create passes with valid payment data', async () => { | ||
const createPaymentDto = { | ||
reservationId: 1, | ||
amount: 200, | ||
}; | ||
const createdPayment = { | ||
reservationId: 1, | ||
paymentId: 1, | ||
appId: 'PG1', | ||
amount: 200, | ||
status: 'done', | ||
}; | ||
|
||
jest.spyOn(httpService, 'post').mockImplementation(() => { | ||
const test = of({ | ||
data: { | ||
result: { code: 200, appId: 'PG1' }, | ||
}, | ||
status: 200, | ||
statusText: 'OK', | ||
headers: {}, | ||
config: {}, | ||
} as AxiosResponse<any>); | ||
|
||
console.log(typeof test); | ||
console.log(test); | ||
}); | ||
|
||
const result = await service.create(createPaymentDto); | ||
|
||
expect(result).toEqual(createdPayment); | ||
}); | ||
}); | ||
|
||
describe('REFUND PAYMENT', () => { | ||
let service: PaymentsService; | ||
|
||
beforeEach(async () => { | ||
const module: TestingModule = await Test.createTestingModule({ | ||
providers: [ | ||
{ | ||
provide: PaymentsRepository, | ||
useClass: PaymentsRepositoryMock, | ||
}, | ||
PaymentsService, | ||
], | ||
}).compile(); | ||
|
||
service = module.get<PaymentsService>(PaymentsService); | ||
}); | ||
|
||
test('refund fails when paymentId is missing', async () => { | ||
const cancelPaymentDto = { paymentId: null }; | ||
|
||
try { | ||
await service.refund(cancelPaymentDto); | ||
} catch (error) { | ||
expect(error).toBeInstanceOf(Error); | ||
} | ||
|
||
expect.assertions(1); | ||
}); | ||
|
||
test('refund fails when payment is not done', async () => { | ||
const cancelPaymentDto = { paymentId: 2 }; | ||
|
||
try { | ||
await service.refund(cancelPaymentDto); | ||
} catch (error) { | ||
expect(error).toBeInstanceOf(Error); | ||
} | ||
|
||
expect.assertions(1); | ||
}); | ||
|
||
test('refund passes with valid data', async () => { | ||
const refundPaymentDto = { paymentId: 3 }; | ||
const refunded = { | ||
paymentId: 3, | ||
amount: 200, | ||
status: 'refund', | ||
}; | ||
|
||
const result = await service.refund(refundPaymentDto); | ||
|
||
expect(result).toEqual(refunded); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import { PrimaryGeneratedColumn, Entity, Column, ManyToOne } from 'typeorm'; | ||
import { Reservation } from '../../reservations/entity/reservation.entity'; | ||
|
||
@Entity() | ||
export class Payment { | ||
@PrimaryGeneratedColumn() | ||
paymentId: number; | ||
|
||
@Column({ nullable: true }) | ||
appId: string; | ||
|
||
@Column() | ||
method: string; | ||
|
||
@Column() | ||
amount: number; | ||
|
||
@Column() | ||
status: string; | ||
|
||
@Column({ default: () => 'CURRENT_TIMESTAMP' }) | ||
createdAt: Date; | ||
|
||
@Column({ nullable: true }) | ||
canceledAt?: Date | null; | ||
|
||
@Column() | ||
reservationId: number; | ||
|
||
@ManyToOne(() => Reservation, (reservation) => reservation.payments, { | ||
nullable: false, | ||
onDelete: 'CASCADE', | ||
}) | ||
reservation: Reservation; | ||
} |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.