1
1
package com .hf .healthfriend .domain .chat .repository ;
2
2
3
- import com .hf .healthfriend .domain .chat .constant .ChatMessageType ;
4
3
import com .hf .healthfriend .domain .chat .entity .Chatroom ;
5
4
import com .hf .healthfriend .domain .chat .entity .chatmessage .ChatMessage ;
6
5
import com .hf .healthfriend .domain .chat .entity .chatmessage .ImageChatMessage ;
10
9
import com .hf .healthfriend .testutil .MysqlTestcontainerConfig ;
11
10
import com .hf .healthfriend .testutil .SampleEntityGenerator ;
12
11
import com .hf .healthfriend .testutil .TestConfig ;
12
+ import jakarta .persistence .EntityManager ;
13
13
import lombok .extern .slf4j .Slf4j ;
14
- import org .assertj .core .api .Assertions ;
15
14
import org .junit .jupiter .api .DisplayName ;
16
15
import org .junit .jupiter .api .Test ;
17
16
import org .junit .jupiter .params .ParameterizedTest ;
@@ -52,6 +51,9 @@ class TestChatMessageRepository {
52
51
@ Autowired
53
52
ChatParticipationRepository chatParticipationRepository ;
54
53
54
+ @ Autowired
55
+ EntityManager em ;
56
+
55
57
@ Test
56
58
@ DisplayName ("save() - 이미지 메시지 저장 성공" )
57
59
void saveImageMessage_success () {
@@ -91,7 +93,7 @@ void saveImageMessage_success() {
91
93
@ DisplayName ("findByChatroomId() - Pagination을 적용한 채팅 메시지 목록 불러오기 테스트" )
92
94
void findByChatroomId_success_fetchWithPagination (int page , int pageSize ) {
93
95
// Given
94
- int index = page - 1 ;
96
+ int zeroBasedPage = page - 1 ;
95
97
Member participant1 =
SampleEntityGenerator .
generateSampleMember (
"[email protected] " ,
"part1" );
96
98
Member participant2 =
SampleEntityGenerator .
generateSampleMember (
"[email protected] " ,
"part2" );
97
99
this .memberRepository .save (participant1 );
@@ -108,35 +110,44 @@ void findByChatroomId_success_fetchWithPagination(int page, int pageSize) {
108
110
}
109
111
110
112
// When
113
+ PageRequest pageObj = PageRequest .of (zeroBasedPage , pageSize );
114
+ log .info ("pageObj={}" , pageObj );
111
115
Page <ChatMessage > result = this .chatMessageRepository .findByChatroomId (chatroom .getChatroomId (),
112
- PageRequest . of ( index , pageSize ) );
116
+ pageObj );
113
117
114
118
// Then
115
- List <ChatMessage > expected = getSubList (messages , index , pageSize );
119
+ List <ChatMessage > expected = getSubList (messages , zeroBasedPage , pageSize );
116
120
117
- log .info ("message.size()={}" , messages .size ());
118
- log .info ("messages.size() / pageSize = {}" , messages .size () / pageSize );
119
121
assertThat (result .getTotalElements ()).isEqualTo (messages .size ());
120
122
assertThat (result .getTotalPages ())
121
123
.isEqualTo (messages .size () / pageSize + (messages .size () % pageSize > 0 ? 1 : 0 ));
122
124
125
+ Long [] resultIds = result .getContent ().stream ().map (ChatMessage ::getChatMessageId ).toArray (Long []::new );
126
+ log .info ("resultIds={}" , Arrays .toString (resultIds ));
127
+ log .info ("expected={}" , expected .stream ().map (ChatMessage ::getChatMessageId ).toList ());
123
128
// 순서 보장
124
129
assertThat (expected .stream ().map (ChatMessage ::getChatMessageId ))
125
- .containsExactly (result . getContent (). stream (). map ( ChatMessage :: getChatMessageId ). toArray ( Long []:: new ) );
130
+ .containsExactly (resultIds );
126
131
}
127
132
128
133
private List <ChatMessage > inputSampleChatMessages (Chatroom chatroom , Member participant1 , Member participant2 ) {
129
134
final int DUMMY_COUNT = 100 ;
130
135
List <ChatMessage > chatMessages = new ArrayList <>();
131
136
LocalDateTime now = LocalDateTime .now ();
132
137
138
+ Set <Integer > usedRandomValue = new HashSet <>();
133
139
for (int i = 0 ; i < DUMMY_COUNT ; i ++) {
134
140
int num = i + 1 ;
135
141
Random random = new Random ();
136
- int randomValue = random .nextInt (DUMMY_COUNT * 100 );
137
- log .info ("DUMMY_COUNT * 100 = {}" , DUMMY_COUNT * 100 );
138
- log .info ("randomValue={}" , randomValue );
139
- LocalDateTime randomCreationTime = now .minus (randomValue , ChronoUnit .SECONDS );
142
+ int randomValue ;
143
+ while (true ) {
144
+ randomValue = random .nextInt ();
145
+ if (!usedRandomValue .contains (randomValue )) {
146
+ usedRandomValue .add (randomValue );
147
+ break ;
148
+ }
149
+ }
150
+ LocalDateTime randomCreationTime = now .minus (randomValue , ChronoUnit .MILLIS );
140
151
TextChatMessage message = new TextChatMessage (chatroom , num % 2 == 0 ? participant1 : participant2 , "text" + num );
141
152
ReflectionTestUtils .setField (message , "creationTime" , randomCreationTime );
142
153
ReflectionTestUtils .setField (message , "lastModified" , randomCreationTime );
@@ -158,13 +169,40 @@ private List<ChatMessage> inputSampleChatMessages(Chatroom chatroom, Member part
158
169
return chatMessages ;
159
170
}
160
171
161
- private List <ChatMessage > getSubList (List <ChatMessage > original , int index , int pageSize ) {
162
- int fromIndex = index * pageSize ;
163
- int toIndex = (index + 1 ) * pageSize ;
164
- if (fromIndex >= original .size ()) {
172
+ private List <ChatMessage > getSubList (List <ChatMessage > original , int zeroBasedPage , int pageSize ) {
173
+ int originalSize = original .size ();
174
+ int fromIndex = zeroBasedPage * pageSize ;
175
+ int toIndex = Math .min ((zeroBasedPage + 1 ) * pageSize , originalSize );
176
+ if (fromIndex >= originalSize ) {
165
177
return new ArrayList <>();
166
178
}
167
179
168
- return original .subList (fromIndex , Math .min (toIndex , pageSize ));
180
+ return original .subList (fromIndex , toIndex );
181
+ }
182
+
183
+ @ Test
184
+ @ DisplayName ("readMessagesInChatroomByOpponent() - success" )
185
+ void readByChatroomId_success () {
186
+ // Given
187
+ Member participant1 =
SampleEntityGenerator .
generateSampleMember (
"[email protected] " ,
"part1" );
188
+ Member participant2 =
SampleEntityGenerator .
generateSampleMember (
"[email protected] " ,
"part2" );
189
+ this .memberRepository .save (participant1 );
190
+ this .memberRepository .save (participant2 );
191
+
192
+ Chatroom chatroom = SampleEntityGenerator .generateSampleChatroom (participant1 , participant2 );
193
+ this .chatroomRepository .save (chatroom );
194
+
195
+ List <ChatMessage > chatMessages = inputSampleChatMessages (chatroom , participant1 , participant2 );
196
+ int chatMessageCount = chatMessages .size ();
197
+
198
+ // When
199
+ this .chatMessageRepository .readMessagesInChatroomByOpponent (chatroom .getChatroomId ());
200
+
201
+ // Then
202
+ List <ChatMessage > found =
203
+ this .chatMessageRepository .findByChatroomId (chatroom .getChatroomId (), PageRequest .of (0 , chatMessageCount ))
204
+ .getContent ();
205
+
206
+ found .forEach ((f ) -> assertThat (f .isReadByOpponent ()).isTrue ());
169
207
}
170
208
}
0 commit comments