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 }