package jdrivesync; import com.google.api.services.drive.model.File; import jdrivesync.gdrive.GoogleDriveAdapter; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.Arrays; import java.util.Optional; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsNot.not; import static org.junit.Assert.assertThat; public class ITBasicUpSync extends BaseClass { private static final String TESTDATA = ITBasicUpSync.class.getSimpleName(); @BeforeClass public static void beforeClass() { BaseClass.beforeClass(); } @Before public void before() throws IOException { super.beforeEachTest(TESTDATA, driveFactory); createTestData(TESTDATA); } private void createTestData(String name) throws IOException { deleteDirectorySubtree(Paths.get(basePathTestData(), name)); Files.createDirectory(Paths.get(basePathTestData(), name)); Files.write(Paths.get(basePathTestData(), name, "test1.txt"), Arrays.asList("test1"), Charset.defaultCharset(), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE); Files.createDirectory(Paths.get(basePathTestData(), name, "folder")); Files.write(Paths.get(basePathTestData(), name, "folder", "test2.txt"), Arrays.asList("test2"), Charset.defaultCharset(), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE); } @Test public void testSimpleSync() { App app = new App(); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(3)); assertThat(googleDriveAdapter.search(Optional.of("test1.txt")).size(), is(1)); assertThat(googleDriveAdapter.search(Optional.of("test2.txt")).size(), is(1)); assertThat(googleDriveAdapter.search(Optional.of("folder")).size(), is(1)); } @Test public void testRemoteFolderDeletion() throws InterruptedException { App app = new App(); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(3)); googleDriveAdapter.deleteDirectory(googleDriveAdapter.search(Optional.of("folder")).get(0)); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(1)); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(3)); } @Test public void testLocalFolderDeletion() throws InterruptedException, IOException { App app = new App(); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(3)); deleteDirectorySubtree(Paths.get(basePathTestData(), TESTDATA, "folder")); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(1)); } @Test public void testLocalFileDeletion() throws InterruptedException, IOException { App app = new App(); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(3)); Files.delete(Paths.get(basePathTestData(), TESTDATA, "test1.txt")); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(2)); } @Test public void testRemoteFileDeletion() throws InterruptedException, IOException { App app = new App(); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(3)); googleDriveAdapter.deleteFile(googleDriveAdapter.search(Optional.of("test1.txt")).get(0)); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(3)); } @Test public void testLocalFileIsRemoteDir() { File rootRemoteDir = googleDriveAdapter.getFile("root"); googleDriveAdapter.createDirectory(rootRemoteDir, "test1.txt"); App app = new App(); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(3)); assertThat(googleDriveAdapter.search(Optional.of("test1.txt")).get(0).getMimeType(), is(not(GoogleDriveAdapter.MIME_TYPE_FOLDER))); } @Test public void testLocalDirIsRemoteFile() throws IOException { App app = new App(); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(3)); Files.delete(Paths.get(basePathTestData(), TESTDATA, "test1.txt")); Files.createDirectory(Paths.get(basePathTestData(), TESTDATA, "test1.txt")); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(3)); assertThat(googleDriveAdapter.search(Optional.of("test1.txt")).get(0).getMimeType(), is(GoogleDriveAdapter.MIME_TYPE_FOLDER)); } @Test public void testUmlaut() throws IOException { Files.write(Paths.get(basePathTestData(), TESTDATA, "äöüßÄÖÜ.txt"), Arrays.asList("äöüßÄÖÜ?"), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE); App app = new App(); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(4)); assertThat(googleDriveAdapter.search(Optional.of("äöüßÄÖÜ.txt")).size(), is(1)); } @Test public void testEmptyDir() throws IOException { Path emptyDirPath = Paths.get(basePathTestData(), "emptyDir"); options.setLocalRootDir(Optional.of(emptyDirPath.toFile())); if(Files.exists(emptyDirPath)) { deleteDirectorySubtree(emptyDirPath); } Files.createDirectory(emptyDirPath); App app = new App(); app.sync(options); sleep(); assertThat(googleDriveAdapter.listAll().size(), is(0)); } }