/// <summary>
        /// Gets a single Pull Request by number.
        /// </summary>
        /// <remarks>
        /// http://developer.github.com/v3/pulls/#get-a-single-pull-request
        /// </remarks>
        public IObservable <PullRequest> Get(string owner, string name, int number)
        {
            Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
            Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));

            return(_client.Get(owner, name, number).ToObservable());
        }
Esempio n. 2
0
    public async Task CannotBeMergedDueNotInMergeableState()
    {
        await CreateTheWorld();

        var master = await _github.Git.Reference.Get(Helper.UserName, _context.RepositoryName, "heads/master");

        var newMasterTree = await CreateTree(new Dictionary <string, string> {
            { "README.md", "Hello World, we meet again!" }
        });

        var masterCommit = await CreateCommit("Commit in master", newMasterTree.Sha, master.Object.Sha);

        await _github.Git.Reference.Update(Helper.UserName, _context.RepositoryName, "heads/master", new ReferenceUpdate(masterCommit.Sha));

        var newPullRequest = new NewPullRequest("a pull request", branchName, "master");
        var pullRequest    = await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest);

        await Task.Delay(TimeSpan.FromSeconds(5));

        var updatedPullRequest = await _fixture.Get(Helper.UserName, _context.RepositoryName, pullRequest.Number);

        Assert.False(updatedPullRequest.Mergeable);

        var merge = new MergePullRequest {
            Sha = pullRequest.Head.Sha
        };
        var ex = await Assert.ThrowsAsync <PullRequestNotMergeableException>(() => _fixture.Merge(Helper.UserName, _context.RepositoryName, pullRequest.Number, merge));

        Assert.True(ex.Message.Equals("Pull Request is not mergeable"));
    }
Esempio n. 3
0
        public void SetUp()
        {
            _compareResults       = new MockCompareResult();
            _gitHubClient         = Substitute.For <IGitHubClient>();
            _repoClient           = Substitute.For <IRepositoriesClient>();
            _commitsClient        = Substitute.For <IRepositoryCommitsClient>();
            _prClient             = Substitute.For <IPullRequestsClient>();
            _contentsClient       = Substitute.For <IRepositoryContentsClient>();
            _fileContentPersist   = Substitute.For <IFileContentPersist>();
            _diffTool             = Substitute.For <IDiffToolLauncher>();
            _patchService         = Substitute.For <IPatchService>();
            _reviewClient         = Substitute.For <IIssueCommentsClient>();
            _commentsBuilder      = Substitute.For <ICommentsBuilder>();
            _commentsPersist      = Substitute.For <ICommentsPersist>();
            _repoHistoryPersist   = Substitute.For <IRepoHistoryPersist>();
            _backgroundTaskRunner = Substitute.For <IBackgroundTaskRunner>();
            var userManager = Substitute.For <IUserManager>();

            _gitHubClient.Repository.Returns(_repoClient);
            _repoClient.Commit.Returns(_commitsClient);
            _repoClient.PullRequest.Returns(_prClient);
            _repoClient.Content.Returns(_contentsClient);
            _gitHubClient.Issue.Comment.Returns(_reviewClient);

            _commitsClient.Compare(Arg.Any <string>(),
                                   Arg.Any <string>(),
                                   Arg.Any <string>(),
                                   Arg.Any <string>()
                                   ).Returns(Task.FromResult((CompareResult)_compareResults));

            _mainWindowVm = new MainWindowVm(_gitHubClient, _fileContentPersist,
                                             _diffTool, _patchService, _commentsBuilder,
                                             _commentsPersist, _repoHistoryPersist, _backgroundTaskRunner, userManager)
            {
                PullRequestLocator = _pullRequestLocator,
                IsUrlMode          = false
            };

            _pullRequest = new MockPullRequest {
                Number = _pullRequestLocator.PullRequestNumber
            };
            _prClient.Get(_mainWindowVm.PullRequestLocator.Owner, _mainWindowVm.PullRequestLocator.Repository,
                          _mainWindowVm.PullRequestLocator.PullRequestNumber).Returns(Task.FromResult((PullRequest)_pullRequest));

            _baseFileName = MainWindowVm.BuildBaseFileName(_pullRequest.Base.Sha, _compareResults.File1.Filename);
            _headFileName = MainWindowVm.BuildHeadFileName(_pullRequest.Head.Sha, _compareResults.File1.Filename);

            _commentsContainer = new CommentsContainer {
                GeneralComments = GeneralComments
            };
            _commentsContainer.FileComments.Add(new FileComment
            {
                FileName     = _compareResults.File1.Filename,
                Comments     = Comment1,
                ReviewStatus = ReviewStatus1
            });
            _commentsContainer.FileComments.Add(new FileComment
            {
                FileName     = _compareResults.File2.Filename,
                Comments     = Comment2,
                ReviewStatus = ReviewStatus2
            });
            _commentsPersist.Load(Arg.Is <PullRequestLocator>(x => x.Equals(_pullRequestLocator)))
            .Returns(Task.FromResult(_commentsContainer));

            _backgroundTaskRunner.WhenForAnyArgs(x => x.RunInBackground(null)).Do(args =>
            {
                var a = args[0] as Action;
                a.Invoke();
            });

            _commentsPersist.ClearReceivedCalls();
            _backgroundTaskRunner.ClearReceivedCalls();
        }