Пример #1
0
        public async Task ItShouldProcessIssueCommentsWebhookWhenActionIsCreated(string actionState)
        {
            var currentUser = new User("", "", "", 0, "", DateTimeOffset.MinValue, DateTimeOffset.MinValue, 0, "", 0,
                                       0, null, "", 0, 0, "", "currentUser", null, 0, null, 0, 0, 0, "",
                                       new RepositoryPermissions(false, false, false), false, "", null);

            var githubService = new Mock <IGitHubService>();

            githubService.Setup(x => x.GetCurrentUser()).ReturnsAsync(currentUser);

            var pipelineRunnerService = new Mock <IPipelineRunnerService>();

            var controller = new GitHubController(pipelineRunnerService.Object, githubService.Object);

            var viewModel = new IssueCommentWebHookViewModel()
            {
                Action = actionState,
                Issue  = new IssueViewModel()
                {
                    Number = 5
                },
                Comment = new IssueCommentViewModel()
                {
                    User = new UserViewModel()
                    {
                        Login = "******"
                    }
                }
            };

            var result = await controller.HandleIssueCommentsWebhook("", viewModel);

            pipelineRunnerService.Verify(x => x.ProcessIssue(It.Is <int>(y => y == 5)), Times.Once());
            Assert.IsType <OkResult>(result);
        }
Пример #2
0
        public async Task ItShouldNotProcessIssueCommentsWebhookWhenActionIsNotCreated(string actionState)
        {
            var pipelineRunnerService = new Mock <IPipelineRunnerService>();

            var controller = new GitHubController(pipelineRunnerService.Object, Mock.Of <IGitHubService>());

            var viewModel = new IssueCommentWebHookViewModel()
            {
                Action = actionState,
                Issue  = new IssueViewModel()
                {
                    Number = 5
                },
                Comment = new IssueCommentViewModel()
                {
                    User = new UserViewModel()
                    {
                        Login = "******"
                    }
                }
            };

            var result = await controller.HandleIssueCommentsWebhook("", viewModel);

            pipelineRunnerService.Verify(x => x.ProcessIssue(It.Is <int>(y => y == 5)), Times.Never());
            Assert.IsType <OkResult>(result);
        }
Пример #3
0
        public async Task <IActionResult> HandleIssueCommentsWebhook([FromHeader(Name = "X-Hub-Signature")] string secret, [FromBody] IssueCommentWebHookViewModel viewModel)
        {
            if (!IsSecretValid(secret))
            {
                return(BadRequest());
            }

            if (viewModel.Action != "created")
            {
                return(Ok());
            }

            // Stop the bot from responding to itself
            var currentUser = await gitHubService.GetCurrentUser();

            if (currentUser.Login == viewModel.Comment.User.Login)
            {
                return(Ok());
            }

            Log.Information($"Starting to process incoming request for issue #{viewModel.Issue.Number}.");

            try {
                await pipelineRunnerService.ProcessIssue(viewModel.Issue.Number);
            } catch (Exception ex) {
                Log.Error("Error while processing issue {issue}: {error}", viewModel.Issue.Number, ex.ToString());
            }

            return(Ok());
        }