1 package org.kuali.ole.describe.controller;
2
3 import org.apache.struts.mock.MockHttpSession;
4 import org.junit.Before;
5 import org.junit.Test;
6 import org.junit.runner.RunWith;
7 import org.kuali.ole.describe.bo.ImportBibConfirmReplace;
8 import org.kuali.ole.describe.bo.ImportBibSearch;
9 import org.kuali.ole.describe.bo.ImportBibUserPreferences;
10 import org.kuali.ole.describe.controller.ImportBibController;
11 import org.kuali.ole.describe.form.ImportBibForm;
12 import org.kuali.ole.docstore.discovery.model.SearchParams;
13 import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.DataField;
14 import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.WorkBibMarcRecord;
15 import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.WorkBibMarcRecords;
16 import org.kuali.ole.docstore.model.xstream.work.bib.marc.WorkBibMarcRecordProcessor;
17 import org.kuali.ole.ingest.FileUtil;
18 import org.kuali.rice.krad.uif.UifParameters;
19 import org.mockito.Mock;
20 import org.mockito.Mockito;
21 import org.mockito.MockitoAnnotations;
22 import org.springframework.mock.web.MockMultipartFile;
23 import org.springframework.test.context.ContextConfiguration;
24 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
25 import org.springframework.test.context.transaction.TransactionConfiguration;
26 import org.springframework.util.FileCopyUtils;
27 import org.springframework.validation.BindingResult;
28 import org.springframework.web.servlet.ModelAndView;
29
30 import javax.servlet.http.HttpServletRequest;
31 import javax.servlet.http.HttpServletResponse;
32 import java.io.File;
33 import java.net.URL;
34
35 import static org.junit.Assert.*;
36
37
38
39
40
41
42
43
44
45 @ContextConfiguration(locations = {"classpath:/org/kuali/ole/BootStrapSpringBeans.xml"})
46 @RunWith(value = SpringJUnit4ClassRunner.class)
47 @TransactionConfiguration(defaultRollback = true)
48 public class ImportBibController_UT {
49
50 @Mock
51 private BindingResult mockResult;
52 @Mock
53 private HttpServletRequest mockRequest;
54 @Mock
55 private HttpServletResponse mockResponse;
56 @Mock
57 private ModelAndView mockModelView;
58 @Mock
59 private ImportBibForm mockForm;
60
61 @Before
62 public void setUp() throws Exception {
63 MockitoAnnotations.initMocks(this);
64 System.setProperty("app.environment", "local");
65 }
66
67
68
69 @Test
70 public void testLoad() throws Exception {
71 mockForm = new ImportBibForm();
72 byte[] fileContent = FileCopyUtils.copyToByteArray(getClass().getResourceAsStream("aaUnicodeBib.mrc"));
73 ImportBibSearch importBibSearch = new ImportBibSearch();
74 importBibSearch.setLocationFile(new MockMultipartFile("aaUnicodeBib.mrc", "aaUnicodeBib.mrc", "UTF_8", fileContent));
75 mockForm.setImportBibSearch(importBibSearch);
76 MockImportBibController importBibController = new MockImportBibController();
77 Mockito.when(mockRequest.getSession()).thenReturn(new MockHttpSession());
78 ModelAndView modelAndView = importBibController.load(mockForm, mockResult, mockRequest, mockResponse);
79 }
80
81 @Test
82 public void testSearch() throws Exception {
83 mockForm = new ImportBibForm();
84 ImportBibSearch importBibSearch = new ImportBibSearch();
85 importBibSearch.setSource("1");
86 SearchParams searchParams = new SearchParams();
87 mockForm.setImportBibSearch(importBibSearch);
88 mockForm.setSearchParams(searchParams);
89 MockImportBibController importBibController = new MockImportBibController();
90 ModelAndView modelAndView = importBibController.search(mockForm, mockResult, mockRequest, mockResponse);
91 }
92
93 @Test
94 public void testClearSearch() throws Exception {
95 mockForm = new ImportBibForm();
96 ImportBibSearch importBibSearch = new ImportBibSearch();
97 SearchParams searchParams = new SearchParams();
98 mockForm.setImportBibSearch(importBibSearch);
99 mockForm.setSearchParams(searchParams);
100 MockImportBibController importBibController = new MockImportBibController();
101 ModelAndView modelAndView = importBibController.clearSearch(mockForm, mockResult, mockRequest, mockResponse);
102 }
103
104
105 @Test
106 public void testClearFile() throws Exception {
107 mockForm = new ImportBibForm();
108 ImportBibSearch importBibSearch = new ImportBibSearch();
109 mockForm.setImportBibSearch(importBibSearch);
110 MockImportBibController importBibController = new MockImportBibController();
111 ModelAndView modelAndView = importBibController.clearFile(mockForm, mockResult, mockRequest, mockResponse);
112 }
113
114 @Test
115 public void testActionLink() throws Exception {
116 WorkBibMarcRecords marcRecords = getMarcRec();
117 Mockito.when(mockForm.getActionParamaterValue((UifParameters.SELECTED_LINE_INDEX))).thenReturn("1");
118 Mockito.when(mockForm.getWorkBibMarcRecordList()).thenReturn(marcRecords.getRecords());
119 MockImportBibController importBibController = new MockImportBibController();
120 ModelAndView modelAndView = importBibController.actionLink(mockForm, mockResult, mockRequest, mockResponse);
121 }
122
123 @Test
124 public void testlocalNext() throws Exception {
125 mockForm = new ImportBibForm();
126 MockImportBibController importBibController = new MockImportBibController();
127 byte[] fileContent = FileCopyUtils.copyToByteArray(getClass().getResourceAsStream("aaUnicodeBib.mrc"));
128 ImportBibSearch importBibSearch = new ImportBibSearch();
129 importBibSearch.setLocationFile(new MockMultipartFile("aaUnicodeBib.mrc", "aaUnicodeBib.mrc", "UTF_8", fileContent));
130 mockForm.setImportBibSearch(importBibSearch);
131 Mockito.when(mockRequest.getSession()).thenReturn(new MockHttpSession());
132 importBibController.load(mockForm, mockResult, mockRequest, mockResponse);
133 ModelAndView modelAndView = importBibController.next(mockForm, mockResult, mockRequest, mockResponse);
134 }
135
136 @Test
137 public void testUserPrefLoad() throws Exception {
138 mockForm = new ImportBibForm();
139 WorkBibMarcRecords marcRecords = getMarcRec();
140 ImportBibUserPreferences importBibUserPreferences = new ImportBibUserPreferences();
141 setUserPref(importBibUserPreferences);
142 mockForm.setImportBibUserPreferences(importBibUserPreferences);
143 mockForm.setNewWorkBibMarcRecord(marcRecords.getRecords().get(0));
144 mockForm.setExistingWorkBibMarcRecord(marcRecords.getRecords().get(1));
145 MockImportBibController importBibController = new MockImportBibController();
146 Mockito.when(mockRequest.getSession()).thenReturn(new MockHttpSession());
147 ModelAndView modelAndView = importBibController.loadUserPref(mockForm, mockResult, mockRequest, mockResponse);
148 }
149
150
151 @Test
152 public void testUserPrefNewImport() throws Exception {
153 mockForm = new ImportBibForm();
154 WorkBibMarcRecords marcRecords = getMarcRec();
155 ImportBibUserPreferences importBibUserPreferences = new ImportBibUserPreferences();
156 setUserPref(importBibUserPreferences);
157 mockForm.setImportBibUserPreferences(importBibUserPreferences);
158 mockForm.setNewWorkBibMarcRecord(marcRecords.getRecords().get(0));
159 mockForm.setExistingWorkBibMarcRecord(marcRecords.getRecords().get(1));
160 Mockito.when(mockRequest.getSession()).thenReturn(new MockHttpSession());
161 MockImportBibController importBibController = new MockImportBibController();
162
163
164 ModelAndView modelAndView = importBibController.userPrefNext(mockForm, mockResult, mockRequest, mockResponse);
165 WorkBibMarcRecord marcRec = mockForm.getNewWorkBibMarcRecord();
166 for(DataField df : marcRec.getDataFields()){
167 assertNotSame("This field is in Admin removal tags and not available in marc rec", "049", df.getTag());
168 assertNotSame("This field is in user removal tags and not available in marc rec", "035", df.getTag());
169 assertNotNull("This field is in admin Protected tags and should be available in marc rec", "040".equalsIgnoreCase(df.getTag()));
170 assertNotNull("This field is in user Protected tags and should be available in marc rec", "012".equalsIgnoreCase(df.getTag()));
171 }
172 }
173
174
175
176 @Test
177 public void testUserPrefOverLayImport() throws Exception {
178 mockForm = new ImportBibForm();
179 WorkBibMarcRecords marcRecords = getMarcRec();
180 ImportBibUserPreferences importBibUserPreferences = new ImportBibUserPreferences();
181 setUserPref(importBibUserPreferences);
182 importBibUserPreferences.setImportType("overLay");
183 mockForm.setImportBibUserPreferences(importBibUserPreferences);
184 mockForm.setNewWorkBibMarcRecord(marcRecords.getRecords().get(0));
185 mockForm.setExistingWorkBibMarcRecord(marcRecords.getRecords().get(1));
186 mockForm.setUuid("1234");
187 Mockito.when(mockRequest.getSession()).thenReturn( new MockHttpSession());
188 MockImportBibController importBibController = new MockImportBibController();
189 ModelAndView modelAndView = importBibController.userPrefNext(mockForm, mockResult, mockRequest, mockResponse);
190 WorkBibMarcRecord marcRec = mockForm.getNewWorkBibMarcRecord();
191 for(DataField df : marcRec.getDataFields()){
192 assertNotSame("This field is in Admin removal tags and should not be available in marc rec", "049", df.getTag());
193 assertNotSame("This field is in user removal tags and should not be available in marc rec" , "035", df.getTag());
194 assertNotNull("This field is in admin Protected tags and should be available in marc rec", "040".equalsIgnoreCase(df.getTag()));
195 assertNotNull("This field is in user Protected tags and should be available in marc rec", "012".equalsIgnoreCase(df.getTag()));
196 if(df.getTag().equalsIgnoreCase("040")){
197 for(int i=0; i<=df.getSubFields().size(); i++){
198 assertEquals( df.getSubFields().get(0).getValue(), "CIN");
199 assertEquals( df.getSubFields().get(1).getValue(), "m.c.");
200 assertEquals( df.getSubFields().get(2).getValue(), "OCL");
201 }
202 }
203 }
204 }
205
206
207
208 @Test
209 public void testUserPrefOverLayMatchPointImport() throws Exception {
210 mockForm = new ImportBibForm();
211 WorkBibMarcRecords marcRecords = getMarcRec();
212 ImportBibUserPreferences importBibUserPreferences = new ImportBibUserPreferences();
213 setUserPref(importBibUserPreferences);
214 importBibUserPreferences.setImportType("overLayMatchPoint");
215 mockForm.setImportBibUserPreferences(importBibUserPreferences);
216 mockForm.setNewWorkBibMarcRecord(marcRecords.getRecords().get(0));
217 Mockito.when(mockRequest.getSession()).thenReturn(new MockHttpSession());
218 mockForm.setImportBibConfirmReplace(new ImportBibConfirmReplace());
219 MockImportBibController importBibController = new MockImportBibController();
220 ModelAndView modelAndView = importBibController.userPrefNext(mockForm, mockResult, mockRequest, mockResponse);
221 WorkBibMarcRecord marcRec = mockForm.getNewWorkBibMarcRecord();
222 for(DataField df : marcRec.getDataFields()){
223 assertNotSame("This field is in Admin removal tags and not available in marc rec", "049", df.getTag());
224 assertNotSame("This field is in user removal tags and not available in marc rec" , "035", df.getTag());
225 assertNotNull("This field is in admin Protected tags and should be available in marc rec", "040".equalsIgnoreCase(df.getTag()));
226 assertNotNull("This field is in user Protected tags and should be available in marc rec", "012".equalsIgnoreCase(df.getTag()));
227 }
228 }
229
230 @Test
231 public void testUserPrefTagsValidation() throws Exception {
232 mockForm = new ImportBibForm();
233 WorkBibMarcRecords marcRecords = getMarcRec();
234 ImportBibUserPreferences importBibUserPreferences = new ImportBibUserPreferences();
235 setUserPref(importBibUserPreferences);
236 importBibUserPreferences.setImportType("newImport");
237 importBibUserPreferences.setRemovalTags("070,035");
238 mockForm.setImportBibUserPreferences(importBibUserPreferences);
239 mockForm.setNewWorkBibMarcRecord(marcRecords.getRecords().get(0));
240 mockForm.setUuid(marcRecords.getRecords().get(0).getControlFields().get(0).getValue());
241 Mockito.when(mockRequest.getSession()).thenReturn( new MockHttpSession());
242 MockImportBibController importBibController = new MockImportBibController();
243 ModelAndView modelAndView = importBibController.userPrefNext(mockForm, mockResult, mockRequest, mockResponse);
244 WorkBibMarcRecord marcRec = mockForm.getNewWorkBibMarcRecord();
245 for(DataField df : marcRec.getDataFields()){
246 assertNotSame("This field is in Admin removal tags and not available in marc rec", "049", df.getTag());
247 assertNotSame("This field is in user removal tags and not available in marc rec" , "035", df.getTag());
248 assertNotNull("This field is in admin Protected tags and should be available in marc rec", "040".equalsIgnoreCase(df.getTag()));
249 assertNotNull("This field is in user Protected tags and should be available in marc rec", "012".equalsIgnoreCase(df.getTag()));
250 }
251 }
252
253 @Test
254 public void testUserPrefCallNumValidation() throws Exception {
255 mockForm = new ImportBibForm();
256 WorkBibMarcRecords marcRecords = getMarcRec();
257 ImportBibUserPreferences importBibUserPreferences = new ImportBibUserPreferences();
258 setUserPref(importBibUserPreferences);
259 importBibUserPreferences.setImportType("newImport");
260 importBibUserPreferences.setCallNumberSource2("020a");
261 mockForm.setImportBibUserPreferences(importBibUserPreferences);
262 mockForm.setNewWorkBibMarcRecord(marcRecords.getRecords().get(0));
263 Mockito.when(mockRequest.getSession()).thenReturn( new MockHttpSession());
264 MockImportBibController importBibController = new MockImportBibController();
265 ModelAndView modelAndView = importBibController.userPrefNext(mockForm, mockResult, mockRequest, mockResponse);
266 }
267
268 @Test
269 public void testLoadImportBibSearch() throws Exception {
270 mockForm = new ImportBibForm();
271 WorkBibMarcRecords marcRecords = getMarcRec();
272 ImportBibUserPreferences importBibUserPreferences = new ImportBibUserPreferences();
273 setUserPref(importBibUserPreferences);
274 importBibUserPreferences.setImportType("newImport");
275 importBibUserPreferences.setCallNumberSource2("020a");
276 mockForm.setImportBibUserPreferences(importBibUserPreferences);
277 mockForm.setNewWorkBibMarcRecord(marcRecords.getRecords().get(0));
278 mockForm.setUuid("123456");
279 Mockito.when(mockRequest.getSession()).thenReturn( new MockHttpSession());
280 MockImportBibController importBibController = new MockImportBibController();
281 ModelAndView modelAndView = importBibController.userPrefNext(mockForm, mockResult, mockRequest, mockResponse);
282 }
283
284
285
286
287
288 private WorkBibMarcRecords getMarcRec() throws Exception {
289 URL resource = getClass().getResource("sample-marc-mrc.xml");
290 File file = new File(resource.toURI());
291 String xmlContent = new FileUtil().readFile(file);
292 WorkBibMarcRecordProcessor workBibMarcRecordProcessor = new WorkBibMarcRecordProcessor();
293 WorkBibMarcRecords marcRecords = workBibMarcRecordProcessor.fromXML(xmlContent);
294 return marcRecords;
295 }
296
297 private void setUserPref(ImportBibUserPreferences importBibUserPreferences) {
298 importBibUserPreferences.setPrefId(1);
299 importBibUserPreferences.setPrefId1("1");
300 importBibUserPreferences.setPrefName("adminImport");
301 importBibUserPreferences.setImportType("newImport");
302 importBibUserPreferences.setPermLocation("B-MUSIC/BMUCIRCDESK");
303 importBibUserPreferences.setTempLocation("B-SWAIN/BSWCIRCDESK");
304 importBibUserPreferences.setAdminRemovalTags("030,045,049");
305 importBibUserPreferences.setRemovalTags("070,035");
306 importBibUserPreferences.setAdminProtectedTags("040,650");
307 importBibUserPreferences.setProtectedTags("651,998,012");
308 importBibUserPreferences.setShelvingScheme("LCC");
309 importBibUserPreferences.setCallNumberSource1("050");
310 importBibUserPreferences.setCallNumberSource2("020");
311 importBibUserPreferences.setCallNumberSource3("300");
312 importBibUserPreferences.setImportStatus("None");
313 }
314
315
316 private class MockImportBibController
317 extends ImportBibController {
318 @Override
319 protected ModelAndView callSuper(BindingResult result, HttpServletRequest request, HttpServletResponse response,
320 ImportBibForm importBibForm) {
321 return mockModelView;
322 }
323 }
324 }