package com.beijunyi.parallelgit.filesystem.io;
import java.io.IOException;
import javax.annotation.Nonnull;
import com.beijunyi.parallelgit.filesystem.AbstractGitFileSystemTest;
import org.eclipse.jgit.lib.ObjectId;
import org.junit.Before;
import org.junit.Test;
import static java.nio.file.Files.*;
import static org.eclipse.jgit.lib.FileMode.EXECUTABLE_FILE;
import static org.junit.Assert.*;
public class GitFileAttributesTest extends AbstractGitFileSystemTest {
@Before
public void setUp() throws IOException {
initRepository();
}
@Test
public void getObjectId_shouldReturnTheTheIdOfTheNode() throws IOException {
ObjectId blobId = writeToCache("/test_file.txt");
commitToMaster();
initGitFileSystem();
GitFileAttributes attributes = readGitAttributes("/test_file.txt");
assertEquals(blobId, attributes.getObjectId());
}
@Test
public void getMode_shouldReturnTheModeOfTheNode() throws IOException {
writeToCache("/test_file.txt", someBytes(), EXECUTABLE_FILE);
commitToMaster();
initGitFileSystem();
GitFileAttributes attributes = readGitAttributes("/test_file.txt");
assertEquals(EXECUTABLE_FILE, attributes.getFileMode());
}
@Test
public void testIsNewOnNewFile_shouldReturnTrue() throws IOException {
initGitFileSystem();
writeToGfs("/test_file.txt");
GitFileAttributes attributes = readGitAttributes("/test_file.txt");
assertTrue(attributes.isNew());
}
@Test
public void testIsNewOnExistingFile_shouldReturnFalse() throws IOException {
writeToCache("/test_file.txt");
commitToMaster();
initGitFileSystem();
GitFileAttributes attributes = readGitAttributes("/test_file.txt");
assertFalse(attributes.isNew());
}
@Test
public void testIsModifiedOnUnchangedFile_shouldReturnFalse() throws IOException {
writeToCache("/test_file.txt");
commitToMaster();
initGitFileSystem();
GitFileAttributes attributes = readGitAttributes("/test_file.txt");
assertFalse(attributes.isModified());
}
@Test
public void testIsModifiedOnChangedFile_shouldReturnTrue() throws IOException {
initGitFileSystem();
writeToGfs("/test_file.txt");
write(gfs.getPath("/test_file.txt"), someBytes());
GitFileAttributes attributes = readGitAttributes("/test_file.txt");
assertTrue(attributes.isModified());
}
@Test
public void testIsModifiedOnNewFile_shouldReturnTrue() throws IOException {
writeToCache("/test_file.txt");
commitToMaster();
initGitFileSystem();
write(gfs.getPath("/test_file.txt"), someBytes());
GitFileAttributes attributes = readGitAttributes("/test_file.txt");
assertTrue(attributes.isModified());
}
@Nonnull
private GitFileAttributes readGitAttributes(String path) throws IOException {
return readAttributes(gfs.getPath(path), GitFileAttributes.class);
}
}