Exemplo n.º 1
0
        public async Task ReceievePullRequestReviewChangesRequestedEvent_AllTestsPassed_DoNothing()
        {
            var owner = Guid.NewGuid().ToString();
            var repo  = Guid.NewGuid().ToString();

            var payloadString = await File.ReadAllTextAsync("../../../DummyEvents/ReviewPullRequest.json");

            var payload = JsonConvert.DeserializeObject <dynamic>(payloadString);

            payload["repository"]["name"]           = repo;
            payload["repository"]["owner"]["login"] = owner;
            payload["pull_request"]["number"]       = PR_ID;
            payload["review"]["state"] = "CHANGES_REQUESTED";

            // Mock github
            var mergePrCallId = await MockMergeGithubCallHelper.MockMergeCall(owner, repo, PR_ID);

            // insert to DB with all checks passed
            await checkListsCollection.InsertWithDefaultChecks(owner, repo);

            await mergeRequestsCollection.InsertWithTestChecksSuccessAndMergeCommand(owner, repo, PR_ID);

            await MockReviewGithubCallHelper.MockAllReviewsPassedResponses(owner, repo, PR_ID);

            // ACTION
            await SendWebhookRequest("pull_request_review", JsonConvert.SerializeObject(payload));

            // ASSERT
            var mergePrCall = await GetCall(mergePrCallId);

            Assert.False(mergePrCall.HasBeenMade, "pr should not have been merged");

            var mergeRequest = await mergeRequestsCollection.Collection.Find(d => d["Owner"] == owner && d["Repo"] == repo && d["PrId"] == PR_ID).FirstAsync();

            Assert.NotNull(mergeRequest);
        }
Exemplo n.º 2
0
        public async Task PushEvent_OnPullRequestBranch_StrictMergePolicy_RemoveChecksAndResolveMiroCheck()
        {
            var owner      = Guid.NewGuid().ToString();
            var repo       = Guid.NewGuid().ToString();
            var branchName = Guid.NewGuid().ToString();
            var oldSha     = Guid.NewGuid().ToString();
            var sha        = Guid.NewGuid().ToString();

            // Load checks in DB
            await repoConfigurationCollection.Insert(owner, repo, "oldest", "whitelist-strict");

            await checkListsCollection.InsertWithDefaultChecks(owner, repo);

            await mergeRequestsCollection.InsertWithTestChecksSuccessAndMergeCommand(owner, repo, PR_ID, branchName, oldSha);

            // Issue Push event
            var payloadString = await File.ReadAllTextAsync("../../../DummyEvents/Push.json");

            var payload = JsonConvert.DeserializeObject <dynamic>(payloadString);

            payload["ref"]   = $"refs/heads/{branchName}";
            payload["after"] = sha;
            payload["repository"]["name"]           = repo;
            payload["repository"]["owner"]["login"] = owner;

            // Mock github call
            var miroMergeCheckCallId = await MockGithubCall("post", StatusCheckUrlFor(owner, repo, sha), "{}", false);

            // Action
            await SendWebhookRequest("push", JsonConvert.SerializeObject(payload));

            // Assert
            var miroMergeCheckCall = await GetCall(miroMergeCheckCallId);

            var mergeRequest = await mergeRequestsCollection.Collection.Find(d => d["Owner"] == owner && d["Repo"] == repo && d["PrId"] == PR_ID).FirstAsync();

            Assert.True(miroMergeCheckCall.HasBeenMade, "call to resolve miro check should have been made");
            Assert.Empty((BsonArray)mergeRequest["Checks"]);
            Assert.Equal(sha, mergeRequest["Sha"]);
        }