Package org.jtalks.jcommune.web.controller

Source Code of org.jtalks.jcommune.web.controller.AdministrationImagesControllerTest

/**
* Copyright (C) 2011  JTalks.org Team
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

package org.jtalks.jcommune.web.controller;

import org.jtalks.common.model.entity.Component;
import org.jtalks.common.model.entity.ComponentType;
import org.jtalks.jcommune.service.ComponentService;
import org.jtalks.jcommune.service.exceptions.ImageProcessException;
import org.jtalks.jcommune.service.nontransactional.Base64Wrapper;
import org.jtalks.jcommune.service.nontransactional.ImageService;
import org.jtalks.jcommune.service.transactional.TransactionalComponentService;
import org.jtalks.jcommune.web.util.ImageControllerUtils;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.springframework.context.MessageSource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
import static org.mockito.MockitoAnnotations.initMocks;
import static org.testng.Assert.*;

/**
* @author Andrei Alikov
*/
public class AdministrationImagesControllerTest {

    private byte[] validImage = new byte[]{-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0,
            0, 0, 4, 0, 0, 0, 4, 1, 0, 0, 0, 0, -127, -118, -93, -45, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 1,
            -118, 0, 0, 1, -118, 1, 51, -105, 48, 88, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0, 122, 37, 0, 0,
            -128, -125, 0, 0, -7, -1, 0, 0, -128, -23, 0, 0, 117, 48, 0, 0, -22, 96, 0, 0, 58, -104, 0, 0,
            23, 111, -110, 95, -59, 70, 0, 0, 0, 22, 73, 68, 65, 84, 120, -38, 98, -40, -49, -60, -64, -92,
            -64, -60, 0, 0, 0, 0, -1, -1, 3, 0, 5, -71, 0, -26, -35, -7, 32, 96, 0, 0, 0, 0, 73, 69, 78, 68,
            -82, 66, 96, -126
    };
    private static final String IMAGE_BYTE_ARRAY_IN_BASE_64_STRING = "it's dummy string";

    @Mock
    ComponentService componentService;

    @Mock
    MessageSource messageSource;

    @Mock
    ImageControllerUtils logoControllerUtils;

    @Mock
    ImageControllerUtils favIconPngControllerUtils;

    @Mock
    ImageControllerUtils favIconIcoControllerUtils;

    @Mock
    ImageService iconImageService;

    //
    private AdministrationImagesController administrationController;

    @BeforeMethod
    public void init() {
        initMocks(this);

        Component component = new Component("Forum", "Cool Forum", ComponentType.FORUM);
        component.setId(42);

        administrationController = new AdministrationImagesController(componentService, logoControllerUtils,
                favIconPngControllerUtils, favIconIcoControllerUtils,
                messageSource);
    }

    @Test
    public void uploadLogoForOperaAndIEShouldReturnPreviewInResponce()
            throws IOException, ImageProcessException {
        MultipartFile file = new MockMultipartFile("qqfile", validImage);

        ResponseEntity<String> actualResponseEntity = administrationController.uploadLogo(file);

        verify(logoControllerUtils).prepareResponse(eq(file), any(HttpHeaders.class), any(HashMap.class));
    }

    @Test
    public void uploadLogoForChromeAndFFShouldReturnPreviewInResponce() throws ImageProcessException {
        MockHttpServletResponse response = new MockHttpServletResponse();

        administrationController.uploadLogo(validImage, response);

        verify(logoControllerUtils).prepareResponse(eq(validImage), eq(response), any(HashMap.class));
    }

    @Test
    public void getDefaultLogoShouldReturnDefaultAvatarInBase64String() throws IOException, ImageProcessException {
        String expectedJSON = "{\"team\": \"larks\"}";
        when(logoControllerUtils.getDefaultImage()).thenReturn(validImage);
        when(logoControllerUtils.convertImageToIcoInString64(validImage)).thenReturn(IMAGE_BYTE_ARRAY_IN_BASE_64_STRING);
        when(logoControllerUtils.getResponceJSONString(Matchers.anyMap())).thenReturn(expectedJSON);

        String actualJSON = administrationController.getDefaultLogoInJson();

        assertEquals(actualJSON, expectedJSON);
    }

    @Test
    public void renderLogoShouldReturnModifiedLogoInResponse() throws IOException {
        MockHttpServletResponse response = new MockHttpServletResponse();
        when(componentService.getComponentModificationTime()).thenReturn(new Date(1000));
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.addHeader(administrationController.IF_MODIFIED_SINCE_HEADER, new Date(0));

        when(logoControllerUtils.getDefaultImage()).thenReturn(validImage);

        administrationController.getForumLogo(request, response);

        assertEquals(response.getContentType(), "image/jpeg");
        assertEquals(response.getContentLength(), validImage.length);
        assertEquals(response.getContentAsByteArray(), validImage);
        checkResponse(response);
    }

    @Test
    public void renderLogoShouldNotReturnNotModifiedLogoInResponse() throws IOException {
        MockHttpServletResponse response = new MockHttpServletResponse();
        when(componentService.getComponentModificationTime()).thenReturn(new Date(0));
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.addHeader(administrationController.IF_MODIFIED_SINCE_HEADER, new Date(1000));

        when(logoControllerUtils.getDefaultImage()).thenReturn(validImage);

        administrationController.getForumLogo(request, response);

        assertEquals(response.getStatus(), HttpServletResponse.SC_NOT_MODIFIED);
        assertNotSame(response.getContentAsByteArray(), validImage);
        checkResponse(response);
    }

    @Test
    public void getForumLogoShouldReturnDefaultLogoWhenLogoPropertyIsEmpty() throws ImageProcessException {
        Component forumComponent = new Component();
        forumComponent.addProperty(TransactionalComponentService.LOGO_PROPERTY, "");
        when(componentService.getComponentOfForum()).thenReturn(forumComponent);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());
        when(logoControllerUtils.getDefaultImage()).thenReturn(validImage);

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getForumLogo(new MockHttpServletRequest(), response);

        verify(logoControllerUtils).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), validImage);
    }

    @Test
    public void getForumLogoShouldReturnDefaultLogoWhenLogoPropertyIsNull() throws ImageProcessException {
        Component forumComponent = new Component();
        when(componentService.getComponentOfForum()).thenReturn(forumComponent);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());
        when(logoControllerUtils.getDefaultImage()).thenReturn(validImage);

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getForumLogo(new MockHttpServletRequest(), response);

        verify(logoControllerUtils).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), validImage);
    }

    @Test
    public void getForumLogoShouldReturnDefaultLogoWhenNoComponent() throws ImageProcessException {
        when(componentService.getComponentOfForum()).thenReturn(null);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());
        when(logoControllerUtils.getDefaultImage()).thenReturn(validImage);

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getForumLogo(new MockHttpServletRequest(), response);

        verify(logoControllerUtils).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), validImage);
    }

    @Test
    public void getForumLogoShouldReturnPropertyLogoWhenPropertyExists() throws IOException, ImageProcessException {
        Component forumComponent = new Component();

        String logoProperty = "logo";
        Base64Wrapper wrapper = new Base64Wrapper();
        byte[] logoBytes = wrapper.decodeB64Bytes(logoProperty);

        forumComponent.addProperty(TransactionalComponentService.LOGO_PROPERTY, logoProperty);
        when(componentService.getComponentOfForum()).thenReturn(forumComponent);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getForumLogo(new MockHttpServletRequest(), response);

        verify(logoControllerUtils, never()).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), logoBytes);
    }


    @Test
    public void getFavIconPNGShouldReturnDefaultIconWhenIconPropertyIsEmpty() throws ImageProcessException {
        Component forumComponent = new Component();
        forumComponent.addProperty(TransactionalComponentService.COMPONENT_FAVICON_PNG_PARAM, "");
        when(componentService.getComponentOfForum()).thenReturn(forumComponent);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());
        when(favIconPngControllerUtils.getDefaultImage()).thenReturn(validImage);

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getFavIconPNG(new MockHttpServletRequest(), response);

        verify(favIconPngControllerUtils).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), validImage);
    }

    @Test
    public void getFavIconPNGShouldReturnDefaultIconWhenIconPropertyIsNull() throws ImageProcessException {
        Component forumComponent = new Component();
        when(componentService.getComponentOfForum()).thenReturn(forumComponent);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());
        when(favIconPngControllerUtils.getDefaultImage()).thenReturn(validImage);

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getFavIconPNG(new MockHttpServletRequest(), response);

        verify(favIconPngControllerUtils).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), validImage);
    }

    @Test
    public void getFavIconPNGShouldReturnDefaultIconWhenNoComponent() throws ImageProcessException {
        when(componentService.getComponentOfForum()).thenReturn(null);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());
        when(favIconPngControllerUtils.getDefaultImage()).thenReturn(validImage);

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getFavIconPNG(new MockHttpServletRequest(), response);

        verify(favIconPngControllerUtils).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), validImage);
    }

    @Test
    public void getFavIconPNGLogoShouldReturnPropertyIconWhenPropertyExists() throws IOException, ImageProcessException {
        Component forumComponent = new Component();

        String logoProperty = "logo";
        Base64Wrapper wrapper = new Base64Wrapper();
        byte[] logoBytes = wrapper.decodeB64Bytes(logoProperty);

        forumComponent.addProperty(TransactionalComponentService.COMPONENT_FAVICON_PNG_PARAM, logoProperty);
        when(componentService.getComponentOfForum()).thenReturn(forumComponent);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getFavIconPNG(new MockHttpServletRequest(), response);

        verify(favIconPngControllerUtils, never()).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), logoBytes);
    }


    @Test
    public void getFavIconICOShouldReturnDefaultIconWhenIconPropertyIsEmpty() throws ImageProcessException {
        Component forumComponent = new Component();
        forumComponent.addProperty(TransactionalComponentService.COMPONENT_FAVICON_PNG_PARAM, "");
        when(componentService.getComponentOfForum()).thenReturn(forumComponent);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());
        when(favIconIcoControllerUtils.getDefaultImage()).thenReturn(validImage);

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getFavIconICO(new MockHttpServletRequest(), response);

        verify(favIconIcoControllerUtils).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), validImage);
    }

    @Test
    public void getFavIconICOShouldReturnDefaultIconWhenIconPropertyIsNull() throws ImageProcessException {
        Component forumComponent = new Component();
        when(componentService.getComponentOfForum()).thenReturn(forumComponent);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());
        when(favIconIcoControllerUtils.getDefaultImage()).thenReturn(validImage);

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getFavIconICO(new MockHttpServletRequest(), response);

        verify(favIconIcoControllerUtils).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), validImage);
    }

    @Test
    public void getFavIconICOShouldReturnDefaultIconWhenNoComponent() throws ImageProcessException {
        when(componentService.getComponentOfForum()).thenReturn(null);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());
        when(favIconIcoControllerUtils.getDefaultImage()).thenReturn(validImage);

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getFavIconICO(new MockHttpServletRequest(), response);

        verify(favIconIcoControllerUtils).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), validImage);
    }

    @Test
    public void getFavIconICOLogoShouldReturnPropertyIconWhenPropertyExists() throws IOException, ImageProcessException {
        Component forumComponent = new Component();

        String logoProperty = "logo";
        Base64Wrapper wrapper = new Base64Wrapper();
        byte[] logoBytes = wrapper.decodeB64Bytes(logoProperty);

        forumComponent.addProperty(TransactionalComponentService.COMPONENT_FAVICON_ICO_PARAM, logoProperty);
        when(componentService.getComponentOfForum()).thenReturn(forumComponent);
        when(componentService.getComponentModificationTime()).thenReturn(new Date());

        MockHttpServletResponse response = new MockHttpServletResponse();
        administrationController.getFavIconICO(new MockHttpServletRequest(), response);

        verify(favIconIcoControllerUtils, never()).getDefaultImage();
        assertEquals(response.getContentAsByteArray(), logoBytes);
    }


    @Test
    public void iconPngRequestShouldReturnModifiedIconInResponse() throws IOException {
        MockHttpServletResponse response = new MockHttpServletResponse();
        when(componentService.getComponentModificationTime()).thenReturn(new Date(1000));
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.addHeader(administrationController.IF_MODIFIED_SINCE_HEADER, new Date(0));

        when(favIconPngControllerUtils.getDefaultImage()).thenReturn(validImage);

        administrationController.getFavIconPNG(request, response);

        assertEquals(response.getContentType(), "image/png");
        assertEquals(response.getContentLength(), validImage.length);
        assertEquals(response.getContentAsByteArray(), validImage);
        checkResponse(response);
    }

    @Test
    public void iconPngRequestShouldNotReturnModifiedIconInResponse() throws IOException {
        MockHttpServletResponse response = new MockHttpServletResponse();
        when(componentService.getComponentModificationTime()).thenReturn(new Date(0));
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.addHeader(administrationController.IF_MODIFIED_SINCE_HEADER, new Date(1000));

        when(favIconPngControllerUtils.getDefaultImage()).thenReturn(validImage);

        administrationController.getFavIconPNG(request, response);

        assertEquals(response.getStatus(), HttpServletResponse.SC_NOT_MODIFIED);
        assertNotSame(response.getContentAsByteArray(), validImage);
        checkResponse(response);
    }

    @Test
    public void iconIcoRequestShouldReturnModifiedIconInResponse() throws IOException {
        MockHttpServletResponse response = new MockHttpServletResponse();
        when(componentService.getComponentModificationTime()).thenReturn(new Date(1000));
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.addHeader(administrationController.IF_MODIFIED_SINCE_HEADER, new Date(0));

        when(favIconIcoControllerUtils.getDefaultImage()).thenReturn(validImage);

        administrationController.getFavIconICO(request, response);

        assertEquals(response.getContentType(), "image/x-icon");
        assertEquals(response.getContentLength(), validImage.length);
        assertEquals(response.getContentAsByteArray(), validImage);
        checkResponse(response);
    }

    @Test
    public void iconIcoRequestShouldNotReturnModifiedIconInResponse() throws IOException {
        MockHttpServletResponse response = new MockHttpServletResponse();
        when(componentService.getComponentModificationTime()).thenReturn(new Date(0));
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.addHeader(administrationController.IF_MODIFIED_SINCE_HEADER, new Date(1000));

        when(favIconIcoControllerUtils.getDefaultImage()).thenReturn(validImage);

        administrationController.getFavIconICO(request, response);

        assertEquals(response.getStatus(), HttpServletResponse.SC_NOT_MODIFIED);
        assertNotSame(response.getContentAsByteArray(), validImage);
        checkResponse(response);

    }

    private void checkResponse(MockHttpServletResponse response) {
        assertEquals(response.getHeader("Pragma"), "public");
        List<String> cacheControlHeaders = response.getHeaders("Cache-Control");
        Assert.assertTrue(cacheControlHeaders.contains("public"));
        Assert.assertTrue(cacheControlHeaders.contains("must-revalidate"));
        Assert.assertTrue(cacheControlHeaders.contains("max-age=0"));
        assertNotNull(response.getHeader("Expires"));
        assertNotNull(response.getHeader("Last-Modified"));
    }

    @Test
    public void uploadIconForOperaAndIEShouldReturnPreviewInResponce()
            throws IOException, ImageProcessException {
        MultipartFile file = new MockMultipartFile("qqfile", validImage);

        administrationController.uploadFavIcon(file);

        verify(favIconPngControllerUtils).prepareResponse(eq(file), any(HttpHeaders.class), any(HashMap.class));
    }

    @Test
    public void uploadIconForChromeAndFFShouldReturnPreviewInResponce() throws ImageProcessException {
        MockHttpServletResponse response = new MockHttpServletResponse();

        administrationController.uploadFavIcon(validImage, response);

        verify(favIconPngControllerUtils).prepareResponse(eq(validImage), eq(response), any(HashMap.class));
    }
}
TOP

Related Classes of org.jtalks.jcommune.web.controller.AdministrationImagesControllerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.