public async Task ThrowsWhenNoPushableForkCanBeFound() { var fallbackFork = DefaultFork(); var forkFinder = new GitHubForkFinder(Substitute.For <ICollaborationPlatform>(), Substitute.For <INuKeeperLogger>(), ForkMode.PreferFork); var fork = await forkFinder.FindPushFork("testUser", fallbackFork); Assert.That(fork, Is.Null); }
private void CreateForPlatform() { var forkMode = Settings.ForkMode.Value; switch (_platform.Value) { case Platform.AzureDevOps: CollaborationPlatform = new AzureDevOpsPlatform(_nuKeeperLogger); RepositoryDiscovery = new AzureDevOpsRepositoryDiscovery(_nuKeeperLogger, Settings.Token); ForkFinder = new AzureDevOpsForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); break; case Platform.GitHub: CollaborationPlatform = new OctokitClient(_nuKeeperLogger); RepositoryDiscovery = new GitHubRepositoryDiscovery(_nuKeeperLogger, CollaborationPlatform); ForkFinder = new GitHubForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); break; case Platform.Bitbucket: CollaborationPlatform = new BitbucketPlatform(_nuKeeperLogger); RepositoryDiscovery = new BitbucketRepositoryDiscovery(_nuKeeperLogger); ForkFinder = new BitbucketForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); break; case Platform.BitbucketLocal: CollaborationPlatform = new BitBucketLocalPlatform(_nuKeeperLogger); RepositoryDiscovery = new BitbucketLocalRepositoryDiscovery(_nuKeeperLogger, CollaborationPlatform, Settings); ForkFinder = new BitbucketForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); break; case Platform.GitLab: CollaborationPlatform = new GitlabPlatform(_nuKeeperLogger); RepositoryDiscovery = new GitlabRepositoryDiscovery(_nuKeeperLogger, CollaborationPlatform); ForkFinder = new GitlabForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); break; default: throw new NuKeeperException($"Unknown platform: {_platform}"); } var auth = new AuthSettings(Settings.BaseApiUrl, Settings.Token, Settings.Username); CollaborationPlatform.Initialise(auth); if (ForkFinder == null || RepositoryDiscovery == null || CollaborationPlatform == null) { throw new NuKeeperException($"Platform {_platform} could not be initialised"); } }
public async Task FallbackForkIsNotUsedWhenItIsNotPushable() { var fallbackFork = DefaultFork(); var fallbackRepoData = RepositoryBuilder.MakeRepository(true, false); var collaborationPlatform = Substitute.For <ICollaborationPlatform>(); collaborationPlatform.GetUserRepository(fallbackFork.Owner, fallbackFork.Name) .Returns(fallbackRepoData); var forkFinder = new GitHubForkFinder(collaborationPlatform, Substitute.For <INuKeeperLogger>(), ForkMode.PreferFork); var fork = await forkFinder.FindPushFork("testUser", fallbackFork); Assert.That(fork, Is.Null); }
public async Task SingleRepoOnlyModeWillNotPreferFork() { var fallbackFork = DefaultFork(); var userRepo = RepositoryBuilder.MakeRepository(); var collaborationPlatform = Substitute.For <ICollaborationPlatform>(); collaborationPlatform.GetUserRepository(Arg.Any <string>(), Arg.Any <string>()) .Returns(userRepo); var forkFinder = new GitHubForkFinder(collaborationPlatform, Substitute.For <INuKeeperLogger>(), ForkMode.SingleRepositoryOnly); var fork = await forkFinder.FindPushFork("testUser", fallbackFork); Assert.That(fork, Is.EqualTo(fallbackFork)); }
public async Task WhenUnsuitableUserForkIsFoundItIsNotUsed() { var fallbackFork = NoMatchFork(); var userRepo = RepositoryBuilder.MakeRepository(); var collaborationPlatform = Substitute.For <ICollaborationPlatform>(); collaborationPlatform.GetUserRepository(Arg.Any <string>(), Arg.Any <string>()) .Returns(userRepo); var forkFinder = new GitHubForkFinder(collaborationPlatform, Substitute.For <INuKeeperLogger>(), ForkMode.PreferFork); var fork = await forkFinder.FindPushFork("testUser", fallbackFork); Assert.That(fork, Is.EqualTo(fallbackFork)); }
public async Task WhenSuitableUserForkIsFound_ThatMatchesCloneHtmlUrl_ItIsUsedOverFallback() { var fallbackFork = new ForkData(new Uri(RepositoryBuilder.ParentCloneUrl), "testOrg", "someRepo"); var userRepo = RepositoryBuilder.MakeRepository(); var collaborationPlatform = Substitute.For <ICollaborationPlatform>(); collaborationPlatform.GetUserRepository(Arg.Any <string>(), Arg.Any <string>()) .Returns(userRepo); var forkFinder = new GitHubForkFinder(collaborationPlatform, Substitute.For <INuKeeperLogger>(), ForkMode.PreferFork); var fork = await forkFinder.FindPushFork("testUser", fallbackFork); Assert.That(fork, Is.Not.EqualTo(fallbackFork)); AssertForkMatchesRepo(fork, userRepo); }
public async Task SingleRepoOnlyModeWillNotUseForkWhenUpstreamIsUnsuitable() { var fallbackFork = DefaultFork(); var collaborationPlatform = Substitute.For <ICollaborationPlatform>(); var defaultRepo = RepositoryBuilder.MakeRepository(true, false); collaborationPlatform.GetUserRepository(fallbackFork.Owner, fallbackFork.Name) .Returns(defaultRepo); var userRepo = RepositoryBuilder.MakeRepository(); collaborationPlatform.GetUserRepository("testUser", fallbackFork.Name) .Returns(userRepo); var forkFinder = new GitHubForkFinder(collaborationPlatform, Substitute.For <INuKeeperLogger>(), ForkMode.SingleRepositoryOnly); var fork = await forkFinder.FindPushFork("testUser", fallbackFork); Assert.That(fork, Is.Null); }
public async Task WhenUserForkIsNotFoundItIsCreated() { var fallbackFork = DefaultFork(); var userRepo = RepositoryBuilder.MakeRepository(); var collaborationPlatform = Substitute.For <ICollaborationPlatform>(); collaborationPlatform.GetUserRepository(Arg.Any <string>(), Arg.Any <string>()) .Returns((Repository)null); collaborationPlatform.MakeUserFork(Arg.Any <string>(), Arg.Any <string>()) .Returns(userRepo); var forkFinder = new GitHubForkFinder(collaborationPlatform, Substitute.For <INuKeeperLogger>(), ForkMode.PreferFork); var actualFork = await forkFinder.FindPushFork("testUser", fallbackFork); await collaborationPlatform.Received(1).MakeUserFork(Arg.Any <string>(), Arg.Any <string>()); Assert.That(actualFork, Is.Not.Null); Assert.That(actualFork, Is.Not.EqualTo(fallbackFork)); }
private void CreateForPlatform() { var forkMode = Settings.ForkMode.Value; switch (_platform.Value) { case Platform.AzureDevOps: CollaborationPlatform = new AzureDevOpsPlatform(_nuKeeperLogger); RepositoryDiscovery = new AzureDevOpsRepositoryDiscovery(_nuKeeperLogger, Settings.Token); ForkFinder = new AzureDevOpsForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); // We go for the specific platform version of ICommitWorder // here since Azure DevOps has different commit message limits compared to other platforms. CommitWorder = new AzureDevOpsCommitWorder(); break; case Platform.GitHub: CollaborationPlatform = new OctokitClient(_nuKeeperLogger); RepositoryDiscovery = new GitHubRepositoryDiscovery(_nuKeeperLogger, CollaborationPlatform); ForkFinder = new GitHubForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); CommitWorder = new DefaultCommitWorder(); break; case Platform.Bitbucket: CollaborationPlatform = new BitbucketPlatform(_nuKeeperLogger); RepositoryDiscovery = new BitbucketRepositoryDiscovery(_nuKeeperLogger); ForkFinder = new BitbucketForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); CommitWorder = new DefaultCommitWorder(); break; case Platform.BitbucketLocal: CollaborationPlatform = new BitBucketLocalPlatform(_nuKeeperLogger); RepositoryDiscovery = new BitbucketLocalRepositoryDiscovery(_nuKeeperLogger, CollaborationPlatform, Settings); ForkFinder = new BitbucketForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); CommitWorder = new DefaultCommitWorder(); break; case Platform.GitLab: CollaborationPlatform = new GitlabPlatform(_nuKeeperLogger); RepositoryDiscovery = new GitlabRepositoryDiscovery(_nuKeeperLogger, CollaborationPlatform); ForkFinder = new GitlabForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); CommitWorder = new DefaultCommitWorder(); break; case Platform.Gitea: CollaborationPlatform = new GiteaPlatform(_nuKeeperLogger); RepositoryDiscovery = new GiteaRepositoryDiscovery(_nuKeeperLogger, CollaborationPlatform); ForkFinder = new GiteaForkFinder(CollaborationPlatform, _nuKeeperLogger, forkMode); CommitWorder = new DefaultCommitWorder(); break; default: throw new NuKeeperException($"Unknown platform: {_platform}"); } var auth = new AuthSettings(Settings.BaseApiUrl, Settings.Token, Settings.Username); CollaborationPlatform.Initialise(auth); if (ForkFinder == null || RepositoryDiscovery == null || CollaborationPlatform == null) { throw new NuKeeperException($"Platform {_platform} could not be initialised"); } }