From 7acea1469f20ddef4c7e6fabfc5e2a88936889fb Mon Sep 17 00:00:00 2001 From: YR8002 <120006167+YR8002@users.noreply.github.com> Date: Thu, 30 Mar 2023 16:22:22 +0900 Subject: [PATCH 1/2] =?UTF-8?q?test:=20review=20=EB=A6=AC=EC=A1=B8?= =?UTF-8?q?=EB=B2=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reviews/__test__/reviews.resolver.spec.ts | 90 ++++++++++--------- 1 file changed, 48 insertions(+), 42 deletions(-) diff --git a/src/apis/reviews/__test__/reviews.resolver.spec.ts b/src/apis/reviews/__test__/reviews.resolver.spec.ts index 9cdbbd3..57458bb 100644 --- a/src/apis/reviews/__test__/reviews.resolver.spec.ts +++ b/src/apis/reviews/__test__/reviews.resolver.spec.ts @@ -1,58 +1,31 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { Reservation } from 'src/apis/reservations/entities/reservation.entity'; -import { Shop } from 'src/apis/shops/entities/shop.entity'; -import { Review } from '../entities/review.entity'; import { ReviewsResolver } from '../reviews.resolver'; import { ReviewsService } from '../reviews.service'; +import * as httpMocks from 'node-mocks-http'; +import { IContext } from 'src/commons/interface/context'; +import { CreateReviewInput } from '../dto/create-review.input'; jest.mock('../reviews.resolver'); - -const EXAMPLE_RESERVATION: Reservation = { - "id" : "33bcbf41-884b-46f2-96a2-f3947a1ca906", - "date" : new Date(2023-04-30), - "time" : "13:00", - "shopId" : "500d75e0-0223-4046-be13-55887bfbf6f0", - "userId" : "222070da-c5ab-43f0-802c-bdb4a73ccc0f", - "dogId" : "7790ffa7-0be3-44ff-94dc-54c59fe696ed", - "createdAt" : new Date(2023-03-30), - "deletedAt" : null -} -const EXAMPLE_SHOP: Shop = { - "id" : "500d75e0-0223-4046-be13-55887bfbf6f0", - "name" : "테스트1", - "phone" : "01000000000", - "openHour" : "13:00", - "closeHour" : "15:00", - "address" : "서울시 구로구", - "code" : 11170, - "lat" : "37.4944134", - "lng" : "126.8563336", - "averageStar" : 3, - "reservation": null, - "image": null, - "review": null, - "updatedAt" : null, - "deletedAt" : null -} -const EXAMPLE_REVIEW: Review = { +const EXAMPLE_REVIEW = { id: 'EXAMPLE_REVIEW_ID', contents: 'EXAMPLE_REVIEW_CONTENTS', createdAt: new Date(), star: 5, - reservation: EXAMPLE_RESERVATION, - shop: EXAMPLE_SHOP, -}; -const reviewId = EXAMPLE_REVIEW.id; - -let mockReviewsService = { - find: jest.fn(({ reviewId }) => EXAMPLE_REVIEW), - findByShopIdWithPage: jest.fn(({ page, count, reviewId }) => EXAMPLE_REVIEW), - create: jest.fn(() => EXAMPLE_REVIEW), + reservation: { id: '33bcbf41-884b-46f2-96a2-f3947a1ca906' }, + shop: { id: '500d75e0-0223-4046-be13-55887bfbf6f0' }, }; describe('ReviewResolver', () => { + let mockReviewsService = { + find: jest.fn(({ reviewId }) => EXAMPLE_REVIEW), + findByShopIdWithPage: jest.fn( + ({ page, count, reviewId }) => EXAMPLE_REVIEW, + ), + create: jest.fn(({ userId, createReviewInput }) => EXAMPLE_REVIEW), + }; let reviewsResolver: ReviewsResolver; + let context: IContext; beforeEach(async () => { const reviewsModule: TestingModule = await Test.createTestingModule({ @@ -66,8 +39,16 @@ describe('ReviewResolver', () => { }).compile(); mockReviewsService = reviewsModule.get(ReviewsService); reviewsResolver = reviewsModule.get(ReviewsResolver); + context = { + req: httpMocks.createRequest(), + res: httpMocks.createResponse(), + }; }); + const reviewId = EXAMPLE_REVIEW.id; + const shopId = EXAMPLE_REVIEW.shop.id; + const userId = 'exampleUserId'; + describe('fetchReview', () => { it('reivewService의 find 메서드 실행', async () => { const result = await reviewsResolver.fetchReview(reviewId); @@ -80,7 +61,8 @@ describe('ReviewResolver', () => { describe('fetchReviewsByShopId', () => { it('reivewService의 findByShopIdWithPage 메서드 실행', async () => { - const { page, count, shopID } = { 1, 100, } + const page = 1; + const count = 100; const result = await reviewsResolver.fetchReviewsByShopId( page, count, @@ -94,4 +76,28 @@ describe('ReviewResolver', () => { ).toBeCalled(); }); }); + + describe('createReview', () => { + it('reivewService의 create 메서드 실행', async () => { + const createReviewInput: CreateReviewInput = { + contents: EXAMPLE_REVIEW.contents, + star: EXAMPLE_REVIEW.star, + reservationId: EXAMPLE_REVIEW.reservation.id, + shopId: EXAMPLE_REVIEW.shop.id, + }; + const result = await reviewsResolver.createReview( + createReviewInput, + context, + ); + return result; + + expect(result).toEqual(EXAMPLE_REVIEW); + expect( + mockReviewsService.create({ + userId, + createReviewInput, + }), + ).toBeCalled(); + }); + }); }); From 1d55047a83f8be601e43889db43305daeac39171 Mon Sep 17 00:00:00 2001 From: YR8002 <120006167+YR8002@users.noreply.github.com> Date: Thu, 30 Mar 2023 20:48:56 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20CORS=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main.ts b/src/main.ts index ddc2cbc..7dd069f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,6 +9,15 @@ async function bootstrap() { app.useGlobalPipes(new ValidationPipe()); app.useGlobalFilters(new HttpExceptionFilter()); app.use(graphqlUploadExpress()); + app.enableCors({ + origin: [ + 'http://localhost:3000', + 'http://127.0.0.1:3000', + 'http://34.64.53.80:3000', + 'https://www.groomeong.shop', + ], + credentials: true, + }); await app.listen(3000); } bootstrap();