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