Add initRepo_whenDirIsFile test
This commit is contained in:
parent
51dcf05c5d
commit
fbab2f27cc
5 changed files with 126 additions and 23 deletions
7
pom.xml
7
pom.xml
|
@ -22,6 +22,7 @@
|
||||||
<junit.version>5.2.0</junit.version>
|
<junit.version>5.2.0</junit.version>
|
||||||
<assertj.version>3.10.0</assertj.version>
|
<assertj.version>3.10.0</assertj.version>
|
||||||
<mon.version>0.4.0</mon.version>
|
<mon.version>0.4.0</mon.version>
|
||||||
|
<mockito.version>2.18.3</mockito.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
@ -59,6 +60,12 @@
|
||||||
<artifactId>junit-jupiter-engine</artifactId>
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-junit-jupiter</artifactId>
|
||||||
|
<version>${mockito.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
|
|
|
@ -22,9 +22,8 @@
|
||||||
package net.kemitix.gitdb;
|
package net.kemitix.gitdb;
|
||||||
|
|
||||||
import org.eclipse.jgit.api.Git;
|
import org.eclipse.jgit.api.Git;
|
||||||
import org.eclipse.jgit.api.InitCommand;
|
|
||||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
|
||||||
|
|
||||||
|
import java.nio.file.NotDirectoryException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,12 +38,10 @@ public interface GitDB {
|
||||||
*
|
*
|
||||||
* @param dbDir the path to initialise the local repo in
|
* @param dbDir the path to initialise the local repo in
|
||||||
* @return a GitDB instance for the created local gitdb
|
* @return a GitDB instance for the created local gitdb
|
||||||
* @throws GitAPIException if there is an error initialising the Git repo
|
* @throws NotDirectoryException if {@code dbDir} it is not a directory
|
||||||
*/
|
*/
|
||||||
static GitDB initLocal(final Path dbDir) throws GitAPIException {
|
static GitDB initLocal(final Path dbDir) throws NotDirectoryException {
|
||||||
final InitCommand initCommand = Git.init().setGitDir(dbDir.toFile()).setBare(true);
|
return new GitDBLocal(Git.init(), dbDir.toFile());
|
||||||
final Git git = initCommand.call();
|
|
||||||
return new GitDBLocal(git);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,19 +21,42 @@
|
||||||
|
|
||||||
package net.kemitix.gitdb;
|
package net.kemitix.gitdb;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.eclipse.jgit.api.Git;
|
import org.eclipse.jgit.api.Git;
|
||||||
|
import org.eclipse.jgit.api.InitCommand;
|
||||||
|
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||||
|
import org.eclipse.jgit.api.errors.JGitInternalException;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.nio.file.NotDirectoryException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of GitDB for working with a local Repo.
|
* Implementation of GitDB for working with a local Repo.
|
||||||
*
|
*
|
||||||
* @author Paul Campbell (pcampbell@kemitix.net)
|
* @author Paul Campbell (pcampbell@kemitix.net)
|
||||||
*/
|
*/
|
||||||
@RequiredArgsConstructor
|
|
||||||
class GitDBLocal implements GitDB {
|
class GitDBLocal implements GitDB {
|
||||||
|
|
||||||
private final Git git;
|
private final Git git;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructors a new instance of this class.
|
||||||
|
*
|
||||||
|
* @param initCommand a JGit InitCommand
|
||||||
|
* @param dbDir the path to instantiate the git repo in
|
||||||
|
* @throws NotDirectoryException if {@code dbDir} it is not a directory
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("avoidhidingcauseexception")
|
||||||
|
GitDBLocal(final InitCommand initCommand, final File dbDir) throws NotDirectoryException {
|
||||||
|
try {
|
||||||
|
this.git = initCommand.setGitDir(dbDir).setBare(true).call();
|
||||||
|
} catch (JGitInternalException e) {
|
||||||
|
throw new NotDirectoryException(dbDir.toString());
|
||||||
|
} catch (GitAPIException e) {
|
||||||
|
throw new UnexpectedGitDbException("Unhandled Git API Exception", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// @Override
|
// @Override
|
||||||
// @SneakyThrows
|
// @SneakyThrows
|
||||||
// public <T> T get(Branch branch, Key key, Class<T> type) {
|
// public <T> T get(Branch branch, Key key, Class<T> type) {
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2018 Paul Campbell
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies
|
||||||
|
or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.kemitix.gitdb;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unchecked exception thrown when JGit throws a an unexpected exception.
|
||||||
|
*
|
||||||
|
* @author Paul Campbell (pcampbell@kemitix.net)
|
||||||
|
*/
|
||||||
|
public class UnexpectedGitDbException extends RuntimeException {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs an instance of this class.
|
||||||
|
*
|
||||||
|
* @param message the detail message. The detail message is saved for
|
||||||
|
* later retrieval by the {@link #getMessage()} method.
|
||||||
|
* @param cause the cause (which is saved for later retrieval by the
|
||||||
|
* {@link #getCause()} method). (A <tt>null</tt> value is
|
||||||
|
* permitted, and indicates that the cause is nonexistent or
|
||||||
|
* unknown.)
|
||||||
|
*/
|
||||||
|
public UnexpectedGitDbException(final String message, final Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,17 +1,24 @@
|
||||||
package net.kemitix.gitdb;
|
package net.kemitix.gitdb;
|
||||||
|
|
||||||
|
import org.assertj.core.api.WithAssertions;
|
||||||
|
import org.eclipse.jgit.api.InitCommand;
|
||||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
import org.mockito.junit.jupiter.MockitoSettings;
|
||||||
|
import org.mockito.quality.Strictness;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.DirectoryStream;
|
import java.nio.file.*;
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.BDDMockito.given;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
class GitDBTest {
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
class GitDBTest implements WithAssertions {
|
||||||
|
|
||||||
// private final Branch master = Branch.name("master");
|
// private final Branch master = Branch.name("master");
|
||||||
// private final Message message = Message.message(UUID.randomUUID().toString());
|
// private final Message message = Message.message(UUID.randomUUID().toString());
|
||||||
|
@ -20,13 +27,13 @@ class GitDBTest {
|
||||||
|
|
||||||
// When initialising a repo in a dir that doesn't exist then a bare repo is created
|
// When initialising a repo in a dir that doesn't exist then a bare repo is created
|
||||||
@Test
|
@Test
|
||||||
void initRepo_whenDirNotExist_thenCreateBareRepo() throws IOException, GitAPIException {
|
void initRepo_whenDirNotExist_thenCreateBareRepo() throws IOException {
|
||||||
//given
|
//given
|
||||||
final Path dir = dirDoesNotExist();
|
final Path dir = dirDoesNotExist();
|
||||||
//when
|
//when
|
||||||
final GitDB gitdb = GitDB.initLocal(dir);
|
final GitDB gitDB = GitDB.initLocal(dir);
|
||||||
//then
|
//then
|
||||||
assertThat(gitdb).isNotNull();
|
assertThat(gitDB).isNotNull();
|
||||||
assertThatIsBareRepo(dir);
|
assertThatIsBareRepo(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,19 +59,43 @@ class GitDBTest {
|
||||||
return directory;
|
return directory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// When initialising a repo and an unexpected error occurs then an exception is thrown
|
||||||
|
@Test
|
||||||
|
void initRepo_whenUnexpectedError_thenThrowException() throws IOException, GitAPIException {
|
||||||
|
//given
|
||||||
|
final Path dbDir = dirDoesNotExist();
|
||||||
|
final InitCommand initCommand = spy(InitCommand.class);
|
||||||
|
given(initCommand.call()).willThrow(mock(GitAPIException.class));
|
||||||
|
//then
|
||||||
|
assertThatExceptionOfType(UnexpectedGitDbException.class)
|
||||||
|
.isThrownBy(() -> new GitDBLocal(initCommand, dbDir.toFile()))
|
||||||
|
.withMessageContaining("Unhandled Git API Exception");
|
||||||
|
}
|
||||||
|
|
||||||
// When initialising a repo in a dir that is a file then an exception is thrown
|
// When initialising a repo in a dir that is a file then an exception is thrown
|
||||||
@Test
|
@Test
|
||||||
void initRepo_whenDirIsFile_thenThrowException() {
|
void initRepo_whenDirIsFile_thenThrowException() throws IOException {
|
||||||
|
//given
|
||||||
|
final Path dir = fileExists();
|
||||||
|
//then
|
||||||
|
assertThatExceptionOfType(NotDirectoryException.class)
|
||||||
|
.isThrownBy(() -> GitDB.initLocal(dir))
|
||||||
|
.withMessageContaining(dir.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Path fileExists() throws IOException {
|
||||||
|
return Files.createTempFile("gitdb", "file");
|
||||||
}
|
}
|
||||||
|
|
||||||
// When initialising a repo in a dir is exists then an exception is thrown
|
// When initialising a repo in a dir is exists then an exception is thrown
|
||||||
@Test
|
//@Test
|
||||||
void initRepo_whenDirExists_thenThrowException() {
|
//void initRepo_whenDirExists_thenThrowException() {
|
||||||
}
|
//}
|
||||||
|
|
||||||
// When opening a repo in a dir that doesn't exist then an exception is thrown
|
|
||||||
// When opening a repo in a dir that is a file then an exception is thrown
|
|
||||||
// When opening a repo in a dir that is not a bare repo then an exception is thrown
|
// When opening a repo in a dir that is not a bare repo then an exception is thrown
|
||||||
|
// When opening a repo in a dir that is a file then an exception is thrown
|
||||||
|
// When opening a repo in a dir that doesn't exist then an exception is thrown
|
||||||
|
|
||||||
// When opening a repo in a dir that is a bare repo then GitDb is returned
|
// When opening a repo in a dir that is a bare repo then GitDb is returned
|
||||||
|
|
||||||
// Given a valid GitDb handle
|
// Given a valid GitDb handle
|
||||||
|
|
Loading…
Reference in a new issue