Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile.logstash
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM opensearchproject/logstash-oss-with-opensearch-output-plugin:7.16.2
FROM opensearchproject/logstash-oss-with-opensearch-output-plugin:7.0.0

COPY ./elk/logstash/logstash.prod.conf /usr/share/logstash/pipeline/
COPY ./elk/logstash/mysql-connector-java-8.0.28.jar /usr/share/logstash/
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ services:
# platform: linux/86_64
image: mysql:latest
environment:
MYSQL_DATABASE: 'groomeong'
MYSQL_DATABASE: 'groo-meong'
MYSQL_ROOT_PASSWORD: 'root'
ports:
- 3306:3306
Expand Down
4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@
},
"dependencies": {
"@apollo/server": "^4.5.0",
<<<<<<< HEAD
"@elastic/elasticsearch": "^7.0.0",
=======
"@elastic/elasticsearch": "7.13.0",
>>>>>>> 7865a492a12584e16382eabddf53ab547553938a
"@google-cloud/storage": "^6.9.3",
"@nestjs-modules/mailer": "^1.8.1",
"@nestjs/apollo": "^10.1.7",
Expand Down
147 changes: 69 additions & 78 deletions src/apis/reviews/__test__/reviews.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { UnprocessableEntityException } from '@nestjs/common';
import { Test, TestingModule } from '@nestjs/testing';
import { getRepositoryToken } from '@nestjs/typeorm';
import { ShopsService } from 'src/apis/shops/shops.service';
import { Repository } from 'typeorm';
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');

jest.mock('../reviews.service');
const EXAMPLE_REVIEW = {
id: 'EXAMPLE_REVIEW_ID',
contents: 'EXAMPLE_REVIEW_CONTENTS',
Expand All @@ -16,97 +16,88 @@ const EXAMPLE_REVIEW = {
shop: { id: '500d75e0-0223-4046-be13-55887bfbf6f0' },
};

const MockReviewsRepository = () => ({
find: jest.fn((where, skip, take, order, relations) => {
EXAMPLE_REVIEW;
}),
findOne: jest.fn((where, relations) => {
EXAMPLE_REVIEW;
}),
save: jest.fn(({ contents, star, reservation, shop }) => {
EXAMPLE_REVIEW;
}),
});

type MockRepository<T = any> = Partial<Record<keyof Repository<T>, jest.Mock>>;

describe('ReviewsService', () => {
let reviewsService: ReviewsService;
let shopsService: ShopsService;
let mockReviewsRepository: MockRepository<Review>;
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 module: TestingModule = await Test.createTestingModule({
const reviewsModule: TestingModule = await Test.createTestingModule({
providers: [
ReviewsService,
ReviewsResolver,
{
provide: getRepositoryToken(Review),
useValue: MockReviewsRepository(),
},
{
provide: ShopsService,
useValue: {
findById: jest.fn(() => true),
},
provide: ReviewsService,
useValue: mockReviewsService,
},
],
}).compile();

reviewsService = module.get<ReviewsService>(ReviewsService);
mockReviewsRepository = module.get(getRepositoryToken(Review));
mockReviewsService = reviewsModule.get(ReviewsService);
reviewsResolver = reviewsModule.get<ReviewsResolver>(ReviewsResolver);
context = {
req: httpMocks.createRequest(),
res: httpMocks.createResponse(),
};
});

const reviewId = EXAMPLE_REVIEW.id;
const shopId = 'shopId';
const shopId = EXAMPLE_REVIEW.shop.id;
const userId = 'exampleUserId';

describe('find', () => {
it('reviewsRepository의 findOne을 실행하고 값이 없으면 error 반환해야함', async () => {
try {
const result = await mockReviewsRepository.findOne({
where: { id: reviewId },
relations: ['shop', 'reservation'],
});
} catch (error) {
expect(error).toBeInstanceOf(UnprocessableEntityException);
expect(error.message).toEqual('아이디를 찾을 수 없습니다');
}
expect(mockReviewsRepository.findOne).toBeCalled();
describe('fetchReview', () => {
it('reivewService의 find 메서드 실행', async () => {
const result = await reviewsResolver.fetchReview(reviewId);
return result;

expect(result).toEqual(EXAMPLE_REVIEW);
expect(mockReviewsService.find({ reviewId })).toBeCalled();
});
});

describe('findByShopIdWithPage', () => {
it('', () => {
try {
shopsService.findById({ shopId });
} catch (error) {
expect(error).toBeInstanceOf(Error);
throw new UnprocessableEntityException('유효하지 않은 가게ID 입니다');
}
describe('fetchReviewsByShopId', () => {
it('reivewService의 findByShopIdWithPage 메서드 실행', async () => {
const page = 1;
const count = 12;
const result = mockReviewsRepository.find({
where: { shop: { id: shopId } },
skip: (page - 1) * count,
take: count,
order: {
createdAt: 'ASC',
},
relations: ['shop', 'reservation'],
});
const count = 100;
const result = await reviewsResolver.fetchReviewsByShopId(
page,
count,
shopId,
);
return result;

expect(mockReviewsRepository.find).toBeCalled();
expect(result).toEqual(EXAMPLE_REVIEW);
expect(
mockReviewsService.findByShopIdWithPage({ page, count, reviewId }),
).toBeCalled();
});
});

describe('create', () => {
it('', async () => {});
});

describe('averageStar', () => {
it('', async () => {});
});
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;

describe('checkReviewAuth', () => {
it('', async () => {});
expect(result).toEqual(EXAMPLE_REVIEW);
expect(
mockReviewsService.create({
userId,
createReviewInput,
}),
).toBeCalled();
});
});
});
Loading