1111import org .mockito .Mock ;
1212import org .mockito .MockitoAnnotations ;
1313import org .mockito .junit .jupiter .MockitoExtension ;
14+ import org .springframework .util .Assert ;
15+
1416import java .util .Optional ;
1517import java .util .UUID ;
1618
@@ -158,4 +160,94 @@ void testCreateBook_RepositoryReturnsNull_HandlesGracefully() {
158160 testBookService .createBook (validBookRequest );
159161 });
160162 }
163+
164+ // ----- EDGE cases ---------
165+ @ Test
166+ void testCreateBook_VeryLongTitle_Success () {
167+ // Arrange
168+ String longTitle = "A" .repeat (500 );
169+ BookRequest longTitleRequest = new BookRequest (longTitle , "Synopsis" , "Author" );
170+
171+ Book expectedBook = Book .builder ()
172+ .id (testId )
173+ .title (longTitle )
174+ .synopsis ("Synopsis" )
175+ .author ("Author" )
176+ .build ();
177+
178+ when (testBookRepository .save (any (Book .class )))
179+ .thenReturn (expectedBook );
180+
181+ // Act
182+ Book result = testBookService .createBook (longTitleRequest );
183+
184+ // Assert
185+ assertNotNull (result );
186+ assertEquals (testId , result .getId ());
187+ assertEquals (longTitle , result .getTitle ());
188+ assertEquals (expectedBook .getSynopsis (), result .getSynopsis ());
189+ assertEquals (expectedBook .getAuthor (), result .getAuthor ());
190+
191+ // Did the service perform the correct action on its dependency?
192+ verify (testBookRepository , times (1 )).save (any (Book .class ));
193+
194+ }
195+
196+ @ Test
197+ void testCreateBook_VeryLongSynopsis_Success () {
198+
199+ // Arrange
200+ String longSynopsis = "A" .repeat (1000 );
201+ BookRequest longSynopsisRequest = new BookRequest ("Title" , longSynopsis , "Author" );
202+
203+ Book expectedBook = Book .builder ()
204+ .id (testId )
205+ .title ("Title" )
206+ .synopsis (longSynopsis )
207+ .author ("Author" )
208+ .build ();
209+
210+ when (testBookRepository .save (any (Book .class )))
211+ .thenReturn (expectedBook );
212+
213+ // Act
214+ Book result = testBookService .createBook (longSynopsisRequest );
215+
216+ // Assert
217+ assertEquals (longSynopsis , result .getSynopsis ());
218+
219+ }
220+
221+ @ Test
222+ void testCreateBook_SpecialCharactersInTitle_Success () {
223+ // Arrange
224+ BookRequest specialRequest = new BookRequest (
225+ "Test: A Book! @#$%^&*()" ,
226+ "Synopsis" ,
227+ "Author"
228+ );
229+
230+ Book expectedBook = Book .builder ()
231+ .id (testId )
232+ .title (specialRequest .getTitle ())
233+ .synopsis (specialRequest .getSynopsis ())
234+ .author (specialRequest .getAuthor ())
235+ .build ();
236+
237+ when (testBookRepository .save (any (Book .class )))
238+ .thenReturn (expectedBook );
239+
240+ // Act
241+ Book result = testBookService .createBook (specialRequest );
242+
243+ // Assert
244+ assertNotNull (result );
245+ assertEquals (testId , result .getId ());
246+ assertEquals (specialRequest .getTitle (), result .getTitle ());
247+ assertEquals (specialRequest .getSynopsis (), result .getSynopsis ());
248+ assertEquals (specialRequest .getAuthor (), result .getAuthor ());
249+
250+ // Did the service perform the correct action on its dependency?
251+ verify (testBookRepository , times (1 )).save (any (Book .class ));
252+ }
161253}
0 commit comments