package org.peerbox.app.manager.file;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashSet;
import org.hive2hive.core.events.framework.interfaces.file.IFileEvent;
import org.hive2hive.core.events.implementations.FileAddEvent;
import org.hive2hive.core.processes.files.list.FileNode;
import org.hive2hive.core.security.HashUtil;
import org.junit.Rule;
import org.junit.Test;
import org.peerbox.BaseJUnitTest;
import org.peerbox.helper.JavaFXThreadingRule;
import org.peerbox.presenter.settings.synchronization.PathItem;
import org.peerbox.watchservice.filetree.FileComponentTest;
import org.peerbox.watchservice.filetree.composite.FileComponent;
import org.peerbox.watchservice.filetree.composite.FileLeaf;
import org.peerbox.watchservice.filetree.composite.FolderComposite;
public class FileInfoTest extends BaseJUnitTest {
@Rule
public JavaFXThreadingRule jfxRule = new JavaFXThreadingRule();
@Test
public void testFileInfo_PathBoolean() {
Path file = Paths.get("/path/to/a/file.txt");
FileInfo fileInfo = new FileInfo(file, false);
assertTrue(fileInfo.isFile());
assertEquals(file, fileInfo.getPath());
assertEquals("", fileInfo.getContentHash());
Path folder = Paths.get("/path/to/a/folder");
FileInfo folderInfo = new FileInfo(folder, true);
assertTrue(folderInfo.isFolder());
assertEquals(folder, folderInfo.getPath());
assertEquals("", folderInfo.getContentHash());
}
@Test
public void testFileInfo_PathBooleanString() {
Path file = Paths.get("/path/to/a/file.txt");
String fileHash = "hash1";
FileInfo fileInfo = new FileInfo(file, false, fileHash);
assertTrue(fileInfo.isFile());
assertEquals(file, fileInfo.getPath());
assertEquals(fileHash, fileInfo.getContentHash());
Path folder = Paths.get("/path/to/a/folder");
String folderHash = "hash2";
FileInfo folderInfo = new FileInfo(folder, true, folderHash);
assertTrue(folderInfo.isFolder());
assertEquals(folder, folderInfo.getPath());
assertEquals(folderHash, folderInfo.getContentHash());
}
@Test
public void testFileInfo_FileComponent() {
// file
Path file = Paths.get("/path/to/a/file.txt");
FileComponent fileComponent = new FileLeaf(file, true);
FileComponentTest.setContentHashByReflection(fileComponent, "hash1");
FileInfo fileInfo = new FileInfo(fileComponent);
assertEquals(file, fileInfo.getPath());
assertTrue(fileInfo.isFile());
assertEquals("hash1", fileInfo.getContentHash());
// folder
Path folder = Paths.get("/path/to/a/folder");
FileComponent folderComponent = new FolderComposite(folder, true);
FileComponentTest.setContentHashByReflection(folderComponent, "hash2");
FileInfo folderInfo = new FileInfo(folderComponent);
assertEquals(folder, folderInfo.getPath());
assertTrue(folderInfo.isFolder());
assertEquals("hash2", folderInfo.getContentHash()); // empty
}
@Test
public void testFileInfo_FileNode() {
// file
Path file = Paths.get("/path/to/a/file.txt");
FileNode fileNode = new FileNode(null, file.toFile(),
file.getFileName().toString(), HashUtil.hash("hello world".getBytes()), new HashSet<>());
FileInfo fileInfo = new FileInfo(fileNode);
assertEquals(file, fileInfo.getPath());
assertTrue(fileInfo.isFile());
assertEquals("XrY7u+Ae7tCTyyK7j1rNww==", fileInfo.getContentHash());
// folder
Path folder = Paths.get("/path/to/a/folder");
FileNode folderNode = new FileNode(null, folder.toFile(),
folder.getFileName().toString(), null, new HashSet<>());
FileInfo folderInfo = new FileInfo(folderNode);
assertEquals(folder, folderInfo.getPath());
assertTrue(folderInfo.isFolder());
assertEquals("", folderInfo.getContentHash());
}
@Test
public void testFileInfo_IFileEvent() {
// file
File file = new File("/path/to/a/file.txt");
IFileEvent fileEvent = new FileAddEvent(file, true);
FileInfo fileInfo = new FileInfo(fileEvent);
assertEquals(file.toPath(), fileInfo.getPath());
assertTrue(fileInfo.isFile());
assertEquals("", fileInfo.getContentHash()); // file event does not have conent hash
// folder
File folder = new File("/path/to/a/folder");
IFileEvent folderEvent = new FileAddEvent(folder, false);
FileInfo folderInfo = new FileInfo(folderEvent);
assertEquals(folder.toPath(), folderInfo.getPath());
assertTrue(folderInfo.isFolder());
assertEquals("", folderInfo.getContentHash()); // file event does not have conent hash
}
@Test // requires initialization of javafx
public void testFileInfo_PathItem() {
Path file = Paths.get("/path/to/a/file.txt");
PathItem fileItem = new PathItem(file, true, new HashSet<>());
FileInfo fileInfo = new FileInfo(fileItem);
assertEquals(fileItem.getPath(), fileInfo.getPath());
assertTrue(fileInfo.isFile());
assertEquals("", fileInfo.getContentHash()); // path item does not have conent hash
Path folder = Paths.get("/path/to/a/folder");
PathItem folderItem = new PathItem(folder, false, new HashSet<>());
FileInfo folderInfo = new FileInfo(folderItem);
assertEquals(folderItem.getPath(), folderInfo.getPath());
assertTrue(folderInfo.isFolder());
assertEquals("", folderInfo.getContentHash()); // path item does not have conent hash
}
@Test
public void testSetAndGetContentHash() {
Path file = Paths.get("/path/to/a/file.txt");
FileInfo fInfo = new FileInfo(file, true);
fInfo.setContentHash("newHash_1");
assertEquals("newHash_1", fInfo.getContentHash());
fInfo.setContentHash("newHash_2");
assertEquals("newHash_2", fInfo.getContentHash());
}
@Test
public void testIsFileOrFolder() {
// file
Path file = Paths.get("/path/to/a/file.txt");
FileInfo fileInfo = new FileInfo(file, false);
assertFalse(fileInfo.isFolder());
assertTrue(fileInfo.isFile());
// folder
Path folder = Paths.get("/path/to/a/folder");
FileInfo folderInfo = new FileInfo(folder, true);
assertTrue(folderInfo.isFolder());
assertFalse(folderInfo.isFile());
}
@Test
public void testCompareTo() {
Path a = Paths.get("/path/to/a");
FileInfo aInfo = new FileInfo(a, false);
Path b = Paths.get("/path/to/b");
FileInfo bInfo = new FileInfo(b, false);
assertEquals(-1, aInfo.compareTo(bInfo));
assertEquals(0, aInfo.compareTo(aInfo));
assertEquals(0, bInfo.compareTo(bInfo));
assertEquals(1, bInfo.compareTo(aInfo));
}
}