public void GitHubIssueEventCommentCreate()
        {
            GitHubIssueEvent issueEvent = JsonConvert.DeserializeObject <GitHubIssueEvent>(File.ReadAllText(@"GitHubIssueEvent.json"));

            Assert.AreEqual(issueEvent.Action, GitHubIssueActions.Actions.opened.ToString());

            // Check if GitHubIssue is created.
            Assert.IsNotNull(issueEvent.Issue);
        }
Beispiel #2
0
        public async Task <GitHubIssueEvent> AddGitHubIssueEventAsync(GitHubIssueEvent issueEvent)
        {
            if (issueEvent == null)
            {
                throw new ArgumentNullException("issueEvent");
            }
            if (issueEvent.Issue == null)
            {
                throw new ArgumentException("issueEvent.Issue cannot be null");
            }

            var issueEventInternal = _mapper.Map <GitHubIssueEvent, GitHubIssueEventInternal>(issueEvent);

            // Action can come from either Action (WebHook) or from EventName (v3 API)
            if (!string.IsNullOrWhiteSpace(issueEvent.EventName) && string.IsNullOrWhiteSpace(issueEvent.Action))
            {
                issueEvent.Action = issueEvent.EventName;
            }

            _context.GitHubIssueEvents.Add(issueEventInternal);

            // This may trigger a github issue status change:
            IssueStatusChangeInternal statusChange = null;

            if (String.Equals(issueEvent.Action, "Closed", StringComparison.OrdinalIgnoreCase))
            {
                statusChange = new IssueStatusChangeInternal()
                {
                    Issue      = issueEventInternal.Issue,
                    ChangeDate = DateTimeOffset.Now,
                    NewStatus  = IssueStatusInternal.Closed
                };
            }
            else if (String.Equals(issueEvent.Action, "Opened", StringComparison.OrdinalIgnoreCase))
            {
                statusChange = new IssueStatusChangeInternal()
                {
                    Issue      = issueEventInternal.Issue,
                    ChangeDate = DateTimeOffset.Now,
                    NewStatus  = IssueStatusInternal.Open
                };
            }
            if (statusChange != null)
            {
                _context.IssueStatusChanges.Add(statusChange);
            }

            await _context.SaveChangesAsync();

            var returnValue = _mapper.Map <GitHubIssueEventInternal, GitHubIssueEvent>(issueEventInternal);

            return(returnValue);
        }
Beispiel #3
0
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("Processing github webhook.");

            string           requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            GitHubIssueEvent githubEvent = JsonConvert.DeserializeObject <GitHubIssueEvent>(requestBody);

            if (githubEvent.action == "opened")
            {
                try
                {
                    await _gitHubIssueUpdateService.AddCommentToIssue(githubEvent.Repository.Id, githubEvent.Issue.Number, githubEvent.Issue.User.Login);
                }
                catch (Exception)
                {
                    return(new StatusCodeResult((int)HttpStatusCode.InternalServerError));
                }
            }

            return((ActionResult) new OkObjectResult(""));
        }
 public async Task Post([FromBody] GitHubIssueEvent value)
 {
     await _repository.AddGitHubIssueEventAsync(value);
 }