package com.googlecode.tawus.ajaxupload.internal.services; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.tapestry5.services.Request; import org.apache.tapestry5.test.TapestryTestCase; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.googlecode.tawus.ajaxupload.AjaxUploadConstants; import com.googlecode.tawus.ajaxupload.services.AjaxUploadDecoder; public class AjaxUploadDecoderImplTest extends TapestryTestCase { private AjaxUploadDecoder decoder; private FileItemFactory fileItemFactory; @BeforeMethod public void setup() { fileItemFactory = mockFileItemFactory(); decoder = new AjaxUploadDecoderImpl(fileItemFactory); } @Test public void check_ajax_upload_request_calls_decoder() { Request request = mockRequest(); expect(request.getHeader(AjaxUploadDecoderImpl.AJAX_UPLOAD_HEADER)).andReturn("test"); expect(request.isXHR()).andReturn(true); replay(); assertTrue(decoder.isAjaxUploadRequest(request)); verify(); } @Test public void check_ajax_upload_request_calls_decoder_with_http_servlet_request() { HttpServletRequest request = mockHttpServletRequest(); expect(request.getHeader(AjaxUploadDecoderImpl.AJAX_UPLOAD_HEADER)).andReturn("test"); replay(); assertTrue(decoder.isAjaxUploadRequest(request)); verify(); } @Test public void check_ajax_request_does_not_call_decoder_if_header_not_present() { Request request = mockRequest(); expect(request.isXHR()).andReturn(true); expect(request.getHeader(AjaxUploadDecoderImpl.AJAX_UPLOAD_HEADER)).andReturn(null); replay(); assertFalse(decoder.isAjaxUploadRequest(request)); verify(); } @Test public void check_non_ajax_request_does_not_call_decoder_if_header_not_present() { Request request = mockRequest(); expect(request.isXHR()).andReturn(false); replay(); assertFalse(decoder.isAjaxUploadRequest(request)); verify(); } @Test public void check_request_does_not_call_decoder_if_header_not_present_with_http_servlet_request() { HttpServletRequest request = mockHttpServletRequest(); expect(request.getHeader(AjaxUploadDecoderImpl.AJAX_UPLOAD_HEADER)).andReturn(null); replay(); assertFalse(decoder.isAjaxUploadRequest(request)); verify(); } @Test public void check_new_uploaded_file_is_created_during_setup() throws Exception { HttpServletRequest request = mockHttpServletRequest(); FileItem item = mockFileItem(); ServletInputStream inputStream = newStringInputStream("Test stream data"); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); expect(request.getHeader(AjaxUploadDecoderImpl.AJAX_UPLOAD_HEADER)).andReturn("test"); expect(request.getContentType()).andReturn("test/test"); expect(request.getParameter(AjaxUploadConstants.FILE_PARAMETER)).andReturn("myfilename"); expect(request.getInputStream()).andReturn(inputStream); expect(fileItemFactory.createItem("test", "test/test", false, "myfilename")).andReturn(item); expect(item.getOutputStream()).andReturn(outputStream); replay(); decoder.setupUploadedFile(request); verify(); assertEquals(outputStream.toString(), "Test stream data"); } private FileItemFactory mockFileItemFactory() { return newMock(FileItemFactory.class); } private FileItem mockFileItem() { return newMock(FileItem.class); } private ServletInputStream newStringInputStream(String text) { final ByteArrayInputStream in = new ByteArrayInputStream(text.getBytes()); return new ServletInputStream(){ @Override public int read() throws IOException { return in.read(); } }; } }