View Javadoc

1   package com.atlassian.plugins.rest.common.multipart.fileupload;
2   
3   import com.atlassian.plugins.rest.common.multipart.UnsupportedFileNameEncodingException;
4   import org.apache.commons.fileupload.FileItem;
5   import org.junit.Before;
6   import org.junit.Test;
7   
8   import java.io.File;
9   import java.util.Arrays;
10  
11  import static org.hamcrest.core.Is.is;
12  import static org.junit.Assert.assertEquals;
13  import static org.junit.Assert.assertNull;
14  import static org.junit.Assert.assertThat;
15  import static org.mockito.Mockito.mock;
16  import static org.mockito.Mockito.when;
17  
18  public class CommonsFileUploadFilePartTest {
19      private FileItem fileItem;
20  
21      @Before
22      public void setUp() {
23          fileItem = mock(FileItem.class);
24      }
25  
26      @Test
27      public void fileItemWithNullFileNameShouldSimplyReturnNull() {
28          CommonsFileUploadFilePart filePart = new CommonsFileUploadFilePart(fileItem);
29          assertNull(filePart.getName());
30      }
31  
32      @Test
33      public void fileItemWithASCIIFileNameShouldReturnASCIIValue() {
34          when(fileItem.getName()).thenReturn("normalchars");
35          CommonsFileUploadFilePart filePart = new CommonsFileUploadFilePart(fileItem);
36          assertEquals("normalchars", filePart.getName());
37      }
38  
39      @Test
40      public void fileItemWithEncodedUTF8FileNameShouldReturnUTF8Value() {
41          when(fileItem.getName()).thenReturn("=?utf-8?B?0YLQtdGB0YI=?=");
42          CommonsFileUploadFilePart filePart = new CommonsFileUploadFilePart(fileItem);
43          assertEquals("тест", filePart.getName());
44      }
45  
46      @Test
47      public void fileItemWithUnencodedUTF8FileNameShouldReturnUTF8Value() {
48          when(fileItem.getName()).thenReturn("тест");
49          CommonsFileUploadFilePart filePart = new CommonsFileUploadFilePart(fileItem);
50          assertEquals("тест", filePart.getName());
51      }
52  
53      @Test(expected = UnsupportedFileNameEncodingException.class)
54      public void fileItemNamedWithUnsupportedCharacterEncodingShouldThrowException() {
55          when(fileItem.getName()).thenReturn("=?utf-unknown?B?unknown?=");
56          new CommonsFileUploadFilePart(fileItem);
57      }
58  
59      @Test
60      public void testGetName() {
61          CommonsFileUploadFilePart filePart;
62          for (String fileName : Arrays.asList("/tmp/file", "what", "../../what")) {
63              final String expectedName = new File(fileName).getName();
64              FileItem fileItem = getMockFileItem(fileName);
65              filePart = new CommonsFileUploadFilePart(fileItem);
66              assertThat(filePart.getName(), is(expectedName));
67          }
68      }
69  
70      @Test
71      public void testGetSize() {
72          when(fileItem.getSize()).thenReturn(1000l);
73          assertEquals(1000l, new CommonsFileUploadFilePart(fileItem).getSize());
74      }
75  
76      private FileItem getMockFileItem(String filename) {
77          FileItem fileItem = mock(FileItem.class);
78          when(fileItem.getName()).thenReturn(filename);
79          return fileItem;
80      }
81  
82  }