public async Task ThrowsWhenNoPushableForkCanBeFound()
        {
            var fallbackFork = DefaultFork();

            var forkFinder = new AzureDevOpsForkFinder(Substitute.For <ICollaborationPlatform>(), Substitute.For <INuKeeperLogger>(), ForkMode.SingleRepositoryOnly);

            var fork = await forkFinder.FindPushFork("testUser", fallbackFork);

            Assert.That(fork, Is.Null);
        }
示例#2
0
        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 AzureDevOpsForkFinder(Substitute.For <ICollaborationPlatform>(), Substitute.For <INuKeeperLogger>(), ForkMode.SingleRepositoryOnly);

            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 AzureDevOpsForkFinder(collaborationPlatform, Substitute.For <INuKeeperLogger>(), ForkMode.SingleRepositoryOnly);

            var fork = await forkFinder.FindPushFork("testUser", fallbackFork);

            Assert.That(fork, Is.EqualTo(fallbackFork));
        }
        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 AzureDevOpsForkFinder(collaborationPlatform, Substitute.For <INuKeeperLogger>(), ForkMode.SingleRepositoryOnly);

            var fork = await forkFinder.FindPushFork("testUser", fallbackFork);

            Assert.That(fork, Is.Null);
        }
示例#6
0
        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");
            }
        }