package no.dusken.aranea.admin.control;
import no.dusken.aranea.model.Article;
import no.dusken.aranea.model.Image;
import no.dusken.aranea.model.PageImage;
import no.dusken.aranea.service.ImageService;
import no.dusken.aranea.service.PageService;
import no.dusken.common.service.GenericService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.mock.web.MockMultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import static junit.framework.Assert.assertEquals;
import static org.mockito.Mockito.*;
/**
* @author Benjamin Bjørnseth <benjamin@underdusken.no>
*/
@RunWith(MockitoJUnitRunner.class)
public class SavePageImageControllerTest {
private SavePageImageController savePageImageController;
@Mock
private PageService pageService;
@Mock
private PageImageOnSubmit pageImageSubmit;
@Mock
private ImageService imageService;
@Mock
private GenericService<PageImage> genericService;
@Before
public void setUp() throws Exception {
savePageImageController = new SavePageImageController();
savePageImageController.setPageService(pageService);
savePageImageController.setPageImageSubmit(pageImageSubmit);
savePageImageController.setImageService(imageService);
savePageImageController.setGenericService(genericService);
}
@Test
public void testUploadImage() throws Exception {
Article a = new Article();
a.setID(408L);
when(pageService.getEntity(408L)).thenReturn(a);
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest();
PageImage pageImage = new PageImage();
pageImage.setPage(a);
pageImage.setText("testText");
pageImage.setImage(new Image());
when(pageImageSubmit.handlePageImageSubmit(pageImage, request)).thenReturn(pageImage);
request.setParameter("pageID", "408");
request.setParameter("text", "testText");
MultipartFile file = new MockMultipartFile("file", new byte[]{1, 2, 3, 4});
request.addFile(file);
MockHttpServletResponse response = new MockHttpServletResponse();
ModelAndView mav = savePageImageController.handleRequestInternal(request, response);
assertEquals("viewName was wrong", "redirect:/admin/editArticle.do?ID=408", mav.getViewName());
verify(pageImageSubmit).handlePageImageSubmit(pageImage, request);
}
@Test
public void testSavePageImagesWithImagesStored() throws Exception {
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
request.setParameter("pageID", "408");
request.setParameter("counter", "16");
request.setParameter("checkedImage0", "666");
request.setParameter("checkedImage15", "999");
Article a = new Article();
a.setID(408L);
when(pageService.getEntity(408L)).thenReturn(a);
Image image1 = new Image(), image2 = new Image();
image1.setID(666L);
image2.setID(999L);
when(imageService.getEntity(666L)).thenReturn(image1);
when(imageService.getEntity(999L)).thenReturn(image2);
PageImage pageImage0 = new PageImage(), pageImage1 = new PageImage(), pageImage2 = new PageImage();
pageImage0.setPage(a); pageImage1.setPage(a); pageImage2.setPage(a);
pageImage1.setImage(image1); pageImage2.setImage(image2);
ModelAndView mav = savePageImageController.handleRequestInternal(request, response);
assertEquals("viewValue not as expected", "redirect:/admin/editArticle.do?ID=408", mav.getViewName());
verify(pageImageSubmit, times(0)).handlePageImageSubmit(pageImage0, request);
verify(imageService).getEntity(666L);
verify(imageService).getEntity(999L);
verify(genericService, times(2)).saveOrUpdate(pageImage0);
}
}