From 6b45132985c56fe2c7b1e8420bea903e2cfcbc39 Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Thu, 27 Nov 2025 19:16:41 +0900 Subject: [PATCH 01/14] =?UTF-8?q?db:=20Block=20=ED=85=8C=EC=9D=B4=EB=B8=94?= =?UTF-8?q?=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ea13c02..533c66a 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -46,6 +46,9 @@ model User { albums Album[] chatUsers ChatUser[] pushTokens PushToken[] + blockers Block[] @relation("blocker") + blockings Block[] @relation("blocking") + blocks Block[] @@unique([provider, providerId]) } @@ -62,6 +65,21 @@ model Follow { @@index([followingId]) } +// 차단 +model Block { + blockerId String @db.Uuid + blockingId String @db.Uuid + createdAt DateTime @default(now()) + + blocker User @relation("blocker", fields: [blockerId], references: [id], onDelete: Cascade) + blocked User @relation("blocking", fields: [blockingId], references: [id], onDelete: Cascade) + user User? @relation(fields: [userId], references: [id]) + userId String? @db.Uuid + + @@id([blockerId, blockingId]) + @@index([blockingId]) +} + model Feed { id String @id @default(uuid()) @db.Uuid authorId String @db.Uuid From 4e04669b18e30b365a89d2e29d71e5164c7ef8f6 Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Thu, 27 Nov 2025 23:22:58 +0900 Subject: [PATCH 02/14] dd --- prisma/schema.prisma | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 533c66a..68be5c2 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -48,7 +48,6 @@ model User { pushTokens PushToken[] blockers Block[] @relation("blocker") blockings Block[] @relation("blocking") - blocks Block[] @@unique([provider, providerId]) } @@ -71,10 +70,8 @@ model Block { blockingId String @db.Uuid createdAt DateTime @default(now()) - blocker User @relation("blocker", fields: [blockerId], references: [id], onDelete: Cascade) - blocked User @relation("blocking", fields: [blockingId], references: [id], onDelete: Cascade) - user User? @relation(fields: [userId], references: [id]) - userId String? @db.Uuid + blocker User @relation("blocker", fields: [blockerId], references: [id], onDelete: Cascade) + blocking User @relation("blocking", fields: [blockingId], references: [id], onDelete: Cascade) @@id([blockerId, blockingId]) @@index([blockingId]) From bc06cf66e20f31e3f1a0259ff5ef5fd7cf6e4b9a Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Fri, 28 Nov 2025 15:21:24 +0900 Subject: [PATCH 03/14] =?UTF-8?q?feat:=20=EC=B0=A8=EB=8B=A8/=EC=B0=A8?= =?UTF-8?q?=EB=8B=A8=ED=92=80=EA=B8=B0=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/module/user/repository/user.writer.ts | 27 ++++++++++ src/module/user/user.controller.ts | 28 ++++++++++ src/module/user/user.service.ts | 10 ++++ test/e2e/user/block.e2e-spec.ts | 64 +++++++++++++++++++++++ test/e2e/user/follow.e2e-spec.ts | 8 --- 5 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 test/e2e/user/block.e2e-spec.ts diff --git a/src/module/user/repository/user.writer.ts b/src/module/user/repository/user.writer.ts index ec7fa4b..9510e4e 100644 --- a/src/module/user/repository/user.writer.ts +++ b/src/module/user/repository/user.writer.ts @@ -68,6 +68,33 @@ export class UserWriter { } } + async createBlock(userId: string, targetUserId: string) { + try { + await this.txHost.tx.block.create({ + data: { + blockerId: userId, + blockingId: targetUserId, + }, + select: { blockingId: true }, + }); + } catch (e) { + if (e instanceof Prisma.PrismaClientKnownRequestError) { + if (convertCode(e.code) === 'UNIQUE_CONSTRAINT') return null; + } + throw e; + } + } + + async deleteBlock(userId: string, targetUserId: string) { + await this.txHost.tx.block.deleteMany({ + where: { + blockerId: userId, + blockingId: targetUserId, + }, + }); + return; + } + async increaseFollowerCount(userId: string) { return await this.txHost.tx.user.update({ where: { id: userId }, diff --git a/src/module/user/user.controller.ts b/src/module/user/user.controller.ts index c7aeb98..5aa2e97 100644 --- a/src/module/user/user.controller.ts +++ b/src/module/user/user.controller.ts @@ -189,4 +189,32 @@ export class UserController { await this.userService.unfollowTransaction(userId, targetId); return; } + + @ApiBearerAuth() + @ApiOperation({ summary: '차단' }) + @ApiResponse({ status: 204 }) + @UseGuards(JwtGuard) + @HttpCode(204) + @Put(':id/block') + async block( + @CurrentUser() userId: string, + @Param('id', ParseUUIDPipe) targetId: string, + ) { + await this.userService.block(userId, targetId); + return; + } + + @ApiBearerAuth() + @ApiOperation({ summary: '차단 풀기' }) + @ApiResponse({ status: 204 }) + @UseGuards(JwtGuard) + @HttpCode(204) + @Delete(':id/block') + async unblock( + @CurrentUser() userId: string, + @Param('id', ParseUUIDPipe) targetId: string, + ) { + await this.userService.unblock(userId, targetId); + return; + } } diff --git a/src/module/user/user.service.ts b/src/module/user/user.service.ts index cdd2487..25b7a47 100644 --- a/src/module/user/user.service.ts +++ b/src/module/user/user.service.ts @@ -136,6 +136,16 @@ export class UserService { return; } + async block(userId: string, targetUserId: string) { + await this.userWriter.createBlock(userId, targetUserId); + return; + } + + async unblock(userId: string, targetUserId: string) { + await this.userWriter.deleteBlock(userId, targetUserId); + return; + } + async getUserProfileByUrl(userId: string | null, url: string) { const targetUser = await this.userReader.findOneByUrl(url); diff --git a/test/e2e/user/block.e2e-spec.ts b/test/e2e/user/block.e2e-spec.ts new file mode 100644 index 0000000..69279be --- /dev/null +++ b/test/e2e/user/block.e2e-spec.ts @@ -0,0 +1,64 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from 'src/app.module'; +import { PrismaService } from 'src/database/prisma/prisma.service'; +import { createTestUser } from '../helper/create-test-user'; + +describe('PUT /users/:targetId/block - 유저 차단', () => { + let app: INestApplication; + let prisma: PrismaService; + + beforeAll(async () => { + const module: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = module.createNestApplication(); + prisma = module.get(PrismaService); + + await app.init(); + }); + + afterEach(async () => { + await prisma.user.deleteMany(); + await prisma.notification.deleteMany(); + }); + + afterAll(async () => { + await app.close(); + }); + + it('accessToken이 없을때 401을 반호나한다', async () => { + // when + const { status } = await request(app.getHttpServer()) + .put('/users/test/block') + .send(); + + // then + expect(status).toBe(401); + }); + + it('204와 함께 유저를 차단한다', async () => { + // given + const { accessToken, user: me } = await createTestUser(app, {}); + const { user: targetUser } = await createTestUser(app, { + name: 'targetUser', + providerId: 'test2', + url: 'test2', + }); + + // when + const { status } = await request(app.getHttpServer()) + .put(`/users/${targetUser.id}/block`) + .set('Authorization', `Bearer ${accessToken}`) + .send(); + + // then + expect(status).toBe(204); + + const blocked = await prisma.block.findFirstOrThrow(); + expect(blocked.blockerId).toBe(me.id); + expect(blocked.blockingId).toBe(targetUser.id); + }); +}); diff --git a/test/e2e/user/follow.e2e-spec.ts b/test/e2e/user/follow.e2e-spec.ts index 96096c1..4218826 100644 --- a/test/e2e/user/follow.e2e-spec.ts +++ b/test/e2e/user/follow.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /users/:targetId/follow - 팔로우', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /users/:targetId/follow - 팔로우', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); From 2bce349cbe6cbc69fa7778880853dbd11357b0a2 Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Fri, 28 Nov 2025 15:35:11 +0900 Subject: [PATCH 04/14] test: unblock e2e test --- test/e2e/user/unblock.e2e-spec.ts | 84 ++++++++++++++++++++++++++++++ test/e2e/user/unfollow.e2e-spec.ts | 10 +--- 2 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 test/e2e/user/unblock.e2e-spec.ts diff --git a/test/e2e/user/unblock.e2e-spec.ts b/test/e2e/user/unblock.e2e-spec.ts new file mode 100644 index 0000000..0f8e08b --- /dev/null +++ b/test/e2e/user/unblock.e2e-spec.ts @@ -0,0 +1,84 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from 'src/app.module'; +import { PrismaService } from 'src/database/prisma/prisma.service'; +import { createTestUser } from '../helper/create-test-user'; + +describe('DELETE /users/:targetId/block - 유저 차단 해제', () => { + let app: INestApplication; + let prisma: PrismaService; + + beforeAll(async () => { + const module: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = module.createNestApplication(); + prisma = module.get(PrismaService); + + await app.init(); + }); + + afterEach(async () => { + await prisma.user.deleteMany(); + }); + + afterAll(async () => { + await app.close(); + }); + + it('accessToken이 없을때 401을 반환한다', async () => { + // when + const { status } = await request(app.getHttpServer()) + .delete('/users/test/block') + .send(); + + // then + expect(status).toBe(401); + }); + + it('uuid형식이 아닐때 400을 반환한다', async () => { + // given + const { accessToken } = await createTestUser(app, {}); + + // when + const { status } = await request(app.getHttpServer()) + .delete('/users/123/block') + .set('Authorization', `Bearer ${accessToken}`) + .send(); + + // then + expect(status).toBe(400); + }); + + it('204와 함께 유저 차단을 해제한다', async () => { + // given + const { accessToken, user: me } = await createTestUser(app, {}); + const { user: targetUser } = await createTestUser(app, { + name: 'targetUser', + providerId: 'test2', + url: 'test2', + }); + + await prisma.block.create({ + data: { + blockerId: me.id, + blockingId: targetUser.id, + }, + }); + + // when + const { status } = await request(app.getHttpServer()) + .delete(`/users/${targetUser.id}/block`) + .set('Authorization', `Bearer ${accessToken}`) + .send(); + + // then + expect(status).toBe(204); + + const blocked = await prisma.block.findFirst(); + + expect(blocked).toBeNull(); + }); +}); diff --git a/test/e2e/user/unfollow.e2e-spec.ts b/test/e2e/user/unfollow.e2e-spec.ts index 5137b15..88f816e 100644 --- a/test/e2e/user/unfollow.e2e-spec.ts +++ b/test/e2e/user/unfollow.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /users/:targetId/follow - 언팔로우', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /users/:targetId/follow - 언팔로우', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); @@ -39,7 +31,7 @@ describe('DELETE /users/:targetId/follow - 언팔로우', () => { it('accessToken이 없을 때 401을 반환한다', async () => { // when const { status } = await request(app.getHttpServer()) - .put('/users/test/follow') + .delete('/users/test/follow') .send(); // then From 21abd0551300ca58a9da8c2df34d7aadee666e22 Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Fri, 28 Nov 2025 15:58:32 +0900 Subject: [PATCH 05/14] =?UTF-8?q?chore:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EC=97=90=EC=84=9C=20authService=20=EB=AA=A8?= =?UTF-8?q?=ED=82=B9=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/e2e/album/create-album.e2e-spec.ts | 8 ----- test/e2e/album/delete-album.e2e-spec.ts | 8 ----- test/e2e/album/insert-feeds.e2e-spec.ts | 8 ----- test/e2e/album/remove-feeds-album.e2e-spec.ts | 8 ----- test/e2e/album/update-album-order.e2e-spec.ts | 8 ----- test/e2e/album/update-album.e2e-spec.ts | 8 ----- .../create-chat-message.e2e-spec.ts | 30 ++++--------------- .../get-chat-messages.e2e-spec.ts | 8 ----- .../like-chat-message.e2e-spec.ts | 8 ----- .../unlike-chat-message.e2e-spec.ts | 8 ----- test/e2e/chat/batch-delete.e2e-spec.ts | 8 ----- test/e2e/chat/create-chat.e2e-spec.ts | 8 ----- test/e2e/chat/delete-chat.e2e-spec.ts | 8 ----- test/e2e/chat/get-chats.e2e-spec.ts | 8 ----- test/e2e/chat/get-opponent-user.e2e-spec.ts | 8 ----- test/e2e/chat/join.e2e-spec.ts | 8 ----- test/e2e/chat/leave.e2e-spec.ts | 8 ----- .../feed-comment/create-comment.e2e-spec.ts | 8 ----- test/e2e/feed-comment/delete-one.e2e-spec.ts | 8 ----- .../feed-comment-like.e2e-spec.ts | 8 ----- .../feed-comment-unlike.e2e-spec.ts | 8 ----- .../e2e/feed-comment/get-comments.e2e-spec.ts | 8 ----- test/e2e/feed/create-feed.e2e-spec.ts | 8 ----- test/e2e/feed/delete-feed.e2e-spec.ts | 8 ----- test/e2e/feed/delete-feeds.e2e-spec.ts | 8 ----- test/e2e/feed/get-detail-feed.e2e-spec.ts | 8 ----- test/e2e/feed/get-following-feeds.e2e-spec.ts | 8 ----- test/e2e/feed/get-latest-feeds.e2e-spec.ts | 8 ----- test/e2e/feed/get-like-user.e2e-spec.ts | 8 ----- test/e2e/feed/like.e2e-spec.ts | 8 ----- test/e2e/feed/save.e2e-spec.ts | 8 ----- test/e2e/feed/unlike.e2e-spec.ts | 8 ----- test/e2e/feed/unsave.e2e-spec.ts | 8 ----- test/e2e/feed/update-feed.e2e-spec.ts | 8 ----- test/e2e/feed/view.e2e-spec.ts | 8 ----- .../image/get-image-upload-url.e2e-spec.ts | 8 ----- .../image/get-image-upload-urls.e2e-spec.ts | 8 ----- test/e2e/me/delete-background.e2e-spec.ts | 8 ----- test/e2e/me/delete-image.e2e-spec.ts | 8 ----- test/e2e/me/delete-me.e2e-spec.ts | 8 ----- test/e2e/me/delete-my-follower.e2e-spec.ts | 8 ----- test/e2e/me/get-my-albums.e2e-spec.ts | 8 ----- test/e2e/me/get-my-followers.e2e-spec.ts | 8 ----- test/e2e/me/get-my-following.e2e-spec.ts | 8 ----- test/e2e/me/get-my-like-feeds.e2e-spec.ts | 8 ----- test/e2e/me/get-my-profile.e2e-spec.ts | 8 ----- test/e2e/me/get-my-save-feeds.e2e-spec.ts | 8 ----- test/e2e/me/get-my-save-posts.e2e-spec.ts | 7 ----- test/e2e/me/get-subscription.e2e-spec.ts | 8 ----- test/e2e/me/register-push-token.e2e-spec.ts | 8 ----- test/e2e/me/update-background.e2e-spec.ts | 8 ----- test/e2e/me/update-image.e2e-spec.ts | 8 ----- test/e2e/me/update-profile.e2e-spec.ts | 8 ----- test/e2e/me/update-subscription.e2e-spec.ts | 8 ----- test/e2e/notification/delete-all.e2e-spec.ts | 8 ----- test/e2e/notification/delete-one.e2e-spec.ts | 8 ----- test/e2e/notification/get-all.e2e-spec.ts | 8 ----- test/e2e/notification/read-all.e2e-spec.ts | 8 ----- test/e2e/notification/read-one.e2e-spec.ts | 8 ----- .../post-comment/create-comment.e2e-spec.ts | 8 ----- .../post-comment/delete-comment.e2e-spec.ts | 8 ----- test/e2e/post-comment/delete-like.e2e-spec.ts | 8 ----- .../e2e/post-comment/get-comments.e2e-spec.ts | 8 ----- .../post-comment-like.e2e-spec.ts | 8 ----- test/e2e/post/create-post.e2e-spec.ts | 8 ----- test/e2e/post/delete-post.e2e-spec.ts | 8 ----- test/e2e/post/get-post-detail.e2e-spec.ts | 8 ----- test/e2e/post/post-like.e2e-spec.ts | 8 ----- test/e2e/post/post-save.e2e-spec.ts | 8 ----- test/e2e/post/post-unlike.e2e-spec.ts | 8 ----- test/e2e/post/post-unsave.e2e-spec.ts | 8 ----- test/e2e/post/update-post.e2e-spec.ts | 8 ----- test/e2e/report/create-report.e2e-spec.ts | 8 ----- test/e2e/user/get-my-posts.e2e-spec.ts | 7 ----- test/e2e/user/get-popular-user.e2e-spec.ts | 10 ++----- .../user/get-user-profile-by-url.e2e-spec.ts | 8 ----- test/e2e/user/get-user-profile.e2e-spec.ts | 8 ----- test/e2e/websocket/connect.e2e-spec.ts | 8 ----- test/e2e/websocket/disconnect.e2e-spec.ts | 8 ----- 79 files changed, 7 insertions(+), 647 deletions(-) diff --git a/test/e2e/album/create-album.e2e-spec.ts b/test/e2e/album/create-album.e2e-spec.ts index fdfd3cc..e6be57a 100644 --- a/test/e2e/album/create-album.e2e-spec.ts +++ b/test/e2e/album/create-album.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('POST /albums - 앨범 생성', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('POST /albums - 앨범 생성', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/album/delete-album.e2e-spec.ts b/test/e2e/album/delete-album.e2e-spec.ts index 6b8d22b..ef217da 100644 --- a/test/e2e/album/delete-album.e2e-spec.ts +++ b/test/e2e/album/delete-album.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /albums/:id - 앨범 삭제', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /albums/:id - 앨범 삭제', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/album/insert-feeds.e2e-spec.ts b/test/e2e/album/insert-feeds.e2e-spec.ts index 498ae6c..d345b49 100644 --- a/test/e2e/album/insert-feeds.e2e-spec.ts +++ b/test/e2e/album/insert-feeds.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /albums/:id - 앨범에 피드 넣기', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /albums/:id - 앨범에 피드 넣기', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/album/remove-feeds-album.e2e-spec.ts b/test/e2e/album/remove-feeds-album.e2e-spec.ts index 4d9661e..7d462ee 100644 --- a/test/e2e/album/remove-feeds-album.e2e-spec.ts +++ b/test/e2e/album/remove-feeds-album.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /albums/null - 앨범에서 피드 빼기', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /albums/null - 앨범에서 피드 빼기', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/album/update-album-order.e2e-spec.ts b/test/e2e/album/update-album-order.e2e-spec.ts index d5afc77..c55160a 100644 --- a/test/e2e/album/update-album-order.e2e-spec.ts +++ b/test/e2e/album/update-album-order.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /albums/order - 앨범 순서 변경', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /albums/order - 앨범 순서 변경', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/album/update-album.e2e-spec.ts b/test/e2e/album/update-album.e2e-spec.ts index f88948b..579bcd7 100644 --- a/test/e2e/album/update-album.e2e-spec.ts +++ b/test/e2e/album/update-album.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PATCH /albums/:id - 앨범 수정', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PATCH /albums/:id - 앨범 수정', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/chat-message/create-chat-message.e2e-spec.ts b/test/e2e/chat-message/create-chat-message.e2e-spec.ts index 7c0e3a6..83d88f2 100644 --- a/test/e2e/chat-message/create-chat-message.e2e-spec.ts +++ b/test/e2e/chat-message/create-chat-message.e2e-spec.ts @@ -3,7 +3,6 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { sampleUuid } from '../helper/sample-uuid'; import { RedisService } from 'src/database/redis/redis.service'; import { GlobalGateway } from 'src/module/websocket/global.gateway'; @@ -15,7 +14,6 @@ import { createTestUser } from '../helper/create-test-user'; describe('POST /chat-messages - 채팅메시지 생성', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; let redisService: RedisService; let globalGateway: GlobalGateway; let socketServer: Server; @@ -27,14 +25,8 @@ describe('POST /chat-messages - 채팅메시지 생성', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); redisService = app.get(RedisService); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); - await app.init(); await app.listen(3000); @@ -381,25 +373,13 @@ describe('POST /chat-messages - 채팅메시지 생성', () => { // given const { accessToken, user: me } = await createTestUser(app, {}); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test2', - email: 'test@test.com', + const user2 = await createTestUser(app, { + providerId: 'test2', + name: 'test2', + url: 'test2', }); - const { body } = await request(app.getHttpServer()) - .post('/auth/register') - .set( - 'User-Agent', - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36', - ) - .send({ - provider: 'KAKAO', - providerAccessToken: 'test2', - name: 'test2', - url: 'test2', - }); - - const targetAccessToken = body.accessToken as string; + const targetAccessToken = user2.accessToken as string; const targetUser = await prisma.user.findUniqueOrThrow({ where: { name: 'test2' }, }); diff --git a/test/e2e/chat-message/get-chat-messages.e2e-spec.ts b/test/e2e/chat-message/get-chat-messages.e2e-spec.ts index f075a16..96a4273 100644 --- a/test/e2e/chat-message/get-chat-messages.e2e-spec.ts +++ b/test/e2e/chat-message/get-chat-messages.e2e-spec.ts @@ -3,14 +3,12 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { sampleUuid } from '../helper/sample-uuid'; import { createTestUser } from '../helper/create-test-user'; describe('GET /chat-messages?chatId - 채팅방 별 메세지 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -19,12 +17,6 @@ describe('GET /chat-messages?chatId - 채팅방 별 메세지 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/chat-message/like-chat-message.e2e-spec.ts b/test/e2e/chat-message/like-chat-message.e2e-spec.ts index 9d457a6..a8d18e5 100644 --- a/test/e2e/chat-message/like-chat-message.e2e-spec.ts +++ b/test/e2e/chat-message/like-chat-message.e2e-spec.ts @@ -3,7 +3,6 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { sampleUuid } from '../helper/sample-uuid'; import { RedisService } from 'src/database/redis/redis.service'; import { GlobalGateway } from 'src/module/websocket/global.gateway'; @@ -14,7 +13,6 @@ import { createTestUser } from '../helper/create-test-user'; describe('PUT /chat-messages/:id/like - 메시지 좋아요', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; let redisService: RedisService; let globalGateway: GlobalGateway; let socketServer: Server; @@ -26,14 +24,8 @@ describe('PUT /chat-messages/:id/like - 메시지 좋아요', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); redisService = app.get(RedisService); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); - await app.init(); await app.listen(3000); diff --git a/test/e2e/chat-message/unlike-chat-message.e2e-spec.ts b/test/e2e/chat-message/unlike-chat-message.e2e-spec.ts index b0d3523..edf0020 100644 --- a/test/e2e/chat-message/unlike-chat-message.e2e-spec.ts +++ b/test/e2e/chat-message/unlike-chat-message.e2e-spec.ts @@ -3,7 +3,6 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { sampleUuid } from '../helper/sample-uuid'; import { RedisService } from 'src/database/redis/redis.service'; import { GlobalGateway } from 'src/module/websocket/global.gateway'; @@ -14,7 +13,6 @@ import { createTestUser } from '../helper/create-test-user'; describe('DELETE /chat-messages/:id/like - 채팅 좋아요 취소', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; let redisService: RedisService; let globalGateway: GlobalGateway; let socketServer: Server; @@ -26,14 +24,8 @@ describe('DELETE /chat-messages/:id/like - 채팅 좋아요 취소', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); redisService = app.get(RedisService); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); - await app.init(); await app.listen(3000); diff --git a/test/e2e/chat/batch-delete.e2e-spec.ts b/test/e2e/chat/batch-delete.e2e-spec.ts index d999793..8a47bf2 100644 --- a/test/e2e/chat/batch-delete.e2e-spec.ts +++ b/test/e2e/chat/batch-delete.e2e-spec.ts @@ -3,7 +3,6 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { RedisService } from 'src/database/redis/redis.service'; import { GlobalGateway } from 'src/module/websocket/global.gateway'; import { Server } from 'socket.io'; @@ -13,7 +12,6 @@ import { createTestUser } from '../helper/create-test-user'; describe('POST /chats/batch-delete - 채팅방 여러개 삭제', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; let redisService: RedisService; let globalGateway: GlobalGateway; let socketServer: Server; @@ -25,14 +23,8 @@ describe('POST /chats/batch-delete - 채팅방 여러개 삭제', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); redisService = app.get(RedisService); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); - await app.init(); await app.listen(3000); diff --git a/test/e2e/chat/create-chat.e2e-spec.ts b/test/e2e/chat/create-chat.e2e-spec.ts index 1e650f2..bd643ea 100644 --- a/test/e2e/chat/create-chat.e2e-spec.ts +++ b/test/e2e/chat/create-chat.e2e-spec.ts @@ -3,14 +3,12 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { sampleUuid } from '../helper/sample-uuid'; import { createTestUser } from '../helper/create-test-user'; describe('POST /chats - 채팅방 생성', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -19,12 +17,6 @@ describe('POST /chats - 채팅방 생성', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/chat/delete-chat.e2e-spec.ts b/test/e2e/chat/delete-chat.e2e-spec.ts index 3311b66..10f08ba 100644 --- a/test/e2e/chat/delete-chat.e2e-spec.ts +++ b/test/e2e/chat/delete-chat.e2e-spec.ts @@ -3,7 +3,6 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { sampleUuid } from '../helper/sample-uuid'; import { RedisService } from 'src/database/redis/redis.service'; import { GlobalGateway } from 'src/module/websocket/global.gateway'; @@ -14,7 +13,6 @@ import { createTestUser } from '../helper/create-test-user'; describe('DELETE /chats/:id - 채팅방 삭제', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; let redisService: RedisService; let globalGateway: GlobalGateway; let socketServer: Server; @@ -26,14 +24,8 @@ describe('DELETE /chats/:id - 채팅방 삭제', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); redisService = app.get(RedisService); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); - await app.init(); await app.listen(3000); diff --git a/test/e2e/chat/get-chats.e2e-spec.ts b/test/e2e/chat/get-chats.e2e-spec.ts index d893f02..7c4b6e8 100644 --- a/test/e2e/chat/get-chats.e2e-spec.ts +++ b/test/e2e/chat/get-chats.e2e-spec.ts @@ -3,13 +3,11 @@ import { Test, TestingModule } from '@nestjs/testing'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /chats - 채팅 검색(커서, 이름, 사이즈)', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /chats - 채팅 검색(커서, 이름, 사이즈)', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/chat/get-opponent-user.e2e-spec.ts b/test/e2e/chat/get-opponent-user.e2e-spec.ts index b3ad642..5357766 100644 --- a/test/e2e/chat/get-opponent-user.e2e-spec.ts +++ b/test/e2e/chat/get-opponent-user.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /chats/:id/user - 상대유저 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /chats/:id/user - 상대유저 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/chat/join.e2e-spec.ts b/test/e2e/chat/join.e2e-spec.ts index 5a65aae..de0da41 100644 --- a/test/e2e/chat/join.e2e-spec.ts +++ b/test/e2e/chat/join.e2e-spec.ts @@ -3,7 +3,6 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { sampleUuid } from '../helper/sample-uuid'; import { RedisService } from 'src/database/redis/redis.service'; import { GlobalGateway } from 'src/module/websocket/global.gateway'; @@ -14,7 +13,6 @@ import { createTestUser } from '../helper/create-test-user'; describe('PUT chats/:id/join - 채팅방 입장', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; let redisService: RedisService; let globalGateway: GlobalGateway; let socketServer: Server; @@ -26,14 +24,8 @@ describe('PUT chats/:id/join - 채팅방 입장', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); redisService = app.get(RedisService); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); - await app.init(); await app.listen(3000); diff --git a/test/e2e/chat/leave.e2e-spec.ts b/test/e2e/chat/leave.e2e-spec.ts index 7026e4d..468b3a7 100644 --- a/test/e2e/chat/leave.e2e-spec.ts +++ b/test/e2e/chat/leave.e2e-spec.ts @@ -3,7 +3,6 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { RedisService } from 'src/database/redis/redis.service'; import { GlobalGateway } from 'src/module/websocket/global.gateway'; import { Server } from 'socket.io'; @@ -13,7 +12,6 @@ import { createTestUser } from '../helper/create-test-user'; describe('PUT /chats/:id/leave - 채팅방 나가기', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; let redisService: RedisService; let globalGateway: GlobalGateway; let socketServer: Server; @@ -25,14 +23,8 @@ describe('PUT /chats/:id/leave - 채팅방 나가기', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); redisService = app.get(RedisService); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); - await app.init(); await app.listen(3000); diff --git a/test/e2e/feed-comment/create-comment.e2e-spec.ts b/test/e2e/feed-comment/create-comment.e2e-spec.ts index 5528441..e57d5ce 100644 --- a/test/e2e/feed-comment/create-comment.e2e-spec.ts +++ b/test/e2e/feed-comment/create-comment.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('POST /feed-comments - 피드 댓글 생성', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('POST /feed-comments - 피드 댓글 생성', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed-comment/delete-one.e2e-spec.ts b/test/e2e/feed-comment/delete-one.e2e-spec.ts index f46d8ed..83b0c39 100644 --- a/test/e2e/feed-comment/delete-one.e2e-spec.ts +++ b/test/e2e/feed-comment/delete-one.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /feed-comments/:commentId', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /feed-comments/:commentId', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed-comment/feed-comment-like.e2e-spec.ts b/test/e2e/feed-comment/feed-comment-like.e2e-spec.ts index 3bd3a69..2236979 100644 --- a/test/e2e/feed-comment/feed-comment-like.e2e-spec.ts +++ b/test/e2e/feed-comment/feed-comment-like.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /feed-comments/:id/like - 피드 댓글 좋아요', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /feed-comments/:id/like - 피드 댓글 좋아요', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed-comment/feed-comment-unlike.e2e-spec.ts b/test/e2e/feed-comment/feed-comment-unlike.e2e-spec.ts index 612038d..d70ff48 100644 --- a/test/e2e/feed-comment/feed-comment-unlike.e2e-spec.ts +++ b/test/e2e/feed-comment/feed-comment-unlike.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /feed-comments/:id/unlike - 피드 댓글 좋아요 취소', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /feed-comments/:id/unlike - 피드 댓글 좋아요 취소', () app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed-comment/get-comments.e2e-spec.ts b/test/e2e/feed-comment/get-comments.e2e-spec.ts index f1744f7..cc7682f 100644 --- a/test/e2e/feed-comment/get-comments.e2e-spec.ts +++ b/test/e2e/feed-comment/get-comments.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /feed-comments?feedId={feedId} - 피드 댓글 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /feed-comments?feedId={feedId} - 피드 댓글 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/create-feed.e2e-spec.ts b/test/e2e/feed/create-feed.e2e-spec.ts index 3e442b2..8cee307 100644 --- a/test/e2e/feed/create-feed.e2e-spec.ts +++ b/test/e2e/feed/create-feed.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('POST /feeds - 피드 생성', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('POST /feeds - 피드 생성', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/delete-feed.e2e-spec.ts b/test/e2e/feed/delete-feed.e2e-spec.ts index 4a2aa26..d0fa51d 100644 --- a/test/e2e/feed/delete-feed.e2e-spec.ts +++ b/test/e2e/feed/delete-feed.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /feeds/:id - 피드 삭제', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /feeds/:id - 피드 삭제', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/delete-feeds.e2e-spec.ts b/test/e2e/feed/delete-feeds.e2e-spec.ts index 6926067..7349f1b 100644 --- a/test/e2e/feed/delete-feeds.e2e-spec.ts +++ b/test/e2e/feed/delete-feeds.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('POST /feeds/batch-delete - 피드 여러개 삭제', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('POST /feeds/batch-delete - 피드 여러개 삭제', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/get-detail-feed.e2e-spec.ts b/test/e2e/feed/get-detail-feed.e2e-spec.ts index 7aab752..3f8f50b 100644 --- a/test/e2e/feed/get-detail-feed.e2e-spec.ts +++ b/test/e2e/feed/get-detail-feed.e2e-spec.ts @@ -3,14 +3,12 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { getImageUrl } from 'src/shared/util/get-image-url'; import { createTestUser } from '../helper/create-test-user'; describe('GET /feeds/:feedId - 피드 상세', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -19,12 +17,6 @@ describe('GET /feeds/:feedId - 피드 상세', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/get-following-feeds.e2e-spec.ts b/test/e2e/feed/get-following-feeds.e2e-spec.ts index 7ef4c3e..f4f52a7 100644 --- a/test/e2e/feed/get-following-feeds.e2e-spec.ts +++ b/test/e2e/feed/get-following-feeds.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /feeds/following - 팔로잉 피드 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /feeds/following - 팔로잉 피드 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/get-latest-feeds.e2e-spec.ts b/test/e2e/feed/get-latest-feeds.e2e-spec.ts index 47026a4..1915f05 100644 --- a/test/e2e/feed/get-latest-feeds.e2e-spec.ts +++ b/test/e2e/feed/get-latest-feeds.e2e-spec.ts @@ -3,14 +3,12 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { getImageUrl } from 'src/shared/util/get-image-url'; import { createTestUser } from '../helper/create-test-user'; describe('GET /feeds/latest - 최신 피드 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -19,12 +17,6 @@ describe('GET /feeds/latest - 최신 피드 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/get-like-user.e2e-spec.ts b/test/e2e/feed/get-like-user.e2e-spec.ts index 56b27d9..045f557 100644 --- a/test/e2e/feed/get-like-user.e2e-spec.ts +++ b/test/e2e/feed/get-like-user.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /feeds/:id/like - 피드 좋아요 사용자 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /feeds/:id/like - 피드 좋아요 사용자 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/like.e2e-spec.ts b/test/e2e/feed/like.e2e-spec.ts index 8747415..153fb56 100644 --- a/test/e2e/feed/like.e2e-spec.ts +++ b/test/e2e/feed/like.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /feeds/:feedId/like - 피드 좋아요', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /feeds/:feedId/like - 피드 좋아요', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/save.e2e-spec.ts b/test/e2e/feed/save.e2e-spec.ts index 1ccb5ae..16bf389 100644 --- a/test/e2e/feed/save.e2e-spec.ts +++ b/test/e2e/feed/save.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /feeds/:id/save - 피드 저장', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /feeds/:id/save - 피드 저장', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/unlike.e2e-spec.ts b/test/e2e/feed/unlike.e2e-spec.ts index ac48a9e..fcdc354 100644 --- a/test/e2e/feed/unlike.e2e-spec.ts +++ b/test/e2e/feed/unlike.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /feeds/:feedId/like - 피드 좋아요 취소', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /feeds/:feedId/like - 피드 좋아요 취소', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/unsave.e2e-spec.ts b/test/e2e/feed/unsave.e2e-spec.ts index ecbab76..a24bb92 100644 --- a/test/e2e/feed/unsave.e2e-spec.ts +++ b/test/e2e/feed/unsave.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /feeds/:id/save - 피드 저장 취소', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /feeds/:id/save - 피드 저장 취소', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/update-feed.e2e-spec.ts b/test/e2e/feed/update-feed.e2e-spec.ts index 0cc9dbf..0b7a1cb 100644 --- a/test/e2e/feed/update-feed.e2e-spec.ts +++ b/test/e2e/feed/update-feed.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /feeds/:id', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /feeds/:id', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/feed/view.e2e-spec.ts b/test/e2e/feed/view.e2e-spec.ts index f00202c..eef9306 100644 --- a/test/e2e/feed/view.e2e-spec.ts +++ b/test/e2e/feed/view.e2e-spec.ts @@ -3,12 +3,10 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; describe('PUT /:feedId/view', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -17,12 +15,6 @@ describe('PUT /:feedId/view', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/image/get-image-upload-url.e2e-spec.ts b/test/e2e/image/get-image-upload-url.e2e-spec.ts index 62382a1..0fe6aee 100644 --- a/test/e2e/image/get-image-upload-url.e2e-spec.ts +++ b/test/e2e/image/get-image-upload-url.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('POST /images/get-upload-url - presignedURL 발급', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('POST /images/get-upload-url - presignedURL 발급', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: '1234', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/image/get-image-upload-urls.e2e-spec.ts b/test/e2e/image/get-image-upload-urls.e2e-spec.ts index d5ad571..2c8e6b7 100644 --- a/test/e2e/image/get-image-upload-urls.e2e-spec.ts +++ b/test/e2e/image/get-image-upload-urls.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('POST /images/get-upload-urls - presignedURL 여러개', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('POST /images/get-upload-urls - presignedURL 여러개', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: '1234', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/delete-background.e2e-spec.ts b/test/e2e/me/delete-background.e2e-spec.ts index fc1fd77..aab4307 100644 --- a/test/e2e/me/delete-background.e2e-spec.ts +++ b/test/e2e/me/delete-background.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /me/background - 배경사진 삭제', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /me/background - 배경사진 삭제', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/delete-image.e2e-spec.ts b/test/e2e/me/delete-image.e2e-spec.ts index 0689d5f..d5d2258 100644 --- a/test/e2e/me/delete-image.e2e-spec.ts +++ b/test/e2e/me/delete-image.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /me/image', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /me/image', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/delete-me.e2e-spec.ts b/test/e2e/me/delete-me.e2e-spec.ts index bdc22c1..57730ea 100644 --- a/test/e2e/me/delete-me.e2e-spec.ts +++ b/test/e2e/me/delete-me.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /me - 회원탈퇴', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /me - 회원탈퇴', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/delete-my-follower.e2e-spec.ts b/test/e2e/me/delete-my-follower.e2e-spec.ts index bd06ec2..c79014f 100644 --- a/test/e2e/me/delete-my-follower.e2e-spec.ts +++ b/test/e2e/me/delete-my-follower.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /me/followers/:id', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /me/followers/:id', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/get-my-albums.e2e-spec.ts b/test/e2e/me/get-my-albums.e2e-spec.ts index 94ee2f0..9b8b80f 100644 --- a/test/e2e/me/get-my-albums.e2e-spec.ts +++ b/test/e2e/me/get-my-albums.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /me/albums - 내 앨범 목록 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /me/albums - 내 앨범 목록 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/get-my-followers.e2e-spec.ts b/test/e2e/me/get-my-followers.e2e-spec.ts index eaf7dd9..75b40a9 100644 --- a/test/e2e/me/get-my-followers.e2e-spec.ts +++ b/test/e2e/me/get-my-followers.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /me/followers - 내 팔로워 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /me/followers - 내 팔로워 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/get-my-following.e2e-spec.ts b/test/e2e/me/get-my-following.e2e-spec.ts index 25cc369..ba5de8f 100644 --- a/test/e2e/me/get-my-following.e2e-spec.ts +++ b/test/e2e/me/get-my-following.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /me/followings - 내 팔로잉 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /me/followings - 내 팔로잉 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/get-my-like-feeds.e2e-spec.ts b/test/e2e/me/get-my-like-feeds.e2e-spec.ts index c17e7c9..16a2131 100644 --- a/test/e2e/me/get-my-like-feeds.e2e-spec.ts +++ b/test/e2e/me/get-my-like-feeds.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /me/like-feeds - 내가 좋아요한 그림 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /me/like-feeds - 내가 좋아요한 그림 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/get-my-profile.e2e-spec.ts b/test/e2e/me/get-my-profile.e2e-spec.ts index ac56f46..83a8cdc 100644 --- a/test/e2e/me/get-my-profile.e2e-spec.ts +++ b/test/e2e/me/get-my-profile.e2e-spec.ts @@ -3,14 +3,12 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { getImageUrl } from 'src/shared/util/get-image-url'; import { createTestUser } from '../helper/create-test-user'; describe('GET /me - 내 정보 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -19,12 +17,6 @@ describe('GET /me - 내 정보 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/get-my-save-feeds.e2e-spec.ts b/test/e2e/me/get-my-save-feeds.e2e-spec.ts index d4451ff..3d97a8a 100644 --- a/test/e2e/me/get-my-save-feeds.e2e-spec.ts +++ b/test/e2e/me/get-my-save-feeds.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /me/save-feeds - 내가 저장한 피드 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /me/save-feeds - 내가 저장한 피드 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/get-my-save-posts.e2e-spec.ts b/test/e2e/me/get-my-save-posts.e2e-spec.ts index bc3fa55..2cc6f04 100644 --- a/test/e2e/me/get-my-save-posts.e2e-spec.ts +++ b/test/e2e/me/get-my-save-posts.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /me/save-posts - 내가 저장한 게시글 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,11 +16,6 @@ describe('GET /me/save-posts - 내가 저장한 게시글 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/get-subscription.e2e-spec.ts b/test/e2e/me/get-subscription.e2e-spec.ts index 30a8696..86c8bd4 100644 --- a/test/e2e/me/get-subscription.e2e-spec.ts +++ b/test/e2e/me/get-subscription.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /me/subscribe - 구독 정보 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /me/subscribe - 구독 정보 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/register-push-token.e2e-spec.ts b/test/e2e/me/register-push-token.e2e-spec.ts index b5d0a10..17c3d4a 100644 --- a/test/e2e/me/register-push-token.e2e-spec.ts +++ b/test/e2e/me/register-push-token.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /me/push-token', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /me/push-token', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/update-background.e2e-spec.ts b/test/e2e/me/update-background.e2e-spec.ts index ebcb1aa..4a95d4b 100644 --- a/test/e2e/me/update-background.e2e-spec.ts +++ b/test/e2e/me/update-background.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /me/background', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /me/background', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/update-image.e2e-spec.ts b/test/e2e/me/update-image.e2e-spec.ts index 7882500..bc52bcd 100644 --- a/test/e2e/me/update-image.e2e-spec.ts +++ b/test/e2e/me/update-image.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /me/image - 프로필 이미지 수정', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /me/image - 프로필 이미지 수정', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/update-profile.e2e-spec.ts b/test/e2e/me/update-profile.e2e-spec.ts index 797bb26..416ceba 100644 --- a/test/e2e/me/update-profile.e2e-spec.ts +++ b/test/e2e/me/update-profile.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /me', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /me', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/me/update-subscription.e2e-spec.ts b/test/e2e/me/update-subscription.e2e-spec.ts index 8e4d42e..2837ec0 100644 --- a/test/e2e/me/update-subscription.e2e-spec.ts +++ b/test/e2e/me/update-subscription.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /me/subscribe - 구독 설정 수정', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /me/subscribe - 구독 설정 수정', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/notification/delete-all.e2e-spec.ts b/test/e2e/notification/delete-all.e2e-spec.ts index 970ed2b..a3ad9b4 100644 --- a/test/e2e/notification/delete-all.e2e-spec.ts +++ b/test/e2e/notification/delete-all.e2e-spec.ts @@ -3,14 +3,12 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { v4 as uuid } from 'uuid'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /notifications - 전체 알림 삭제', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -19,12 +17,6 @@ describe('DELETE /notifications - 전체 알림 삭제', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: '1234', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/notification/delete-one.e2e-spec.ts b/test/e2e/notification/delete-one.e2e-spec.ts index c932da0..a549562 100644 --- a/test/e2e/notification/delete-one.e2e-spec.ts +++ b/test/e2e/notification/delete-one.e2e-spec.ts @@ -3,14 +3,12 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { v4 as uuid } from 'uuid'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /notifications/:id - 개별 알림 삭제', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -19,12 +17,6 @@ describe('DELETE /notifications/:id - 개별 알림 삭제', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: '1234', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/notification/get-all.e2e-spec.ts b/test/e2e/notification/get-all.e2e-spec.ts index 3b12585..ec1c72d 100644 --- a/test/e2e/notification/get-all.e2e-spec.ts +++ b/test/e2e/notification/get-all.e2e-spec.ts @@ -3,14 +3,12 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { v4 as uuid } from 'uuid'; import { createTestUser } from '../helper/create-test-user'; describe('GET /notifications - 알림 목록 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -19,12 +17,6 @@ describe('GET /notifications - 알림 목록 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: '1234', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/notification/read-all.e2e-spec.ts b/test/e2e/notification/read-all.e2e-spec.ts index a77e441..ecb839f 100644 --- a/test/e2e/notification/read-all.e2e-spec.ts +++ b/test/e2e/notification/read-all.e2e-spec.ts @@ -3,14 +3,12 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { v4 as uuid } from 'uuid'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /notifications - 전체 알림 읽음 처리', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -19,12 +17,6 @@ describe('PUT /notifications - 전체 알림 읽음 처리', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: '1234', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/notification/read-one.e2e-spec.ts b/test/e2e/notification/read-one.e2e-spec.ts index 1978329..a7cd35f 100644 --- a/test/e2e/notification/read-one.e2e-spec.ts +++ b/test/e2e/notification/read-one.e2e-spec.ts @@ -3,14 +3,12 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { v4 as uuid } from 'uuid'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /notifications/:id - 개별 알림 읽음 처리', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -19,12 +17,6 @@ describe('PUT /notifications/:id - 개별 알림 읽음 처리', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: '1234', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post-comment/create-comment.e2e-spec.ts b/test/e2e/post-comment/create-comment.e2e-spec.ts index f46245c..9dd5ecc 100644 --- a/test/e2e/post-comment/create-comment.e2e-spec.ts +++ b/test/e2e/post-comment/create-comment.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('POST /post-comments - 게시글 댓글 생성', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('POST /post-comments - 게시글 댓글 생성', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post-comment/delete-comment.e2e-spec.ts b/test/e2e/post-comment/delete-comment.e2e-spec.ts index ed8ad15..b6cc699 100644 --- a/test/e2e/post-comment/delete-comment.e2e-spec.ts +++ b/test/e2e/post-comment/delete-comment.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /post-comments/:id - 게시판 댓글 삭제', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /post-comments/:id - 게시판 댓글 삭제', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post-comment/delete-like.e2e-spec.ts b/test/e2e/post-comment/delete-like.e2e-spec.ts index 05fddd1..2c4ecb4 100644 --- a/test/e2e/post-comment/delete-like.e2e-spec.ts +++ b/test/e2e/post-comment/delete-like.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /post-comments/:id/like - 게시판 댓글 좋아요 취소', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /post-comments/:id/like - 게시판 댓글 좋아요 취소', ( app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post-comment/get-comments.e2e-spec.ts b/test/e2e/post-comment/get-comments.e2e-spec.ts index 02d8a75..6c2ac56 100644 --- a/test/e2e/post-comment/get-comments.e2e-spec.ts +++ b/test/e2e/post-comment/get-comments.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /post-comments?postId={postId} - 게시판 댓글 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /post-comments?postId={postId} - 게시판 댓글 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post-comment/post-comment-like.e2e-spec.ts b/test/e2e/post-comment/post-comment-like.e2e-spec.ts index ee776be..6310758 100644 --- a/test/e2e/post-comment/post-comment-like.e2e-spec.ts +++ b/test/e2e/post-comment/post-comment-like.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /post-comments/:id/like - 게시판 댓글 좋아요', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /post-comments/:id/like - 게시판 댓글 좋아요', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post/create-post.e2e-spec.ts b/test/e2e/post/create-post.e2e-spec.ts index 76a5e80..f2af60b 100644 --- a/test/e2e/post/create-post.e2e-spec.ts +++ b/test/e2e/post/create-post.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('POST /posts - 게시글 생성', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('POST /posts - 게시글 생성', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post/delete-post.e2e-spec.ts b/test/e2e/post/delete-post.e2e-spec.ts index cc98fd1..15f30fa 100644 --- a/test/e2e/post/delete-post.e2e-spec.ts +++ b/test/e2e/post/delete-post.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /posts/:id - 게시글 삭제', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /posts/:id - 게시글 삭제', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post/get-post-detail.e2e-spec.ts b/test/e2e/post/get-post-detail.e2e-spec.ts index ea73609..885565c 100644 --- a/test/e2e/post/get-post-detail.e2e-spec.ts +++ b/test/e2e/post/get-post-detail.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /posts/:id - 게시글 상세 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /posts/:id - 게시글 상세 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post/post-like.e2e-spec.ts b/test/e2e/post/post-like.e2e-spec.ts index 6daaff3..f2a67d4 100644 --- a/test/e2e/post/post-like.e2e-spec.ts +++ b/test/e2e/post/post-like.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /posts/:id/like - 게시글 좋아요', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /posts/:id/like - 게시글 좋아요', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post/post-save.e2e-spec.ts b/test/e2e/post/post-save.e2e-spec.ts index 12a9002..ef48de5 100644 --- a/test/e2e/post/post-save.e2e-spec.ts +++ b/test/e2e/post/post-save.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /posts/:id/save - 게시글 저장', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /posts/:id/save - 게시글 저장', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post/post-unlike.e2e-spec.ts b/test/e2e/post/post-unlike.e2e-spec.ts index eeca5d0..ee67c1c 100644 --- a/test/e2e/post/post-unlike.e2e-spec.ts +++ b/test/e2e/post/post-unlike.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /posts/:id/like - 게시글 좋아요 취소', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /posts/:id/like - 게시글 좋아요 취소', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post/post-unsave.e2e-spec.ts b/test/e2e/post/post-unsave.e2e-spec.ts index 8333412..6d7c678 100644 --- a/test/e2e/post/post-unsave.e2e-spec.ts +++ b/test/e2e/post/post-unsave.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('DELETE /posts/:id/save - 게시글 저장 취소', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('DELETE /posts/:id/save - 게시글 저장 취소', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/post/update-post.e2e-spec.ts b/test/e2e/post/update-post.e2e-spec.ts index f6cf204..1fcc165 100644 --- a/test/e2e/post/update-post.e2e-spec.ts +++ b/test/e2e/post/update-post.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('PUT /posts/:id - 게시글 수정', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('PUT /posts/:id - 게시글 수정', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/report/create-report.e2e-spec.ts b/test/e2e/report/create-report.e2e-spec.ts index 8817f95..1ada7f7 100644 --- a/test/e2e/report/create-report.e2e-spec.ts +++ b/test/e2e/report/create-report.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('POST /reports - 신고하기', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('POST /reports - 신고하기', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/user/get-my-posts.e2e-spec.ts b/test/e2e/user/get-my-posts.e2e-spec.ts index 05d8ace..04cc10d 100644 --- a/test/e2e/user/get-my-posts.e2e-spec.ts +++ b/test/e2e/user/get-my-posts.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /users/:id/posts - 사용자의 게시글 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,11 +16,6 @@ describe('GET /users/:id/posts - 사용자의 게시글 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/user/get-popular-user.e2e-spec.ts b/test/e2e/user/get-popular-user.e2e-spec.ts index c51ac85..03384a3 100644 --- a/test/e2e/user/get-popular-user.e2e-spec.ts +++ b/test/e2e/user/get-popular-user.e2e-spec.ts @@ -3,7 +3,6 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { UserService } from 'src/module/user/user.service'; import { RedisService } from 'src/database/redis/redis.service'; import { createTestUser } from '../helper/create-test-user'; @@ -11,7 +10,7 @@ import { createTestUser } from '../helper/create-test-user'; describe('GET /users/popular - 인기 유저 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; + let userService: UserService; let redis: RedisService; @@ -22,15 +21,10 @@ describe('GET /users/popular - 인기 유저 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); + userService = module.get(UserService); redis = module.get(RedisService); - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); - await app.init(); }); diff --git a/test/e2e/user/get-user-profile-by-url.e2e-spec.ts b/test/e2e/user/get-user-profile-by-url.e2e-spec.ts index 2bbaaa6..d4e5376 100644 --- a/test/e2e/user/get-user-profile-by-url.e2e-spec.ts +++ b/test/e2e/user/get-user-profile-by-url.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /users/profile/:url - url로 프로필 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /users/profile/:url - url로 프로필 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/user/get-user-profile.e2e-spec.ts b/test/e2e/user/get-user-profile.e2e-spec.ts index 5bacb2b..4a656fe 100644 --- a/test/e2e/user/get-user-profile.e2e-spec.ts +++ b/test/e2e/user/get-user-profile.e2e-spec.ts @@ -3,13 +3,11 @@ import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GET /users/:id - 유저 프로필 조회', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -18,12 +16,6 @@ describe('GET /users/:id - 유저 프로필 조회', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); await app.init(); }); diff --git a/test/e2e/websocket/connect.e2e-spec.ts b/test/e2e/websocket/connect.e2e-spec.ts index 38c3c17..3ab1381 100644 --- a/test/e2e/websocket/connect.e2e-spec.ts +++ b/test/e2e/websocket/connect.e2e-spec.ts @@ -4,13 +4,11 @@ import { AppModule } from 'src/app.module'; import { Socket as ClientSocket, io } from 'socket.io-client'; import { PrismaService } from 'src/database/prisma/prisma.service'; import { RedisService } from 'src/database/redis/redis.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GlobalGateway connect', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; let redisService: RedisService; beforeAll(async () => { @@ -25,12 +23,6 @@ describe('GlobalGateway connect', () => { prisma = app.get(PrismaService); redisService = app.get(RedisService); - authService = app.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); }); afterAll(async () => { diff --git a/test/e2e/websocket/disconnect.e2e-spec.ts b/test/e2e/websocket/disconnect.e2e-spec.ts index 84c900d..03310d9 100644 --- a/test/e2e/websocket/disconnect.e2e-spec.ts +++ b/test/e2e/websocket/disconnect.e2e-spec.ts @@ -4,13 +4,11 @@ import { AppModule } from 'src/app.module'; import { Socket as ClientSocket, io } from 'socket.io-client'; import { PrismaService } from 'src/database/prisma/prisma.service'; import { RedisService } from 'src/database/redis/redis.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { createTestUser } from '../helper/create-test-user'; describe('GlobalGateway disconnect', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; let redisService: RedisService; beforeAll(async () => { @@ -25,12 +23,6 @@ describe('GlobalGateway disconnect', () => { prisma = app.get(PrismaService); redisService = app.get(RedisService); - authService = app.get(AuthService); - - jest.spyOn(authService, 'getKakaoProfile').mockResolvedValue({ - kakaoId: 'test', - email: 'test@test.com', - }); }); afterAll(async () => { From 90dac3e23a7fd8c0a31372d3c97a01bf5fe23844 Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Fri, 28 Nov 2025 16:24:38 +0900 Subject: [PATCH 06/14] =?UTF-8?q?chore:=20unit=20test=EC=97=90=EC=84=9C?= =?UTF-8?q?=EB=8F=84=20=EB=B9=BC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/unit/notification/notification.listener.spec.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/unit/notification/notification.listener.spec.ts b/test/unit/notification/notification.listener.spec.ts index e823e96..18fbedd 100644 --- a/test/unit/notification/notification.listener.spec.ts +++ b/test/unit/notification/notification.listener.spec.ts @@ -3,7 +3,6 @@ import { INestApplication } from '@nestjs/common'; import { NotificationListener } from 'src/module/notification/notification.listener'; import { AppModule } from 'src/app.module'; import { PrismaService } from 'src/database/prisma/prisma.service'; -import { AuthService } from 'src/module/auth/auth.service'; import { RedisService } from 'src/database/redis/redis.service'; import { GlobalGateway } from 'src/module/websocket/global.gateway'; import { Server } from 'socket.io'; @@ -11,7 +10,6 @@ import { Server } from 'socket.io'; describe('NotificationListener', () => { let app: INestApplication; let prisma: PrismaService; - let authService: AuthService; let redisService: RedisService; let globalGateway: GlobalGateway; let socketServer: Server; @@ -24,7 +22,6 @@ describe('NotificationListener', () => { app = module.createNestApplication(); prisma = module.get(PrismaService); - authService = module.get(AuthService); redisService = app.get(RedisService); notificationListener = module.get(NotificationListener); From a5be8cbea56c6896677c41c9497734f4fcca7fdb Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Sat, 29 Nov 2025 17:12:27 +0900 Subject: [PATCH 07/14] =?UTF-8?q?feat:=20=EB=82=B4=EA=B0=80=20=EB=B8=94?= =?UTF-8?q?=EB=9D=BD=ED=95=9C=20=EC=9C=A0=EC=A0=80=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 4 +- .../feed-comment/dto/feed-comment.response.ts | 2 +- src/module/feed/dto/feed.response.ts | 2 +- .../post-comment/dto/post-comment.response.ts | 2 +- src/module/post/dto/post.response.ts | 2 +- src/module/user/dto/index.ts | 2 + src/module/user/dto/user.dto.response.ts | 19 ++++ src/module/user/dto/user.response.ts | 25 ++---- src/module/user/me.controller.ts | 10 +++ src/module/user/repository/user.reader.ts | 11 +++ src/module/user/user.service.ts | 10 +++ test/e2e/me/get-my-blockings.e2e-spec.ts | 88 +++++++++++++++++++ 12 files changed, 152 insertions(+), 25 deletions(-) create mode 100644 src/module/user/dto/user.dto.response.ts create mode 100644 test/e2e/me/get-my-blockings.e2e-spec.ts diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 68be5c2..b4c771e 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -73,8 +73,8 @@ model Block { blocker User @relation("blocker", fields: [blockerId], references: [id], onDelete: Cascade) blocking User @relation("blocking", fields: [blockingId], references: [id], onDelete: Cascade) - @@id([blockerId, blockingId]) - @@index([blockingId]) + @@id([blockingId, blockerId]) + @@index([blockerId, createdAt(sort: Desc)]) } model Feed { diff --git a/src/module/feed-comment/dto/feed-comment.response.ts b/src/module/feed-comment/dto/feed-comment.response.ts index 4e5c6d7..13e2783 100644 --- a/src/module/feed-comment/dto/feed-comment.response.ts +++ b/src/module/feed-comment/dto/feed-comment.response.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { UserBaseResponse } from '../../user/dto/user.response'; +import { UserBaseResponse } from '../../user/dto/user.dto.response'; export class FeedCommentBaseResponse { @ApiProperty() diff --git a/src/module/feed/dto/feed.response.ts b/src/module/feed/dto/feed.response.ts index 1bbcccd..dd4df6b 100644 --- a/src/module/feed/dto/feed.response.ts +++ b/src/module/feed/dto/feed.response.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { UserBaseResponse } from '../../user/dto/user.response'; +import { UserBaseResponse } from '../../user/dto/user.dto.response'; import { CursorAndCountResponse, CursorResponse, diff --git a/src/module/post-comment/dto/post-comment.response.ts b/src/module/post-comment/dto/post-comment.response.ts index 45d88d6..bbd890e 100644 --- a/src/module/post-comment/dto/post-comment.response.ts +++ b/src/module/post-comment/dto/post-comment.response.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { UserBaseResponse } from '../../user/dto/user.response'; +import { UserBaseResponse } from '../../user/dto/user.dto.response'; export class PostCommentBaseResponse { @ApiProperty() diff --git a/src/module/post/dto/post.response.ts b/src/module/post/dto/post.response.ts index 2df0b18..2ab2b0b 100644 --- a/src/module/post/dto/post.response.ts +++ b/src/module/post/dto/post.response.ts @@ -1,5 +1,5 @@ import { ApiProperty } from '@nestjs/swagger'; -import { UserBaseResponse } from '../../user/dto/user.response'; +import { UserBaseResponse } from '../../user/dto'; import { TotalCountResponse } from '../../../shared/response/total-count.response'; import { postTypes } from '../../../common/constants/post.constant'; diff --git a/src/module/user/dto/index.ts b/src/module/user/dto/index.ts index 61c1f06..4c4d935 100644 --- a/src/module/user/dto/index.ts +++ b/src/module/user/dto/index.ts @@ -1,2 +1,4 @@ +export * from './user.dto.response'; + export * from './user.request'; export * from './user.response'; diff --git a/src/module/user/dto/user.dto.response.ts b/src/module/user/dto/user.dto.response.ts new file mode 100644 index 0000000..029c8ce --- /dev/null +++ b/src/module/user/dto/user.dto.response.ts @@ -0,0 +1,19 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class UserBaseResponse { + @ApiProperty() + id: string; + + @ApiProperty() + name: string; + + @ApiProperty({ + example: 'profile/{UUID}.jpg', + nullable: true, + type: 'string', + }) + image: string | null; + + @ApiProperty({ description: '라우팅용 url' }) + url: string; +} diff --git a/src/module/user/dto/user.response.ts b/src/module/user/dto/user.response.ts index ae962a1..d7996b1 100644 --- a/src/module/user/dto/user.response.ts +++ b/src/module/user/dto/user.response.ts @@ -6,25 +6,7 @@ import { } from '../../../shared/response/cursor.response'; import { ConflictResponse } from '../../../shared/response/conflict.response'; import { AlbumBaseResponse } from '../../album/dto/album.response'; - -// 최소단위 User -export class UserBaseResponse { - @ApiProperty() - id: string; - - @ApiProperty() - name: string; - - @ApiProperty({ - example: 'profile/{UUID}.jpg', - nullable: true, - type: 'string', - }) - image: string | null; - - @ApiProperty({ description: '라우팅용 url' }) - url: string; -} +import { UserBaseResponse } from './user.dto.response'; export class LinkResponse { @ApiProperty({ example: '인스타그램' }) @@ -100,6 +82,11 @@ export class MyFollowingsResponse extends CursorResponse { followings: FollowUserResponse[]; } +export class MyBlockingsResponse { + @ApiProperty({ type: UserBaseResponse, isArray: true }) + users: UserBaseResponse[]; +} + export class SearchedUserResponse extends UserBaseResponse { @ApiProperty({ description: 'not null인데 공백은 허용' }) description: string; diff --git a/src/module/user/me.controller.ts b/src/module/user/me.controller.ts index 40b6350..e09afd6 100644 --- a/src/module/user/me.controller.ts +++ b/src/module/user/me.controller.ts @@ -36,6 +36,7 @@ import { SubscriptionResponse, MyFollowersResponse, MyFollowingsResponse, + MyBlockingsResponse, } from './dto/user.response'; import { MyLikeFeedsResponse } from '../feed/dto/feed.response'; import { MySavePostsResponse } from '../post/dto/post.response'; @@ -186,6 +187,15 @@ export class MeController { }); } + @ApiOperation({ summary: '내가 블락한 유저 조회' }) + @ApiResponse({ status: 200, type: MyBlockingsResponse }) + @Get('blockings') + async getMyBlockings( + @CurrentUser() userId: string, + ): Promise { + return await this.userService.getMyBlockings(userId); + } + @ApiOperation({ summary: '내 팔로워 삭제' }) @ApiResponse({ status: 204 }) @ApiResponse({ status: 404, description: '팔로우하지 않은 유저' }) diff --git a/src/module/user/repository/user.reader.ts b/src/module/user/repository/user.reader.ts index b46a52f..346e13d 100644 --- a/src/module/user/repository/user.reader.ts +++ b/src/module/user/repository/user.reader.ts @@ -251,6 +251,17 @@ export class UserReader { }; } + async findMyBlockings(userId: string) { + const users = await this.txHost.tx.$kysely + .selectFrom('Block') + .where('blockerId', '=', kyselyUuid(userId)) + .innerJoin('User', 'blockingId', 'id') + .select(['id', 'name', 'User.image', 'url']) + .orderBy('Block.createdAt', 'desc') + .execute(); + return users; + } + async findPopularUserIds() { const users = await this.txHost.tx.user.findMany({ select: { diff --git a/src/module/user/user.service.ts b/src/module/user/user.service.ts index 25b7a47..5fd96ea 100644 --- a/src/module/user/user.service.ts +++ b/src/module/user/user.service.ts @@ -236,6 +236,16 @@ export class UserService { }; } + async getMyBlockings(userId: string) { + const users = await this.userReader.findMyBlockings(userId); + return { + users: users.map((user) => ({ + ...user, + image: getImageUrl(user.image), + })), + }; + } + async getFeedsByUser(input: GetFeedsInput) { const result = await this.feedReader.findManyByUserIdWithCursor(input); diff --git a/test/e2e/me/get-my-blockings.e2e-spec.ts b/test/e2e/me/get-my-blockings.e2e-spec.ts new file mode 100644 index 0000000..c52c02c --- /dev/null +++ b/test/e2e/me/get-my-blockings.e2e-spec.ts @@ -0,0 +1,88 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from 'src/app.module'; +import { PrismaService } from 'src/database/prisma/prisma.service'; +import { createTestUser } from '../helper/create-test-user'; + +describe('GET /me/blockings - 내가 블락한 유저 조회', () => { + let app: INestApplication; + let prisma: PrismaService; + + beforeAll(async () => { + const module: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = module.createNestApplication(); + prisma = module.get(PrismaService); + + await app.init(); + }); + + afterEach(async () => { + await prisma.user.deleteMany(); + }); + + afterAll(async () => { + await app.close(); + }); + + it('accessToken이 없으면 401을 반환한다', async () => { + // when + const { status } = await request(app.getHttpServer()) + .get('/me/blockings') + .send(); + + // then + expect(status).toBe(401); + }); + + it('200과 함께 내가 블락한 유저 목록을 반환한다', async () => { + // given + const { accessToken, user } = await createTestUser(app, {}); + + const blockedUsers = await prisma.user.createManyAndReturn({ + data: [ + { + provider: 'KAKAO', + providerId: 'blocked1', + email: 'test@test.com', + name: 'blocked1', + url: 'blocked1', + }, + { + provider: 'KAKAO', + providerId: 'blocked2', + email: 'test@test.com', + name: 'blocked2', + url: 'blocked2', + }, + ], + }); + + await prisma.block.createMany({ + data: blockedUsers.map((blockedUser, i) => ({ + blockerId: user.id, + blockingId: blockedUser.id, + createdAt: new Date(Date.now() + i), + })), + }); + + // when + const { status, body } = await request(app.getHttpServer()) + .get('/me/blockings') + .set('Authorization', `Bearer ${accessToken}`) + .send(); + + // then + expect(status).toBe(200); + expect(body.users).toHaveLength(2); + expect(body.users).toEqual( + expect.arrayContaining([ + expect.objectContaining({ id: blockedUsers[1].id }), + expect.objectContaining({ id: blockedUsers[0].id }), + ]), + ); + }); +}); From f9db098860ba6d426908b5520d727936583da3eb Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Sat, 29 Nov 2025 17:13:19 +0900 Subject: [PATCH 08/14] db: block table migration --- .../20251129081252_add_block/migration.sql | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 prisma/migrations/20251129081252_add_block/migration.sql diff --git a/prisma/migrations/20251129081252_add_block/migration.sql b/prisma/migrations/20251129081252_add_block/migration.sql new file mode 100644 index 0000000..80cb4ce --- /dev/null +++ b/prisma/migrations/20251129081252_add_block/migration.sql @@ -0,0 +1,17 @@ +-- CreateTable +CREATE TABLE "Block" ( + "blockerId" UUID NOT NULL, + "blockingId" UUID NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Block_pkey" PRIMARY KEY ("blockingId","blockerId") +); + +-- CreateIndex +CREATE INDEX "Block_blockerId_createdAt_idx" ON "Block"("blockerId", "createdAt" DESC); + +-- AddForeignKey +ALTER TABLE "Block" ADD CONSTRAINT "Block_blockerId_fkey" FOREIGN KEY ("blockerId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Block" ADD CONSTRAINT "Block_blockingId_fkey" FOREIGN KEY ("blockingId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; From 1d65aff73ca6120ddf17e012c06afadc9d9feba6 Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Sat, 29 Nov 2025 17:29:06 +0900 Subject: [PATCH 09/14] =?UTF-8?q?feat:=20=EC=B0=A8=EB=8B=A8=ED=96=88?= =?UTF-8?q?=EC=9D=84=EB=95=8C=20=ED=8C=94=EB=A1=9C=EC=9A=B0=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/module/user/repository/user.writer.ts | 18 ++++++++++++++++++ src/module/user/user.service.ts | 2 ++ test/e2e/user/block.e2e-spec.ts | 11 ++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/module/user/repository/user.writer.ts b/src/module/user/repository/user.writer.ts index 9510e4e..350e0f2 100644 --- a/src/module/user/repository/user.writer.ts +++ b/src/module/user/repository/user.writer.ts @@ -85,6 +85,24 @@ export class UserWriter { } } + async deleteFollowerAndFollowing(userId: string, targetUserId: string) { + await this.txHost.tx.follow.deleteMany({ + where: { + OR: [ + { + followerId: userId, + followingId: targetUserId, + }, + { + followerId: targetUserId, + followingId: userId, + }, + ], + }, + }); + return; + } + async deleteBlock(userId: string, targetUserId: string) { await this.txHost.tx.block.deleteMany({ where: { diff --git a/src/module/user/user.service.ts b/src/module/user/user.service.ts index 5fd96ea..89a9799 100644 --- a/src/module/user/user.service.ts +++ b/src/module/user/user.service.ts @@ -136,8 +136,10 @@ export class UserService { return; } + @Transactional() async block(userId: string, targetUserId: string) { await this.userWriter.createBlock(userId, targetUserId); + await this.userWriter.deleteFollowerAndFollowing(userId, targetUserId); return; } diff --git a/test/e2e/user/block.e2e-spec.ts b/test/e2e/user/block.e2e-spec.ts index 69279be..a2ce2c1 100644 --- a/test/e2e/user/block.e2e-spec.ts +++ b/test/e2e/user/block.e2e-spec.ts @@ -39,7 +39,7 @@ describe('PUT /users/:targetId/block - 유저 차단', () => { expect(status).toBe(401); }); - it('204와 함께 유저를 차단한다', async () => { + it('204와 함께 유저를 차단하고 팔로우정보를 삭제한다', async () => { // given const { accessToken, user: me } = await createTestUser(app, {}); const { user: targetUser } = await createTestUser(app, { @@ -48,6 +48,13 @@ describe('PUT /users/:targetId/block - 유저 차단', () => { url: 'test2', }); + await prisma.follow.createMany({ + data: [ + { followerId: me.id, followingId: targetUser.id }, + { followerId: targetUser.id, followingId: me.id }, + ], + }); + // when const { status } = await request(app.getHttpServer()) .put(`/users/${targetUser.id}/block`) @@ -60,5 +67,7 @@ describe('PUT /users/:targetId/block - 유저 차단', () => { const blocked = await prisma.block.findFirstOrThrow(); expect(blocked.blockerId).toBe(me.id); expect(blocked.blockingId).toBe(targetUser.id); + const followCount = await prisma.follow.count(); + expect(followCount).toBe(0); }); }); From 79992f474fc0838580be720324edbf9502230993 Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Sat, 29 Nov 2025 17:47:57 +0900 Subject: [PATCH 10/14] =?UTF-8?q?feat:=20=EB=82=B4=EA=B0=80=20=EC=B0=A8?= =?UTF-8?q?=EB=8B=A8=ED=95=9C=20=EC=9C=A0=EC=A0=80=EB=A9=B4=20=EC=B1=84?= =?UTF-8?q?=ED=8C=85=EB=B0=A9=20=EC=83=81=EB=8C=80=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EB=95=8C=20isBlocked=20true=20=EC=A3=BC?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/module/chat/chat.controller.ts | 6 +-- src/module/chat/chat.service.ts | 8 +++- src/module/chat/repository/chat.reader.ts | 34 ++++++++++++++ src/module/user/dto/user.dto.response.ts | 5 +++ test/e2e/chat/get-opponent-user.e2e-spec.ts | 50 +++++++++++++++++++++ 5 files changed, 98 insertions(+), 5 deletions(-) diff --git a/src/module/chat/chat.controller.ts b/src/module/chat/chat.controller.ts index 625adbe..eb8cf64 100644 --- a/src/module/chat/chat.controller.ts +++ b/src/module/chat/chat.controller.ts @@ -29,7 +29,7 @@ import { CurrentUser } from 'src/core/decorator'; import { ChatService } from './chat.service'; import { IdResponse } from 'src/shared/response'; import { ChatsResponse } from './dto/chat.response'; -import { UserBaseResponse } from '../user/dto'; +import { UserBaseResponse, UserBaseWithBlockedResponse } from '../user/dto'; @ApiTags('/chats') @ApiBearerAuth() @@ -93,12 +93,12 @@ export class ChatController { } @ApiOperation({ summary: '상대 유저 조회' }) - @ApiResponse({ status: 200, type: UserBaseResponse }) + @ApiResponse({ status: 200, type: UserBaseWithBlockedResponse }) @Get(':id/user') async getOpponentUser( @CurrentUser() userId: string, @Param('id', new ParseUUIDPipe()) chatId: string, - ) { + ): Promise { return await this.chatService.getOpponentUser(userId, chatId); } diff --git a/src/module/chat/chat.service.ts b/src/module/chat/chat.service.ts index 2b2549c..630c929 100644 --- a/src/module/chat/chat.service.ts +++ b/src/module/chat/chat.service.ts @@ -135,9 +135,13 @@ export class ChatService { } async getOpponentUser(userId: string, chatId: string) { - const chatUsers = await this.chatReader.findUsersByChatId(chatId); + const opponentUser = await this.chatReader.findOpponentUserByChatId( + userId, + chatId, + ); + + if (!opponentUser) throw new HttpException('CHAT', 404); - const opponentUser = chatUsers.filter((user) => user.id !== userId)[0]; return { ...opponentUser, image: getImageUrl(opponentUser.image), diff --git a/src/module/chat/repository/chat.reader.ts b/src/module/chat/repository/chat.reader.ts index 2f34e64..d5481a2 100644 --- a/src/module/chat/repository/chat.reader.ts +++ b/src/module/chat/repository/chat.reader.ts @@ -81,6 +81,40 @@ export class ChatReader { })); } + async findOpponentUserByChatId(userId: string, chatId: string) { + const result = await this.txHost.tx.$kysely + .selectFrom('ChatUser') + .where('ChatUser.chatId', '=', kyselyUuid(chatId)) + .where('ChatUser.userId', '!=', kyselyUuid(userId)) + .innerJoin('User', 'ChatUser.userId', 'User.id') + .select([ + 'User.id as id', + 'User.name as name', + 'User.image as image', + 'User.url as url', + ]) + .select((eb) => + eb + .fn('EXISTS', [ + eb + .selectFrom('Block') + .where('Block.blockerId', '=', kyselyUuid(userId)) + .whereRef('Block.blockingId', '=', 'User.id'), + ]) + .as('isBlocked'), + ) + .executeTakeFirst(); + + if (!result) return null; + return { + id: result.id, + name: result.name, + image: result.image, + url: result.url, + isBlocked: result.isBlocked, + }; + } + async findMessageById(id: string) { return await this.txHost.tx.chatMessage.findUnique({ where: { id }, diff --git a/src/module/user/dto/user.dto.response.ts b/src/module/user/dto/user.dto.response.ts index 029c8ce..774e14e 100644 --- a/src/module/user/dto/user.dto.response.ts +++ b/src/module/user/dto/user.dto.response.ts @@ -17,3 +17,8 @@ export class UserBaseResponse { @ApiProperty({ description: '라우팅용 url' }) url: string; } + +export class UserBaseWithBlockedResponse extends UserBaseResponse { + @ApiProperty({ description: '차단 여부' }) + isBlocked: boolean; +} diff --git a/test/e2e/chat/get-opponent-user.e2e-spec.ts b/test/e2e/chat/get-opponent-user.e2e-spec.ts index 5357766..fa7a600 100644 --- a/test/e2e/chat/get-opponent-user.e2e-spec.ts +++ b/test/e2e/chat/get-opponent-user.e2e-spec.ts @@ -95,5 +95,55 @@ describe('GET /chats/:id/user - 상대유저 조회', () => { expect(body.url).toBe(targetUser.url); expect(body.image).toBeNull(); expect(body.name).toBe(targetUser.name); + expect(body.isBlocked).toBe(false); + }); + + it('내가 차단한 유저면 isBlocked가 true로 온다', async () => { + // given + const { accessToken, user: me } = await createTestUser(app, {}); + const targetUser = await prisma.user.create({ + data: { + provider: 'kakao', + email: 'test@test.com', + providerId: 'test2', + name: 'test2', + url: 'test2', + }, + }); + + const chat = await prisma.chat.create({ + data: { + users: { + createMany: { + data: [ + { + userId: me.id, + }, + { + userId: targetUser.id, + }, + ], + }, + }, + }, + }); + + await prisma.block.create({ + data: { + blockerId: me.id, + blockingId: targetUser.id, + }, + }); + + // when + const { status, body } = await request(app.getHttpServer()) + .get(`/chats/${chat.id}/user`) + .set('Authorization', `Bearer ${accessToken}`) + .send(); + + // then + expect(status).toBe(200); + expect(body.id).toBe(targetUser.id); + expect(body.isBlocked).toBe(true); }); }); From b8ca0d5b7eaf6477c0d645af234b1e15ab2d059d Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Sat, 29 Nov 2025 18:01:28 +0900 Subject: [PATCH 11/14] =?UTF-8?q?feat:=20=EB=82=B4=EA=B0=80=20=EC=B0=A8?= =?UTF-8?q?=EB=8B=A8=ED=95=9C=20=EC=9C=A0=EC=A0=80=EA=B0=80=20=EC=9E=88?= =?UTF-8?q?=EC=9C=BC=EB=A9=B4=20=EC=95=88=EB=B3=B4=EC=97=AC=EC=A4=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/module/feed/feed.module.ts | 5 +-- src/module/feed/feed.service.ts | 7 ++++ src/module/feed/repository/feed.reader.ts | 13 ++++++- src/module/user/repository/user.reader.ts | 8 +++++ test/e2e/feed/get-latest-feeds.e2e-spec.ts | 40 ++++++++++++++++++++++ 5 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/module/feed/feed.module.ts b/src/module/feed/feed.module.ts index 831446f..87e8207 100644 --- a/src/module/feed/feed.module.ts +++ b/src/module/feed/feed.module.ts @@ -1,4 +1,4 @@ -import { Module } from '@nestjs/common'; +import { Module, forwardRef } from '@nestjs/common'; import { FeedController } from './feed.controller'; import { FeedService } from './feed.service'; import { FeedWriter } from './repository/feed.writer'; @@ -7,9 +7,10 @@ import { SearchModule } from 'src/database/search/search.module'; import { DdbModule } from 'src/database/ddb/ddb.module'; import { RedisModule } from 'src/database/redis/redis.module'; import { TagController } from './tag.controller'; +import { UserModule } from '../user/user.module'; @Module({ - imports: [SearchModule, DdbModule, RedisModule], + imports: [SearchModule, DdbModule, RedisModule, forwardRef(() => UserModule)], controllers: [FeedController, TagController], providers: [FeedService, FeedReader, FeedWriter], exports: [FeedReader, FeedWriter], diff --git a/src/module/feed/feed.service.ts b/src/module/feed/feed.service.ts index aaae532..3bb14c8 100644 --- a/src/module/feed/feed.service.ts +++ b/src/module/feed/feed.service.ts @@ -7,6 +7,7 @@ import { RedisService } from 'src/database/redis/redis.service'; import { getImageUrl } from 'src/shared/util/get-image-url'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { Transactional } from '@nestjs-cls/transactional'; +import { UserReader } from '../user/repository/user.reader'; @Injectable() export class FeedService { @@ -17,6 +18,7 @@ export class FeedService { private redisService: RedisService, @Inject(SearchService) private searchService: SearchService, private eventEmitter: EventEmitter2, + private userReader: UserReader, ) {} async create(userId: string, createFeedInput: CreateFeedInput) { @@ -176,10 +178,15 @@ export class FeedService { } async getLatestFeeds(userId: string | null, { cursor, size }: GetFeedsInput) { + let blockingIds: string[] = []; + if (userId !== null) { + blockingIds = await this.userReader.findMyBlockingIds(userId); + } const result = await this.feedReader.findManyLatestWithCursor({ userId, cursor, size, + blockingIds, }); return { diff --git a/src/module/feed/repository/feed.reader.ts b/src/module/feed/repository/feed.reader.ts index 57ad39c..addd474 100644 --- a/src/module/feed/repository/feed.reader.ts +++ b/src/module/feed/repository/feed.reader.ts @@ -236,7 +236,12 @@ export class FeedReader { }; } - async findManyLatestWithCursor({ userId, cursor, size }: GetFeedsInput) { + async findManyLatestWithCursor({ + userId, + cursor, + size, + blockingIds, + }: GetFeedsInput) { let query = this.txHost.tx.$kysely .selectFrom('Feed') .select([ @@ -261,6 +266,11 @@ export class FeedReader { .as('isLike'), ]), ) + .$if(blockingIds.length > 0, (eb) => + eb.where((eb) => + eb('Feed.authorId', 'not in', blockingIds.map(kyselyUuid)), + ), + ) .orderBy('Feed.createdAt', 'desc') .orderBy('Feed.id', 'desc') .limit(size); @@ -887,6 +897,7 @@ type GetFeedsInput = { userId?: string | null; cursor: string | null; size: number; + blockingIds: string[]; }; type FindFeedsByUserInput = { diff --git a/src/module/user/repository/user.reader.ts b/src/module/user/repository/user.reader.ts index 346e13d..f3345bf 100644 --- a/src/module/user/repository/user.reader.ts +++ b/src/module/user/repository/user.reader.ts @@ -262,6 +262,14 @@ export class UserReader { return users; } + async findMyBlockingIds(userId: string) { + const blocks = await this.txHost.tx.block.findMany({ + where: { blockerId: userId }, + select: { blockingId: true }, + }); + return blocks.map((block) => block.blockingId); + } + async findPopularUserIds() { const users = await this.txHost.tx.user.findMany({ select: { diff --git a/test/e2e/feed/get-latest-feeds.e2e-spec.ts b/test/e2e/feed/get-latest-feeds.e2e-spec.ts index 1915f05..8ae4ff6 100644 --- a/test/e2e/feed/get-latest-feeds.e2e-spec.ts +++ b/test/e2e/feed/get-latest-feeds.e2e-spec.ts @@ -105,6 +105,46 @@ describe('GET /feeds/latest - 최신 피드 조회', () => { expect(body2.nextCursor).toBeNull(); }); + it('내가 차단한 유저가 있으면 해당 피드는 제외한다', async () => { + // given + const { accessToken, user } = await createTestUser(app, {}); + const { user: blockedUser } = await createTestUser(app, { + providerId: 'blockedUser', + name: 'blockedUser', + url: 'blockedUser', + }); + + await prisma.feed.createMany({ + data: new Array(15).fill(0).map(() => { + return { + authorId: blockedUser.id, + title: 'test', + content: 'test', + thumbnail: 'test', + likeCount: 0, + cards: [], + }; + }), + }); + + await prisma.block.create({ + data: { + blockerId: user.id, + blockingId: blockedUser.id, + }, + }); + + // when + const { status, body } = await request(app.getHttpServer()) + .get(`/feeds/latest?size=13`) + .set('Authorization', `Bearer ${accessToken}`); + + // then + expect(status).toBe(200); + expect(body.cursor).not.toBeNull(); + expect(body.feeds).toHaveLength(0); + }); + it('비로그인유저', async () => { // given const user = await prisma.user.create({ From 25203d1d332ec7c5f50eefcda3660df907deb168 Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Sat, 29 Nov 2025 18:20:35 +0900 Subject: [PATCH 12/14] =?UTF-8?q?feat:=20=ED=94=BC=EB=93=9C=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20api=EC=97=90=EC=84=9C=20isBloc?= =?UTF-8?q?ked=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/module/feed/dto/feed.response.ts | 15 ++++--- src/module/feed/repository/feed.reader.ts | 17 ++++++-- test/e2e/feed/get-detail-feed.e2e-spec.ts | 48 +++++++++++++++++++++++ 3 files changed, 70 insertions(+), 10 deletions(-) diff --git a/src/module/feed/dto/feed.response.ts b/src/module/feed/dto/feed.response.ts index dd4df6b..acbdc2d 100644 --- a/src/module/feed/dto/feed.response.ts +++ b/src/module/feed/dto/feed.response.ts @@ -1,5 +1,8 @@ import { ApiProperty } from '@nestjs/swagger'; -import { UserBaseResponse } from '../../user/dto/user.dto.response'; +import { + UserBaseResponse, + UserBaseWithBlockedResponse, +} from '../../user/dto/user.dto.response'; import { CursorAndCountResponse, CursorResponse, @@ -37,9 +40,6 @@ export class FeedResponse extends FeedBaseResponse { @ApiProperty() tags: string[]; - - @ApiProperty({ type: UserBaseResponse }) - author: UserBaseResponse; } export class SearchedFeedResponse extends FeedBaseResponse { @@ -89,6 +89,9 @@ export class FollowingFeedResponse extends FeedResponse { @ApiProperty({ type: FeedCommentBaseResponse, nullable: true }) comment: FeedCommentBaseResponse | null; + + @ApiProperty({ type: UserBaseResponse }) + author: UserBaseResponse; } export class FollowingFeedsResponse extends CursorResponse { @@ -106,8 +109,8 @@ export class FeedDetailResponse extends FeedResponse { @ApiProperty() commentCount: number; - @ApiProperty({ type: AlbumBaseResponse, nullable: true }) - album: AlbumBaseResponse | null; + @ApiProperty({ type: UserBaseWithBlockedResponse }) + author: UserBaseWithBlockedResponse; } export class FeedMetaResponse extends FeedBaseResponse { diff --git a/src/module/feed/repository/feed.reader.ts b/src/module/feed/repository/feed.reader.ts index addd474..f23b2b8 100644 --- a/src/module/feed/repository/feed.reader.ts +++ b/src/module/feed/repository/feed.reader.ts @@ -45,7 +45,7 @@ export class FeedReader { 'likeCount', 'content', ]) - .innerJoin('User', 'Feed.authorId', 'User.id') + .innerJoin('User as Author', 'Feed.authorId', 'Author.id') .leftJoin('Album', 'Album.id', 'Feed.albumId') .select(['Album.id as albumId', 'Album.name as albumName']) .select((eb) => @@ -58,9 +58,9 @@ export class FeedReader { .as('commentCount'), ) .select([ - 'User.id as authorId', - 'User.name', - 'User.image as image', + 'Author.id as authorId', + 'Author.name', + 'Author.image as image', 'url', ]) .select((eb) => @@ -90,6 +90,14 @@ export class FeedReader { .where('Save.userId', '=', kyselyUuid(userId!)), ]) .as('isSave'), + eb + .fn('EXISTS', [ + eb + .selectFrom('Block') + .whereRef('Block.blockerId', '=', 'Author.id') + .where('Block.blockingId', '=', kyselyUuid(userId!)), + ]) + .as('isBlocked'), ]), ) .execute(); @@ -114,6 +122,7 @@ export class FeedReader { name: feed.name, image: feed.image, url: feed.url, + isBlocked: feed.isBlocked ?? false, }, album: feed.albumId && feed.albumName diff --git a/test/e2e/feed/get-detail-feed.e2e-spec.ts b/test/e2e/feed/get-detail-feed.e2e-spec.ts index 3f8f50b..8afeef3 100644 --- a/test/e2e/feed/get-detail-feed.e2e-spec.ts +++ b/test/e2e/feed/get-detail-feed.e2e-spec.ts @@ -98,6 +98,7 @@ describe('GET /feeds/:feedId - 피드 상세', () => { name: 'test', image: null, url: 'test', + isBlocked: false, }, isLike: false, isSave: false, @@ -175,6 +176,7 @@ describe('GET /feeds/:feedId - 피드 상세', () => { name: 'test2', image: null, url: 'test2', + isBlocked: false, }, isLike: true, isSave: false, @@ -184,4 +186,50 @@ describe('GET /feeds/:feedId - 피드 상세', () => { }, }); }); + + it('내가 차단 당한 유저의 피드는 isBlocked가 true로 반환된다', async () => { + // given + const { accessToken, user: user1 } = await createTestUser(app, {}); + + const user2 = await prisma.user.create({ + data: { + provider: 'KAKAO', + providerId: 'test2', + name: 'test2', + email: 'test@test.com', + url: 'test2', + }, + }); + + const feed = await prisma.feed.create({ + data: { + authorId: user2.id, + title: 'title', + content: 'content', + cards: ['feed/test.jpg'], + thumbnail: 'feed/test.jpg', + tags: { + createMany: { + data: [{ tagName: 'tag1' }, { tagName: 'tag2' }], + }, + }, + }, + }); + + await prisma.block.create({ + data: { + blockerId: user2.id, + blockingId: user1.id, + }, + }); + + // when + const { status, body } = await request(app.getHttpServer()) + .get(`/feeds/${feed.id}`) + .set('Authorization', `Bearer ${accessToken}`); + + // then + expect(status).toBe(200); + expect(body.author.isBlocked).toBe(true); + }); }); From 82228fda4088821d86deae8e5fb55a1d43b3faa8 Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Sat, 29 Nov 2025 18:39:58 +0900 Subject: [PATCH 13/14] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=EC=A1=B0=ED=9A=8C=20api=EC=97=90=20isBlocked,=20isBlo?= =?UTF-8?q?cking=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/module/user/dto/user.response.ts | 11 +++++-- src/module/user/repository/user.reader.ts | 18 +++++++++++ src/module/user/user.service.ts | 2 ++ .../user/get-user-profile-by-url.e2e-spec.ts | 30 +++++++++++++++---- test/e2e/user/get-user-profile.e2e-spec.ts | 28 +++++++++++++---- 5 files changed, 75 insertions(+), 14 deletions(-) diff --git a/src/module/user/dto/user.response.ts b/src/module/user/dto/user.response.ts index d7996b1..ed1a1b6 100644 --- a/src/module/user/dto/user.response.ts +++ b/src/module/user/dto/user.response.ts @@ -6,7 +6,10 @@ import { } from '../../../shared/response/cursor.response'; import { ConflictResponse } from '../../../shared/response/conflict.response'; import { AlbumBaseResponse } from '../../album/dto/album.response'; -import { UserBaseResponse } from './user.dto.response'; +import { + UserBaseResponse, + UserBaseWithBlockedResponse, +} from './user.dto.response'; export class LinkResponse { @ApiProperty({ example: '인스타그램' }) @@ -129,7 +132,7 @@ export class AlbumWithCountResponse extends AlbumBaseResponse { feedCount: number; } -export class UserProfileResponse extends UserBaseResponse { +export class UserProfileResponse extends UserBaseWithBlockedResponse { @ApiProperty({ description: 'not null인데 공백은 허용' }) description: string; @@ -158,6 +161,10 @@ export class UserProfileResponse extends UserBaseResponse { @ApiProperty() isFollowing: boolean; + @ApiProperty() + isBlocking: boolean; + + @ApiProperty() @ApiProperty({ type: AlbumWithCountResponse, isArray: true }) albums: AlbumWithCountResponse[]; } diff --git a/src/module/user/repository/user.reader.ts b/src/module/user/repository/user.reader.ts index f3345bf..1191679 100644 --- a/src/module/user/repository/user.reader.ts +++ b/src/module/user/repository/user.reader.ts @@ -166,6 +166,22 @@ export class UserReader { .where('Follow.followerId', '=', kyselyUuid(userId!)), ]) .as('isFollowing'), + eb + .fn('EXISTS', [ + eb + .selectFrom('Block') + .whereRef('Block.blockerId', '=', 'User.id') + .where('Block.blockingId', '=', kyselyUuid(userId!)), + ]) + .as('isBlocked'), + eb + .fn('EXISTS', [ + eb + .selectFrom('Block') + .whereRef('Block.blockingId', '=', 'User.id') + .where('Block.blockerId', '=', kyselyUuid(userId!)), + ]) + .as('isBlocking'), ]), ) .execute(); @@ -189,6 +205,8 @@ export class UserReader { feedCount: user.feedCount !== null ? Number(user.feedCount) : 0, postCount: user.postCount !== null ? Number(user.postCount) : 0, isFollowing: user.isFollowing ?? false, + isBlocking: user.isBlocking ?? false, + isBlocked: user.isBlocked ?? false, }; } diff --git a/src/module/user/user.service.ts b/src/module/user/user.service.ts index 89a9799..aaa3f5f 100644 --- a/src/module/user/user.service.ts +++ b/src/module/user/user.service.ts @@ -183,6 +183,8 @@ export class UserService { feedCount: targetUser.feedCount, postCount: targetUser.postCount, isFollowing: targetUser.isFollowing, + isBlocking: targetUser.isBlocking, + isBlocked: targetUser.isBlocked, albums, }; } diff --git a/test/e2e/user/get-user-profile-by-url.e2e-spec.ts b/test/e2e/user/get-user-profile-by-url.e2e-spec.ts index d4e5376..b170d9c 100644 --- a/test/e2e/user/get-user-profile-by-url.e2e-spec.ts +++ b/test/e2e/user/get-user-profile-by-url.e2e-spec.ts @@ -59,6 +59,8 @@ describe('GET /users/profile/:url - url로 프로필 조회', () => { feedCount: 0, postCount: 0, isFollowing: false, + isBlocking: false, + isBlocked: false, url: 'test', albums: [], }); @@ -129,6 +131,8 @@ describe('GET /users/profile/:url - url로 프로필 조회', () => { feedCount: 2, postCount: 0, isFollowing: false, + isBlocking: false, + isBlocked: false, url: 'test', albums: [ { @@ -145,9 +149,11 @@ describe('GET /users/profile/:url - url로 프로필 조회', () => { }); }); - it('로그인한 유저는 isFollowing을 포함해서 반환한다', async () => { + it('로그인한 유저는 isFollowing, isBlocking, isBlocked을 포함해서 반환한다', async () => { // given - const { accessToken } = await createTestUser(app, { name: 'test' }); + const { accessToken, user: me } = await createTestUser(app, { + name: 'test', + }); const targetUser = await prisma.user.create({ data: { @@ -157,13 +163,23 @@ describe('GET /users/profile/:url - url로 프로필 조회', () => { name: 'test2', links: ['test1|~|https://test1.com'], url: 'test2', + followerCount: 1, }, }); - await request(app.getHttpServer()) - .put(`/users/${targetUser.id}/follow`) - .set('Authorization', `Bearer ${accessToken}`) - .send(); + await prisma.follow.create({ + data: { + followerId: me.id, + followingId: targetUser.id, + }, + }); + + await prisma.block.createMany({ + data: [ + { blockerId: me.id, blockingId: targetUser.id }, + { blockerId: targetUser.id, blockingId: me.id }, + ], + }); // when const { status, body } = await request(app.getHttpServer()) @@ -184,6 +200,8 @@ describe('GET /users/profile/:url - url로 프로필 조회', () => { feedCount: 0, postCount: 0, isFollowing: true, + isBlocking: true, + isBlocked: true, url: 'test2', albums: [], }); diff --git a/test/e2e/user/get-user-profile.e2e-spec.ts b/test/e2e/user/get-user-profile.e2e-spec.ts index 4a656fe..65682f6 100644 --- a/test/e2e/user/get-user-profile.e2e-spec.ts +++ b/test/e2e/user/get-user-profile.e2e-spec.ts @@ -59,14 +59,18 @@ describe('GET /users/:id - 유저 프로필 조회', () => { feedCount: 0, postCount: 0, isFollowing: false, + isBlocking: false, + isBlocked: false, url: 'test', albums: [], }); }); - it('로그인한 유저는 isFollowing을 포함해서 반환한다', async () => { + it('로그인한 유저는 isFollowing, isBlocking, isBlocked을 포함해서 반환한다', async () => { // given - const { accessToken } = await createTestUser(app, { name: 'test' }); + const { accessToken, user: me } = await createTestUser(app, { + name: 'test', + }); const targetUser = await prisma.user.create({ data: { @@ -76,13 +80,23 @@ describe('GET /users/:id - 유저 프로필 조회', () => { name: 'test2', links: ['test1|~|https://test1.com'], url: 'test2', + followerCount: 1, }, }); - await request(app.getHttpServer()) - .put(`/users/${targetUser.id}/follow`) - .set('Authorization', `Bearer ${accessToken}`) - .send(); + await prisma.follow.create({ + data: { + followerId: me.id, + followingId: targetUser.id, + }, + }); + + await prisma.block.createMany({ + data: [ + { blockerId: me.id, blockingId: targetUser.id }, + { blockerId: targetUser.id, blockingId: me.id }, + ], + }); // when const { status, body } = await request(app.getHttpServer()) @@ -103,6 +117,8 @@ describe('GET /users/:id - 유저 프로필 조회', () => { feedCount: 0, postCount: 0, isFollowing: true, + isBlocking: true, + isBlocked: true, url: 'test2', albums: [], }); From d90e3459e53342f979fd7b6af56b49f2d272bd78 Mon Sep 17 00:00:00 2001 From: leemhoon00 Date: Sat, 29 Nov 2025 18:53:05 +0900 Subject: [PATCH 14/14] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20api=EB=9E=91=20=EC=9D=B8=EA=B8=B0=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EC=A1=B0=ED=9A=8C=20api=EC=97=90=EC=84=9C=20isBloc?= =?UTF-8?q?ked,=20isBlocking=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/module/user/dto/user.response.ts | 12 ++++++++ src/module/user/repository/user.reader.ts | 36 ++++++++++++++++++++++ src/module/user/user.service.ts | 2 ++ test/e2e/user/get-popular-user.e2e-spec.ts | 10 ++++++ test/e2e/user/search-user.e2e-spec.ts | 2 ++ 5 files changed, 62 insertions(+) diff --git a/src/module/user/dto/user.response.ts b/src/module/user/dto/user.response.ts index ed1a1b6..e4762a0 100644 --- a/src/module/user/dto/user.response.ts +++ b/src/module/user/dto/user.response.ts @@ -106,6 +106,12 @@ export class SearchedUserResponse extends UserBaseResponse { @ApiProperty() followerCount: number; + + @ApiProperty() + isBlocking: boolean; + + @ApiProperty() + isBlocked: boolean; } export class SearchedUsersResponse extends CursorAndCountResponse { @@ -125,6 +131,12 @@ export class PopularUserResponse extends UserBaseResponse { @ApiProperty({ type: 'string', isArray: true, example: ['feed/{UUID}.jpg'] }) thumbnails: string[]; + + @ApiProperty() + isBlocking: boolean; + + @ApiProperty() + isBlocked: boolean; } export class AlbumWithCountResponse extends AlbumBaseResponse { diff --git a/src/module/user/repository/user.reader.ts b/src/module/user/repository/user.reader.ts index 1191679..bea617d 100644 --- a/src/module/user/repository/user.reader.ts +++ b/src/module/user/repository/user.reader.ts @@ -339,6 +339,22 @@ export class UserReader { .where('Follow.followerId', '=', kyselyUuid(userId!)), ]) .as('isFollowing'), + eb + .fn('EXISTS', [ + eb + .selectFrom('Block') + .whereRef('Block.blockerId', '=', 'User.id') + .where('Block.blockingId', '=', kyselyUuid(userId!)), + ]) + .as('isBlocked'), + eb + .fn('EXISTS', [ + eb + .selectFrom('Block') + .whereRef('Block.blockingId', '=', 'User.id') + .where('Block.blockerId', '=', kyselyUuid(userId!)), + ]) + .as('isBlocking'), ]), ) .execute(); @@ -352,6 +368,8 @@ export class UserReader { description: user.description, thumbnails: user.thumbnails ?? [], isFollowing: user.isFollowing ?? false, + isBlocking: user.isBlocking ?? false, + isBlocked: user.isBlocked ?? false, })); } @@ -388,6 +406,22 @@ export class UserReader { .where('followerId', '=', kyselyUuid(userId!)), ]) .as('isFollowing'), + eb + .fn('EXISTS', [ + eb + .selectFrom('Block') + .whereRef('Block.blockerId', '=', 'User.id') + .where('Block.blockingId', '=', kyselyUuid(userId!)), + ]) + .as('isBlocked'), + eb + .fn('EXISTS', [ + eb + .selectFrom('Block') + .whereRef('Block.blockingId', '=', 'User.id') + .where('Block.blockerId', '=', kyselyUuid(userId!)), + ]) + .as('isBlocking'), ]), ) .orderBy('User.followerCount', 'desc') @@ -421,6 +455,8 @@ export class UserReader { backgroundImage: user.backgroundImage, followerCount: user.followerCount, isFollowing: user.isFollowing ?? false, + isBlocking: user.isBlocking ?? false, + isBlocked: user.isBlocked ?? false, })), }; } diff --git a/src/module/user/user.service.ts b/src/module/user/user.service.ts index aaa3f5f..c2fbd1d 100644 --- a/src/module/user/user.service.ts +++ b/src/module/user/user.service.ts @@ -360,6 +360,8 @@ export class UserService { backgroundImage: getImageUrl(user.backgroundImage), followerCount: user.followerCount, isFollowing: user.isFollowing, + isBlocking: user.isBlocking, + isBlocked: user.isBlocked, })), }; } diff --git a/test/e2e/user/get-popular-user.e2e-spec.ts b/test/e2e/user/get-popular-user.e2e-spec.ts index 03384a3..75bef1b 100644 --- a/test/e2e/user/get-popular-user.e2e-spec.ts +++ b/test/e2e/user/get-popular-user.e2e-spec.ts @@ -76,6 +76,13 @@ describe('GET /users/popular - 인기 유저 조회', () => { userService.follow(me.id, users[0].id), ]); + await prisma.block.createMany({ + data: [ + { blockerId: users[1].id, blockingId: me.id }, + { blockingId: users[1].id, blockerId: me.id }, + ], + }); + await prisma.feed.createMany({ data: [ { @@ -115,5 +122,8 @@ describe('GET /users/popular - 인기 유저 조회', () => { expect(body).toHaveLength(4); const user = body.find((user: any) => user.id === users[0].id); expect(user.thumbnails).toHaveLength(3); + const blockedUser = body.find((user: any) => user.id === users[1].id); + expect(blockedUser.isBlocking).toBe(true); + expect(blockedUser.isBlocked).toBe(true); }); }); diff --git a/test/e2e/user/search-user.e2e-spec.ts b/test/e2e/user/search-user.e2e-spec.ts index 45da196..1cd6911 100644 --- a/test/e2e/user/search-user.e2e-spec.ts +++ b/test/e2e/user/search-user.e2e-spec.ts @@ -63,6 +63,8 @@ describe('GET /users/search - 유저 검색', () => { expect(body.totalCount).toBe(19); expect(body.users.length).toBe(10); expect(body.nextCursor).toBeDefined(); + expect(body.users[0].isBlocked).toBe(false); + expect(body.users[0].isBlocking).toBe(false); expect(status2).toBe(200); expect(body2.totalCount).toBe(19);