package de.tuberlin.onedrivesdk.uploadFile;
import de.tuberlin.onedrivesdk.OneDriveException;
import de.tuberlin.onedrivesdk.common.ConcreteOneDriveSDK;
import de.tuberlin.onedrivesdk.folder.ConcreteOneFolder;
import de.tuberlin.onedrivesdk.networking.OneDriveAuthenticationException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.*;
public class ConcreteOneUploadFileTest {
public File fileToUploadPath;
ConcreteOneDriveSDK mockApi;
@Test
public void getNextRange() throws InstantiationException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchFieldException, SecurityException, OneDriveException {
UploadSession upSession = getEmptyUploadSession();
String[] nextRanges = {"1435-","16843-65786","547547-65756"};
getUnaccessableField("nextExpectedRanges", UploadSession.class).set(upSession, nextRanges);
assertEquals(1435L, upSession.getNextRange());
}
@Test
public void testCreateUploadSession() throws InstantiationException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException,
SecurityException, NoSuchFieldException, ClassNotFoundException, IOException,OneDriveAuthenticationException {
UploadSession upSession = getEmptyUploadSession();
getUnaccessableField("uploadUrl", UploadSession.class).set(upSession,
"asifsdiurt");
ConcreteOneFolder folder = makeMockFolder();
when(
mockApi.createUploadSession(any(ConcreteOneFolder.class),
any(String.class))).thenReturn(upSession);
ConcreteOneUploadFile upload = new ConcreteOneUploadFile(folder,
fileToUploadPath, mockApi);
Mockito.verify(mockApi).createUploadSession(folder,
fileToUploadPath.getName());
assertEquals("asifsdiurt",
getUnaccessableField("uploadUrl", ConcreteOneUploadFile.class)
.get(upload));
}
public static ConcreteOneFolder makeMockFolder() {
ConcreteOneFolder folder = mock(ConcreteOneFolder.class);
when(folder.getId()).thenReturn("aiusgtffgso8745whfirstgu");
return folder;
}
@After
public void removeTestFile() {
fileToUploadPath.delete();
}
@Before
public void createTestFile() throws IOException {
fileToUploadPath = File.createTempFile("TestOneSDKFile", "txt");
}
@Before
public void createAPIMock() {
mockApi = mock(ConcreteOneDriveSDK.class);
}
public static Field getUnaccessableField(String fieldName, Class<?> clazz)
throws NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
Field privateField = clazz.getDeclaredField(fieldName);
privateField.setAccessible(true);
return privateField;
}
private static UploadSession getEmptyUploadSession() throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// get constructor that takes a String as argument
Constructor<UploadSession> constructor = (Constructor<UploadSession>) UploadSession.class
.getDeclaredConstructors()[0];
constructor.setAccessible(true);
UploadSession upSession = constructor.newInstance();
return upSession;
}
}