1818
1919package org .comixedproject .rest .comicfiles ;
2020
21+ import static org .comixedproject .rest .comicfiles .ComicFileController .COMIC_FILES ;
2122import static org .junit .Assert .*;
2223
24+ import com .fasterxml .jackson .core .JsonProcessingException ;
25+ import com .fasterxml .jackson .databind .ObjectMapper ;
26+ import jakarta .servlet .http .HttpSession ;
2327import java .io .IOException ;
2428import java .util .List ;
2529import java .util .Random ;
2630import org .apache .commons .lang .math .RandomUtils ;
2731import org .comixedproject .adaptors .AdaptorException ;
2832import org .comixedproject .model .comicfiles .ComicFileGroup ;
2933import org .comixedproject .model .metadata .FilenameMetadata ;
30- import org .comixedproject .model .net .comicfiles .FilenameMetadataRequest ;
31- import org .comixedproject .model .net .comicfiles .FilenameMetadataResponse ;
32- import org .comixedproject .model .net .comicfiles .GetAllComicsUnderRequest ;
33- import org .comixedproject .model .net .comicfiles .ImportComicFilesRequest ;
34- import org .comixedproject .model .net .comicfiles .LoadComicFilesResponse ;
34+ import org .comixedproject .model .net .comicfiles .*;
3535import org .comixedproject .service .comicfiles .ComicFileService ;
3636import org .comixedproject .service .metadata .FilenameScrapingRuleService ;
3737import org .junit .jupiter .api .Test ;
3838import org .junit .jupiter .api .extension .ExtendWith ;
39- import org .mockito .*;
39+ import org .mockito .InjectMocks ;
40+ import org .mockito .Mock ;
41+ import org .mockito .Mockito ;
4042import org .mockito .junit .jupiter .MockitoExtension ;
4143import org .springframework .batch .core .JobParametersInvalidException ;
4244import org .springframework .batch .core .repository .JobExecutionAlreadyRunningException ;
@@ -57,13 +59,58 @@ class ComicFileControllerTest {
5759 private static final String TEST_ISSUE_NUMBER = "983a" ;
5860 private static final Boolean TEST_SKIP_METADATA = RandomUtils .nextBoolean ();
5961 private static final Boolean TEST_SKIP_BLOCKING_PAGES = RandomUtils .nextBoolean ();
62+ private static final String TEST_ENCODED_COMIC_FILES = "The encoded comic file list" ;
6063
6164 @ InjectMocks private ComicFileController controller ;
6265 @ Mock private ComicFileService comicFileService ;
6366 @ Mock private FilenameScrapingRuleService filenameScrapingRuleService ;
67+ @ Mock private ObjectMapper objectMapper ;
6468 @ Mock private List <ComicFileGroup > comicFileGroupList ;
6569 @ Mock private List <String > filenameList ;
6670 @ Mock private FilenameMetadata filenameMetadata ;
71+ @ Mock private HttpSession session ;
72+
73+ @ Test
74+ void loadComicFilesFromSession () throws JsonProcessingException {
75+ Mockito .when (session .getAttribute (COMIC_FILES )).thenReturn (TEST_ENCODED_COMIC_FILES );
76+ Mockito .when (objectMapper .readValue (Mockito .anyString (), Mockito .any (Class .class )))
77+ .thenReturn (comicFileGroupList );
78+
79+ final LoadComicFilesResponse result = controller .loadComicFilesFromSession (session );
80+
81+ assertNotNull (result );
82+ assertSame (comicFileGroupList , result .getGroups ());
83+
84+ Mockito .verify (session , Mockito .times (1 )).getAttribute (COMIC_FILES );
85+ Mockito .verify (objectMapper , Mockito .times (1 )).readValue (TEST_ENCODED_COMIC_FILES , List .class );
86+ }
87+
88+ @ Test
89+ void loadComicFilesFromSession_nothingStored () throws JsonProcessingException {
90+ Mockito .when (session .getAttribute (COMIC_FILES )).thenReturn (null );
91+
92+ final LoadComicFilesResponse result = controller .loadComicFilesFromSession (session );
93+
94+ assertNull (result );
95+
96+ Mockito .verify (session , Mockito .times (1 )).getAttribute (COMIC_FILES );
97+ Mockito .verify (objectMapper , Mockito .never ())
98+ .readValue (Mockito .anyString (), Mockito .any (Class .class ));
99+ }
100+
101+ @ Test
102+ void loadComicFilesFromSession_parsingError () throws JsonProcessingException {
103+ Mockito .when (session .getAttribute (COMIC_FILES )).thenReturn (TEST_ENCODED_COMIC_FILES );
104+ Mockito .when (objectMapper .readValue (Mockito .anyString (), Mockito .any (Class .class )))
105+ .thenThrow (JsonProcessingException .class );
106+
107+ final LoadComicFilesResponse result = controller .loadComicFilesFromSession (session );
108+
109+ assertNull (result );
110+
111+ Mockito .verify (session , Mockito .times (1 )).getAttribute (COMIC_FILES );
112+ Mockito .verify (objectMapper , Mockito .times (1 )).readValue (TEST_ENCODED_COMIC_FILES , List .class );
113+ }
67114
68115 @ Test
69116 void getImportFileCoverServiceThrowsException () throws AdaptorException {
@@ -91,33 +138,43 @@ void getImportFileCover() throws AdaptorException {
91138 }
92139
93140 @ Test
94- void getAllComicsUnderNoLimit () throws IOException {
141+ void loadComicFiles_noLimit () throws IOException {
95142 Mockito .when (comicFileService .getAllComicsUnder (Mockito .anyString (), Mockito .anyInt ()))
96143 .thenReturn (comicFileGroupList );
144+ Mockito .when (objectMapper .writeValueAsString (Mockito .any ()))
145+ .thenReturn (TEST_ENCODED_COMIC_FILES );
97146
98147 final LoadComicFilesResponse response =
99- controller .loadComicFiles (new GetAllComicsUnderRequest (TEST_DIRECTORY , TEST_NO_LIMIT ));
148+ controller .loadComicFiles (
149+ session , new GetAllComicsUnderRequest (TEST_DIRECTORY , TEST_NO_LIMIT ));
100150
101151 assertNotNull (response );
102152 assertSame (comicFileGroupList , response .getGroups ());
103153
104154 Mockito .verify (comicFileService , Mockito .times (1 ))
105155 .getAllComicsUnder (TEST_DIRECTORY , TEST_NO_LIMIT );
156+ Mockito .verify (objectMapper , Mockito .times (1 )).writeValueAsString (comicFileGroupList );
157+ Mockito .verify (session , Mockito .times (1 )).setAttribute (COMIC_FILES , TEST_ENCODED_COMIC_FILES );
106158 }
107159
108160 @ Test
109- void getAllComicsUnder () throws IOException {
161+ void loadComicFiles_withLimit () throws IOException {
110162 Mockito .when (comicFileService .getAllComicsUnder (Mockito .anyString (), Mockito .anyInt ()))
111163 .thenReturn (comicFileGroupList );
164+ Mockito .when (objectMapper .writeValueAsString (Mockito .any ()))
165+ .thenReturn (TEST_ENCODED_COMIC_FILES );
112166
113167 final LoadComicFilesResponse response =
114- controller .loadComicFiles (new GetAllComicsUnderRequest (TEST_DIRECTORY , TEST_LIMIT ));
168+ controller .loadComicFiles (
169+ session , new GetAllComicsUnderRequest (TEST_DIRECTORY , TEST_LIMIT ));
115170
116171 assertNotNull (response );
117172 assertSame (comicFileGroupList , response .getGroups ());
118173
119174 Mockito .verify (comicFileService , Mockito .times (1 ))
120175 .getAllComicsUnder (TEST_DIRECTORY , TEST_LIMIT );
176+ Mockito .verify (objectMapper , Mockito .times (1 )).writeValueAsString (comicFileGroupList );
177+ Mockito .verify (session , Mockito .times (1 )).setAttribute (COMIC_FILES , TEST_ENCODED_COMIC_FILES );
121178 }
122179
123180 @ Test
0 commit comments