From a0e5e827e4673706d6c6f563fa25703320786e5b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=A1=B0=EB=8C=80=ED=9D=AC?= <joedaehui@ajou.ac.kr>
Date: Mon, 25 Nov 2024 20:51:21 +0900
Subject: [PATCH] =?UTF-8?q?refactor:=20friend=20pagination=20=EB=B3=80?=
 =?UTF-8?q?=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=A5=B8=20=ED=85=8C=EC=8A=A4?=
 =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#19)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 services/friendService.test.js | 81 ++++++++++++++++++++++------------
 1 file changed, 54 insertions(+), 27 deletions(-)

diff --git a/services/friendService.test.js b/services/friendService.test.js
index 02394ee..2822a25 100644
--- a/services/friendService.test.js
+++ b/services/friendService.test.js
@@ -143,50 +143,77 @@ describe('Friend Service', () => {
     });
 
     describe('getFriendList', () => {
-        test('should retrieve friend list with correct pagination', async () => {
+        beforeEach(async () => {
             await friendService.sendFriendRequest(1, 2);
             await friendService.acceptFriendRequest(2, 1);
-
             await friendService.sendFriendRequest(1, 3);
             await friendService.acceptFriendRequest(3, 1);
-
+    
             // 추가 더미데이터 생성
             for (let i = 4; i <= 23; i++) {
-                // Create dummy users
                 await User.create({
                     id: i,
                     name: `User${i}`,
                     email: `user${i}@example.com`,
                 });
-
-                // Alice랑 친구맺기
                 await friendService.sendFriendRequest(1, i);
                 await friendService.acceptFriendRequest(i, 1);
             }
-
-            // Alice 친구: Bob (2), Charlie (3), User4부터 User23까지 (총 22명)
-            const limit = 5;
-            const offset = 0;
-            const friendsPage1 = await friendService.getFriendList(1, limit, offset);
-            expect(friendsPage1.length).toBe(limit);
-            const expectedNamesPage1 = ['Bob', 'Charlie', 'User4', 'User5', 'User6'];
-            const receivedNamesPage1 = friendsPage1.map(friend => friend.friendInfo.name);
-            expectedNamesPage1.forEach(name => {
-                expect(receivedNamesPage1).toContain(name);
+        });
+    
+        test('작은 size로 여러 페이지 조회', async () => {
+            const size = 10;
+            
+            // 첫 페이지
+            const page1 = await friendService.getFriendList(1, {
+                limit: size,
+                offset: 0
             });
-
-            const friendsPage2 = await friendService.getFriendList(1, limit, limit);
-            expect(friendsPage2.length).toBe(limit);
-            const expectedNamesPage2 = ['User7', 'User8', 'User9', 'User10', 'User11'];
-            const receivedNamesPage2 = friendsPage2.map(friend => friend.friendInfo.name);
-            expectedNamesPage2.forEach(name => {
-                expect(receivedNamesPage2).toContain(name);
+            expect(page1.content.length).toBe(size);
+            expect(page1.hasNext).toBe(true);
+            
+            // 두 번째 페이지
+            const page2 = await friendService.getFriendList(1, {
+                limit: size,
+                offset: size
+            });
+            expect(page2.content.length).toBe(size);
+            expect(page2.hasNext).toBe(true);
+            
+            // 마지막 페이지
+            const page3 = await friendService.getFriendList(1, {
+                limit: size,
+                offset: size * 2
             });
+            expect(page3.content.length).toBe(2);
+            expect(page3.hasNext).toBe(false);
         });
-
-        test('should return empty array when user has no friends', async () => {
-            const friends = await friendService.getFriendList(999); // Non-existing user
-            expect(friends.length).toBe(0);
+    
+        test('페이지 순서 검증', async () => {
+            const size = 5;
+            const page1 = await friendService.getFriendList(1, {
+                limit: size,
+                offset: 0
+            });
+            const page2 = await friendService.getFriendList(1, {
+                limit: size,
+                offset: size
+            });
+    
+            const names1 = page1.content.map(friend => friend.friendInfo.name);
+            const names2 = page2.content.map(friend => friend.friendInfo.name);
+    
+            expect(names1).toEqual(['Bob', 'Charlie', 'User4', 'User5', 'User6']);
+            expect(names2).toEqual(['User7', 'User8', 'User9', 'User10', 'User11']);
+        });
+    
+        test('존재하지 않는 페이지 조회', async () => {
+            const response = await friendService.getFriendList(1, {
+                limit: 20,
+                offset: 100
+            });
+            expect(response.content).toHaveLength(0);
+            expect(response.hasNext).toBe(false);
         });
     });
 
-- 
GitLab