@@ -5,7 +5,6 @@ import com.asap.application.letter.port.out.IndependentLetterManagementPort
55import com.asap.application.letter.port.out.SendLetterManagementPort
66import com.asap.application.letter.port.out.SpaceLetterManagementPort
77import com.asap.application.space.port.out.SpaceManagementPort
8- import com.asap.application.user.port.out.UserManagementPort
98import com.asap.domain.LetterFixture
109import com.asap.domain.SpaceFixture
1110import com.asap.domain.UserFixture
@@ -20,15 +19,13 @@ class LetterQueryServiceTest :
2019 BehaviorSpec ({
2120
2221 val mockSendLetterManagementPort = mockk<SendLetterManagementPort >(relaxed = true )
23- val mockUserManagementPort = mockk<UserManagementPort >(relaxed = true )
2422 val mockIndependentLetterManagementPort = mockk<IndependentLetterManagementPort >(relaxed = true )
2523 val mockSpaceLetterManagementPort = mockk<SpaceLetterManagementPort >(relaxed = true )
2624 val mockSpaceManagementPort = mockk<SpaceManagementPort >(relaxed = true )
2725
2826 val letterQueryService =
2927 LetterQueryService (
3028 mockSendLetterManagementPort,
31- mockUserManagementPort,
3229 mockIndependentLetterManagementPort,
3330 mockSpaceLetterManagementPort,
3431 mockSpaceManagementPort,
@@ -41,51 +38,78 @@ class LetterQueryServiceTest :
4138 letterId = " letter-id" ,
4239 userId = user.id.value,
4340 )
44- val mockSendLetter = LetterFixture .generateSendLetter(user.id)
45- val mockSender = UserFixture .createUser(mockSendLetter.senderId!! , " sender-name" )
46- every {
47- mockSendLetterManagementPort.getReadLetterNotNull(
48- receiverId = DomainId (query.userId),
49- letterId = DomainId (query.letterId),
50- )
51- } returns mockSendLetter
52- every {
53- mockUserManagementPort.getUserNotNull(mockSender.id)
54- } returns mockSender
55- `when `(" 편지가 존재하면" ) {
41+
42+ `when `(" 회원이 보낸 편지가 존재하면" ) {
43+ val mockSendLetter = LetterFixture .generateSendLetter(user.id)
44+ every {
45+ mockSendLetterManagementPort.getReadLetterNotNull(
46+ receiverId = DomainId (query.userId),
47+ letterId = DomainId (query.letterId),
48+ )
49+ } returns mockSendLetter
50+
5651 val response = letterQueryService.get(query)
57- then(" 편지 정보를 가져와야 한다" ) {
58- response.senderName shouldBe mockSender.username
52+ then(" 발신자 이름은 mapper에서 처리된 이름이어야 한다" ) {
53+ response.senderName shouldBe mockSendLetter.senderName
5954 response.content shouldBe mockSendLetter.content.content
6055 response.sendDate shouldBe mockSendLetter.createdDate
6156 response.templateType shouldBe mockSendLetter.content.templateType
6257 response.images shouldBe mockSendLetter.content.images
6358 }
6459 }
60+
61+ `when `(" 익명으로 보낸 편지가 존재하면" ) {
62+ val anonymousSenderName = " 익명 발신자"
63+ val mockAnonymousLetter = LetterFixture .generateAnonymousSendLetter(
64+ receiverId = user.id,
65+ senderName = anonymousSenderName
66+ )
67+ every {
68+ mockSendLetterManagementPort.getReadLetterNotNull(
69+ receiverId = DomainId (query.userId),
70+ letterId = DomainId (query.letterId),
71+ )
72+ } returns mockAnonymousLetter
73+
74+ val response = letterQueryService.get(query)
75+ then(" 발신자 이름은 저장된 senderName이어야 한다" ) {
76+ response.senderName shouldBe anonymousSenderName
77+ response.content shouldBe mockAnonymousLetter.content.content
78+ response.sendDate shouldBe mockAnonymousLetter.createdDate
79+ response.templateType shouldBe mockAnonymousLetter.content.templateType
80+ response.images shouldBe mockAnonymousLetter.content.images
81+ }
82+ }
6583 }
6684
6785 given(" 모든 무소속 편지를 조회할 떄" ) {
6886 val queryAll =
6987 GetIndependentLettersUsecase .QueryAll (
7088 userId = " user-id" ,
7189 )
72- val mockLetters =
73- listOf (
74- LetterFixture .generateIndependentLetter(
75- senderId = DomainId .generate(),
76- senderName = " sender-name" ,
77- receiverId = DomainId (queryAll.userId),
78- ),
90+
91+ `when `(" 회원과 비회원 편지가 함께 존재하면" ) {
92+ val memberLetter = LetterFixture .generateIndependentLetter(
93+ senderId = DomainId .generate(),
94+ senderName = " 회원 발신자" ,
95+ receiverId = DomainId (queryAll.userId),
96+ )
97+ val anonymousLetter = LetterFixture .generateIndependentLetter(
98+ senderId = null ,
99+ senderName = " 비회원 발신자" ,
100+ receiverId = DomainId (queryAll.userId),
79101 )
80- every {
81- mockIndependentLetterManagementPort.getAllByReceiverId(DomainId (queryAll.userId))
82- } returns mockLetters
83- `when `(" 편지가 존재하면" ) {
102+ val mockLetters = listOf (memberLetter, anonymousLetter)
103+
104+ every {
105+ mockIndependentLetterManagementPort.getAllByReceiverId(DomainId (queryAll.userId))
106+ } returns mockLetters
107+
84108 val response = letterQueryService.getAll(queryAll)
85- then(" 편지 정보를 가져와야 한다" ) {
86- response.letters[ 0 ].letterId shouldBe mockLetters[ 0 ].id.value
87- response.letters[ 0 ].senderName shouldBe mockLetters[ 0 ].sender. senderName
88- response.letters[ 0 ].isNew shouldBe mockLetters[ 0 ].isNew( )
109+ then(" 모든 편지의 발신자 이름이 정상적으로 표시되어야 한다" ) {
110+ response.letters.size shouldBe 2
111+ val senderNames = response.letters.map { it. senderName }.toSet()
112+ senderNames shouldBe setOf ( " 회원 발신자 " , " 비회원 발신자 " )
89113 }
90114 }
91115 }
@@ -100,40 +124,46 @@ class LetterQueryServiceTest :
100124 SpaceFixture .createSpace(
101125 userId = DomainId (query.userId),
102126 )
103- val spaceLetter = LetterFixture .generateSpaceLetter(receiverId = DomainId (query.userId), spaceId = space.id)
104- val prevSpaceLetter =
105- LetterFixture .generateSpaceLetter(receiverId = DomainId (query.userId), spaceId = space.id)
106- val nextSpaceLetter =
107- LetterFixture .generateSpaceLetter(receiverId = DomainId (query.userId), spaceId = space.id)
108- every {
109- mockSpaceLetterManagementPort.getSpaceLetterNotNull(
110- DomainId (query.letterId),
111- DomainId (query.userId),
112- )
113- } returns spaceLetter
114- every {
115- mockSpaceManagementPort.getSpaceNotNull(
116- spaceLetter.receiver.receiverId,
117- spaceLetter.spaceId,
118- )
119- } returns space
120- every {
121- mockSpaceLetterManagementPort.countSpaceLetterBy(
122- spaceLetter.spaceId,
123- spaceLetter.receiver.receiverId,
127+
128+ `when `(" 회원이 보낸 행성 편지가 존재하면" ) {
129+ val spaceLetter = LetterFixture .generateSpaceLetter(
130+ receiverId = DomainId (query.userId),
131+ spaceId = space.id,
132+ senderName = " 회원 발신자"
124133 )
125- } returns 3
126- every {
127- mockSpaceLetterManagementPort.getNearbyLetter(
128- spaceId = spaceLetter.spaceId,
129- userId = spaceLetter.receiver.receiverId,
130- letterId = spaceLetter.id,
131- )
132- } returns Pair (prevSpaceLetter, nextSpaceLetter)
133- `when `(" 편지가 존재하면" ) {
134+ val prevSpaceLetter =
135+ LetterFixture .generateSpaceLetter(receiverId = DomainId (query.userId), spaceId = space.id)
136+ val nextSpaceLetter =
137+ LetterFixture .generateSpaceLetter(receiverId = DomainId (query.userId), spaceId = space.id)
138+ every {
139+ mockSpaceLetterManagementPort.getSpaceLetterNotNull(
140+ DomainId (query.letterId),
141+ DomainId (query.userId),
142+ )
143+ } returns spaceLetter
144+ every {
145+ mockSpaceManagementPort.getSpaceNotNull(
146+ spaceLetter.receiver.receiverId,
147+ spaceLetter.spaceId,
148+ )
149+ } returns space
150+ every {
151+ mockSpaceLetterManagementPort.countSpaceLetterBy(
152+ spaceLetter.spaceId,
153+ spaceLetter.receiver.receiverId,
154+ )
155+ } returns 3
156+ every {
157+ mockSpaceLetterManagementPort.getNearbyLetter(
158+ spaceId = spaceLetter.spaceId,
159+ userId = spaceLetter.receiver.receiverId,
160+ letterId = spaceLetter.id,
161+ )
162+ } returns Pair (prevSpaceLetter, nextSpaceLetter)
163+
134164 val response = letterQueryService.get(query)
135165 then(" 편지 정보를 가져와야 한다" ) {
136- response.senderName shouldBe spaceLetter.sender.senderName
166+ response.senderName shouldBe " 회원 발신자 "
137167 response.spaceName shouldBe space.name
138168 response.letterCount shouldBe 3
139169 response.content shouldBe spaceLetter.content.content
@@ -150,6 +180,53 @@ class LetterQueryServiceTest :
150180 }
151181 }
152182 }
183+
184+ `when `(" 비회원이 보낸 행성 편지가 존재하면" ) {
185+ val anonymousSpaceLetter = LetterFixture .generateSpaceLetter(
186+ receiverId = DomainId (query.userId),
187+ spaceId = space.id,
188+ senderId = null ,
189+ senderName = " 비회원 발신자"
190+ )
191+ every {
192+ mockSpaceLetterManagementPort.getSpaceLetterNotNull(
193+ DomainId (query.letterId),
194+ DomainId (query.userId),
195+ )
196+ } returns anonymousSpaceLetter
197+ every {
198+ mockSpaceManagementPort.getSpaceNotNull(
199+ anonymousSpaceLetter.receiver.receiverId,
200+ anonymousSpaceLetter.spaceId,
201+ )
202+ } returns space
203+ every {
204+ mockSpaceLetterManagementPort.countSpaceLetterBy(
205+ anonymousSpaceLetter.spaceId,
206+ anonymousSpaceLetter.receiver.receiverId,
207+ )
208+ } returns 1
209+ every {
210+ mockSpaceLetterManagementPort.getNearbyLetter(
211+ spaceId = anonymousSpaceLetter.spaceId,
212+ userId = anonymousSpaceLetter.receiver.receiverId,
213+ letterId = anonymousSpaceLetter.id,
214+ )
215+ } returns Pair (null , null )
216+
217+ val response = letterQueryService.get(query)
218+ then(" 비회원 발신자 이름이 정상적으로 표시되어야 한다" ) {
219+ response.senderName shouldBe " 비회원 발신자"
220+ response.spaceName shouldBe space.name
221+ response.letterCount shouldBe 1
222+ response.content shouldBe anonymousSpaceLetter.content.content
223+ response.receiveDate shouldBe anonymousSpaceLetter.receiveDate
224+ response.images shouldBe anonymousSpaceLetter.content.images
225+ response.templateType shouldBe anonymousSpaceLetter.content.templateType
226+ response.prevLetter shouldBe null
227+ response.nextLetter shouldBe null
228+ }
229+ }
153230 }
154231
155232 given(" 궤도 편지 상세 정보를 조회할 때" ) {
@@ -158,41 +235,43 @@ class LetterQueryServiceTest :
158235 userId = " user-id" ,
159236 letterId = " letter-id" ,
160237 )
161- val independentLetter =
162- LetterFixture .generateIndependentLetter(
163- senderId = DomainId .generate(),
164- senderName = " sender-name" ,
165- receiverId = DomainId (query.userId),
166- )
167- val prevIndependentLetter =
168- LetterFixture .generateIndependentLetter(
169- senderId = DomainId .generate(),
170- senderName = " prev-sender-name" ,
171- receiverId = DomainId (query.userId),
172- )
238+
239+ `when `(" 회원이 보낸 독립 편지가 존재하면" ) {
240+ val independentLetter =
241+ LetterFixture .generateIndependentLetter(
242+ senderId = DomainId .generate(),
243+ senderName = " sender-name" ,
244+ receiverId = DomainId (query.userId),
245+ )
246+ val prevIndependentLetter =
247+ LetterFixture .generateIndependentLetter(
248+ senderId = DomainId .generate(),
249+ senderName = " prev-sender-name" ,
250+ receiverId = DomainId (query.userId),
251+ )
173252
174- val nextIndependentLetter =
175- LetterFixture .generateIndependentLetter(
176- senderId = DomainId .generate(),
177- senderName = " next-sender-name" ,
178- receiverId = DomainId (query.userId),
179- )
180- every {
181- mockIndependentLetterManagementPort.getIndependentLetterByIdNotNull(
182- DomainId (query.letterId),
183- DomainId (query.userId),
184- )
185- } returns independentLetter
186- every {
187- mockIndependentLetterManagementPort.getNearbyLetter(
188- userId = DomainId (query.userId),
189- letterId = DomainId (query.letterId),
190- )
191- } returns Pair (prevIndependentLetter, nextIndependentLetter)
192- every {
193- mockIndependentLetterManagementPort.countIndependentLetterByReceiverId(DomainId (query.userId))
194- } returns 3
195- ` when `( " 편지가 존재하면 " ) {
253+ val nextIndependentLetter =
254+ LetterFixture .generateIndependentLetter(
255+ senderId = DomainId .generate(),
256+ senderName = " next-sender-name" ,
257+ receiverId = DomainId (query.userId),
258+ )
259+ every {
260+ mockIndependentLetterManagementPort.getIndependentLetterByIdNotNull(
261+ DomainId (query.letterId),
262+ DomainId (query.userId),
263+ )
264+ } returns independentLetter
265+ every {
266+ mockIndependentLetterManagementPort.getNearbyLetter(
267+ userId = DomainId (query.userId),
268+ letterId = DomainId (query.letterId),
269+ )
270+ } returns Pair (prevIndependentLetter, nextIndependentLetter)
271+ every {
272+ mockIndependentLetterManagementPort.countIndependentLetterByReceiverId(DomainId (query.userId))
273+ } returns 3
274+
196275 val response = letterQueryService.get(query)
197276 then(" 편지 정보를 가져와야 한다" ) {
198277 response.senderName shouldBe independentLetter.sender.senderName
@@ -211,6 +290,42 @@ class LetterQueryServiceTest :
211290 }
212291 }
213292 }
293+
294+ `when `(" 비회원이 보낸 독립 편지가 존재하면" ) {
295+ val anonymousIndependentLetter =
296+ LetterFixture .generateIndependentLetter(
297+ senderId = null ,
298+ senderName = " 비회원 발신자" ,
299+ receiverId = DomainId (query.userId),
300+ )
301+ every {
302+ mockIndependentLetterManagementPort.getIndependentLetterByIdNotNull(
303+ DomainId (query.letterId),
304+ DomainId (query.userId),
305+ )
306+ } returns anonymousIndependentLetter
307+ every {
308+ mockIndependentLetterManagementPort.getNearbyLetter(
309+ userId = DomainId (query.userId),
310+ letterId = DomainId (query.letterId),
311+ )
312+ } returns Pair (null , null )
313+ every {
314+ mockIndependentLetterManagementPort.countIndependentLetterByReceiverId(DomainId (query.userId))
315+ } returns 1
316+
317+ val response = letterQueryService.get(query)
318+ then(" 비회원 발신자 이름이 정상적으로 표시되어야 한다" ) {
319+ response.senderName shouldBe " 비회원 발신자"
320+ response.letterCount shouldBe 1
321+ response.content shouldBe anonymousIndependentLetter.content.content
322+ response.sendDate shouldBe anonymousIndependentLetter.receiveDate
323+ response.images shouldBe anonymousIndependentLetter.content.images
324+ response.templateType shouldBe anonymousIndependentLetter.content.templateType
325+ response.prevLetter shouldBe null
326+ response.nextLetter shouldBe null
327+ }
328+ }
214329 }
215330
216331 given(" 전체 편지 조회 요청이 들어올 떄" ) {
0 commit comments