@@ -44,29 +44,31 @@ void getWeeklyReport() {
4444
4545 // [Insight] 생성자 대신 정의된 @Builder를 사용하여 가독성 확보
4646 UserNewsletter un1 = UserNewsletter .builder ()
47- .depthType (DepthType .LIGHT )
48- .perspectiveType (PerspectiveType .NOW )
49- .lastViewedAt (LocalDateTime .now ())
50- .build ();
47+ .depthType (DepthType .LIGHT )
48+ .perspectiveType (PerspectiveType .NOW )
49+ .lastViewedAt (LocalDateTime .now ())
50+ .build ();
5151
5252 UserNewsletter un2 = UserNewsletter .builder ()
53- .depthType (DepthType .DEEP )
54- .perspectiveType (PerspectiveType .FUTURE )
55- .lastViewedAt (LocalDateTime .now ())
56- .build ();
53+ .depthType (DepthType .DEEP )
54+ .perspectiveType (PerspectiveType .FUTURE )
55+ .lastViewedAt (LocalDateTime .now ())
56+ .build ();
5757
5858 when (userNewsletterRepository .findByUserIdAndCreatedAtBetween (eq (userId ), any (), any ()))
59- .thenReturn (List .of (un1 ));
59+ .thenReturn (List .of (un1 ));
60+ // Balance calculation now uses read newsletters, so un1 (Light) must be in this
61+ // list to pass assertThat(lightCount).isEqualTo(1)
6062 when (userNewsletterRepository .findByUserIdAndLastViewedAtBetweenAndIsReadTrue (eq (userId ), any (), any ()))
61- .thenReturn (List .of (un2 ));
63+ .thenReturn (List .of (un1 , un2 ));
6264
6365 // when
6466 WeeklyReportResponse response = reportService .getWeeklyReport (userId );
6567
6668 // then
6769 assertThat (response ).isNotNull ();
6870 assertThat (response .totalSavedCount ()).isEqualTo (1 );
69- assertThat (response .totalReadCount ()).isEqualTo (1 );
71+ assertThat (response .totalReadCount ()).isEqualTo (2 );
7072 assertThat (response .lightCount ()).isEqualTo (1 ); // un1 기준
7173 assertThat (response .nowCount ()).isEqualTo (1 );
7274 }
@@ -78,25 +80,25 @@ void getConsumption() {
7880 Long userId = 1L ;
7981
8082 Newsletter newsletter = Newsletter .builder ()
81- .title ("Test Title" )
82- .contentUrl ("http://test.com" )
83- .build ();
83+ .title ("Test Title" )
84+ .contentUrl ("http://test.com" )
85+ .build ();
8486
8587 // [Reason] Newsletter 빌더에 없는 필드(id, category)만 리플렉션 사용
8688 ReflectionTestUtils .setField (newsletter , "id" , 100L );
8789 ReflectionTestUtils .setField (newsletter , "category" , "IT/Science" );
8890
8991 UserNewsletter un = UserNewsletter .builder ()
90- .newsletter (newsletter )
91- .lastViewedAt (LocalDateTime .now ())
92- .build ();
92+ .newsletter (newsletter )
93+ .lastViewedAt (LocalDateTime .now ())
94+ .build ();
9395
9496 when (userNewsletterRepository .findByUserIdAndCreatedAtBetween (eq (userId ), any (), any ()))
95- .thenReturn (Collections .emptyList ());
97+ .thenReturn (Collections .emptyList ());
9698 when (userNewsletterRepository .findByUserIdAndLastViewedAtBetweenAndIsReadTrue (eq (userId ), any (), any ()))
97- .thenReturn (Collections .emptyList ());
99+ .thenReturn (Collections .emptyList ());
98100 when (userNewsletterRepository .findByUserIdAndIsReadTrueOrderByLastViewedAtDesc (userId ))
99- .thenReturn (List .of (un ));
101+ .thenReturn (List .of (un ));
100102
101103 // when
102104 ConsumptionResponse response = reportService .getConsumption (userId );
@@ -118,19 +120,19 @@ void getGapAnalysis_ShouldReturnTopicIds() {
118120 ReflectionTestUtils .setField (topic , "id" , topicId ); // ID는 수동 주입
119121
120122 UserNewsletter savedUn = UserNewsletter .builder ()
121- .topic (topic )
122- .lastViewedAt (LocalDateTime .now ())
123- .build ();
123+ .topic (topic )
124+ .lastViewedAt (LocalDateTime .now ())
125+ .build ();
124126
125127 UserNewsletter readUn = UserNewsletter .builder ()
126- .topic (topic )
127- .lastViewedAt (LocalDateTime .now ())
128- .build ();
128+ .topic (topic )
129+ .lastViewedAt (LocalDateTime .now ())
130+ .build ();
129131
130132 when (userNewsletterRepository .findByUserIdAndCreatedAtBetween (eq (userId ), any (), any ()))
131- .thenReturn (List .of (savedUn , savedUn )); // 2개 저장
133+ .thenReturn (List .of (savedUn , savedUn )); // 2개 저장
132134 when (userNewsletterRepository .findByUserIdAndLastViewedAtBetweenAndIsReadTrue (eq (userId ), any (), any ()))
133- .thenReturn (List .of (readUn )); // 1개 읽음
135+ .thenReturn (List .of (readUn )); // 1개 읽음
134136
135137 // when
136138 var response = reportService .getGapAnalysis (userId );
@@ -153,7 +155,7 @@ void getBalance_PatternCheck() {
153155 UserNewsletter deep = UserNewsletter .builder ().depthType (DepthType .DEEP ).build ();
154156
155157 when (userNewsletterRepository .findByUserIdAndLastViewedAtBetweenAndIsReadTrue (eq (userId ), any (), any ()))
156- .thenReturn (List .of (light , light , deep ));
158+ .thenReturn (List .of (light , light , deep ));
157159
158160 // when
159161 var response = reportService .getBalance (userId );
@@ -169,9 +171,9 @@ void getBalance_PatternCheck() {
169171 void getWeeklyReport_Empty () {
170172 // given
171173 when (userNewsletterRepository .findByUserIdAndCreatedAtBetween (any (), any (), any ()))
172- .thenReturn (Collections .emptyList ());
174+ .thenReturn (Collections .emptyList ());
173175 when (userNewsletterRepository .findByUserIdAndLastViewedAtBetweenAndIsReadTrue (any (), any (), any ()))
174- .thenReturn (Collections .emptyList ());
176+ .thenReturn (Collections .emptyList ());
175177
176178 // when
177179 WeeklyReportResponse response = reportService .getWeeklyReport (1L );
0 commit comments