View Javadoc

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   * Created with IntelliJ IDEA.
40   * User: PJ7789
41   * Date: 18/12/12
42   * Time: 6:59 PM
43   * To change this template use File | Settings | File Templates.
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 //        Mockito.when(mockGlobalVariables.getUserSession()).thenReturn(new UserSession("user"));
163 //        Mockito.when(GlobalVariables.getUserSession().getLoggedInUserPrincipalName()).thenReturn("user");
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 }