Skip to content

Commit

Permalink
end with tests for core module
Browse files Browse the repository at this point in the history
  • Loading branch information
stCarolas committed Mar 14, 2020
1 parent aafd276 commit 2e82f1c
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import com.github.stcarolas.enki.core.Repo;
import com.github.stcarolas.enki.core.provider.strategies.download.GitCloneDownloadStrategy;
import com.github.stcarolas.enki.core.provider.strategies.upload.GitPushUploadStrategy;
import static com.github.stcarolas.enki.core.provider.strategies.upload.GitPushUploadStrategy.GitPushUploadStrategy;

import org.eclipse.jgit.transport.PushResult;

Expand All @@ -15,8 +15,8 @@
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class DefaultRepoProviderStrategiesFactory {

public static <T extends Repo>Supplier<Iterable<PushResult>> gitSshPush(T repo, String sshUrl){
return GitPushUploadStrategy.gitSshPush(repo, sshUrl);
public static <T extends Repo>Supplier<Iterable<PushResult>> gitSshPush(T repo){
return GitPushUploadStrategy(repo);
}

public static <T extends Repo>Supplier<File> gitSshClone(T repo, String sshUrl){
Expand Down
Original file line number Diff line number Diff line change
@@ -1,57 +1,74 @@
package com.github.stcarolas.enki.core.provider.strategies.upload;

import static com.github.stcarolas.enki.core.util.Lifting.call;
import static io.vavr.control.Option.of;
import static io.vavr.collection.List.empty;

import java.io.File;
import java.util.function.Supplier;

import com.github.stcarolas.enki.core.Repo;

import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.transport.PushResult;

import io.vavr.Function1;
import io.vavr.control.Option;
import io.vavr.control.Try;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.extern.log4j.Log4j2;
import static io.vavr.API.*;

@Log4j2
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Getter
public class GitPushUploadStrategy<T extends Repo> implements Supplier<Iterable<PushResult>> {
private final Option<String> sshUrl;

private final Option<T> repository;
private final Function1<File, Option<Git>> gitOpenFn;
private final Function1<Git, Option<Iterable<PushResult>>> gitPushFn;
private final Function1<Repo, Option<File>> repoDirectoryFn;

// todo test for defaultGitOpenFn in GitPushUploadStrategy
public static final Function1<File, Option<Git>> defaultGitOpenFn = directory ->
Try(() -> Git.open(directory))
.onFailure(
error -> log.error( "error while acessing repository aborting push: {}", error)
)
.toOption()
;

public static final Function1<Git, Option<Iterable<PushResult>>> defaultGitPushFn = git ->
Try(() -> git.push().call())
.onFailure( error -> log.error("error while pushing repo: {}", error) )
.onSuccess( result -> log.info("git push result: {}", result) )
.toOption()
;

public static final Function1<Repo, Option<File>> defaultRepoDirectoryFn = repo ->
call(repo::directory)
.onEmpty( () -> log.error( "missing directory for repository {}, aborting push", repo) )
;

@Override
public Iterable<PushResult> get() {
return sshUrl
.onEmpty(() -> log.error("missing ssh url to push, aborting"))
.flatMap(
url -> repository
.onEmpty( () -> log.error("missing repository for uploading to {}, aborting push", url) )
.peek( repo -> log.info("pushing {} to {}", repository, url) )
.flatMap(
repo -> call(repo::directory)
.onEmpty(()-> log.error("missing directory for repository {}, aborting push", repository))
)
.flatMap(
directory -> Try.of(() -> Git.open(directory))
.onFailure(
error -> log.error("error while acessing repository {}, aborting push: {}", repository, error)
)

.mapTry(git -> git.push().call())
.onFailure(
error -> log.error("error while pushing repo: {}", error)
)
.onSuccess( result -> log.info("git push result: {}", result))
.toOption()
)
).getOrElse(empty());
public Iterable<PushResult> get(){
return repository
.onEmpty(() -> log.error("missing repository for uploading, aborting push"))
.peek(repo -> log.info("pushing {}", repo))
.flatMap(repoDirectoryFn)
.flatMap(gitOpenFn)
.flatMap(gitPushFn)
.getOrElse(empty())
;
}

public static <T extends Repo>Supplier<Iterable<PushResult>> gitSshPush(T repo, String sshUrl){
return new GitPushUploadStrategy<>(of(sshUrl), of(repo));
public static <T extends Repo> Supplier<Iterable<PushResult>> GitPushUploadStrategy(T repo){
return GitPushUploadStrategy.builder()
.repository(Option(repo))
.repoDirectoryFn(defaultRepoDirectoryFn)
.gitOpenFn(defaultGitOpenFn)
.gitPushFn(defaultGitPushFn)
.build()
;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class DefaultRepoProviderStrategiesFactoryTest {
@Test
public void test_ssh_push_strategy() {
Assertions.assertTrue(
DefaultRepoProviderStrategiesFactory.gitSshPush(null, null) instanceof GitPushUploadStrategy
DefaultRepoProviderStrategiesFactory.gitSshPush(null) instanceof GitPushUploadStrategy
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ public BitbucketRepo download(BitbucketRepo repo) {
@Override
public BitbucketRepo upload(Repo repo) {
if (repo instanceof BitbucketRepo){
return of(DefaultRepoProviderStrategiesFactory
.gitSshPush(repo, ((BitbucketRepo)repo).getSshUrl())
.get()
return of(
DefaultRepoProviderStrategiesFactory
.gitSshPush(repo)
.get()
)
.filter( results -> results.iterator().hasNext() )
.onEmpty(() -> log.error("upload failed"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public GiteaRepo download(GiteaRepo repo) {
public GiteaRepo upload(Repo repo) {
if (repo instanceof GiteaRepo){
return of(DefaultRepoProviderStrategiesFactory
.gitSshPush(repo, ((GiteaRepo)repo).getSshUrl())
.gitSshPush(repo)
.get()
)
.filter( results -> results.iterator().hasNext() )
Expand Down

0 comments on commit 2e82f1c

Please sign in to comment.