Skip to content
This repository has been archived by the owner on Aug 5, 2021. It is now read-only.

Commit

Permalink
add repo config test
Browse files Browse the repository at this point in the history
  • Loading branch information
oreporan committed Nov 18, 2020
1 parent fafde8f commit 1e9d77f
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 23 deletions.
1 change: 0 additions & 1 deletion Miro.Tests/DummyConfigYamls/default.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
deleteAfterMerge: false
mergePolicy: whitelist-strict
updateBranchStrategy: all
3 changes: 3 additions & 0 deletions Miro.Tests/DummyConfigYamls/quiet.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
mergePolicy: whitelist-strict
updateBranchStrategy: all
quiet: true
33 changes: 30 additions & 3 deletions Miro.Tests/RepoConfigurationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,36 @@ public async Task PushEventOnMaster_RepoConfigIsCreated()
Assert.NotNull(repoConfig);
Assert.Equal("all", repoConfig["UpdateBranchStrategy"]);
Assert.Equal("whitelist-strict", repoConfig["MergePolicy"]);
Assert.False((bool) repoConfig["DeleteAfterMerge"]);
}

[Fact]
public async Task PushEventOnMaster_RepoConfigIsCreated_QuietAdded()
{
var owner = Guid.NewGuid().ToString();
var repo = Guid.NewGuid().ToString();

// Issue Push event
var payloadString = await File.ReadAllTextAsync("../../../DummyEvents/Push.json");
var payload = JsonConvert.DeserializeObject<dynamic>(payloadString);
payload["repository"]["name"] = repo;
payload["repository"]["owner"]["login"] = owner;

// Mock Github call
var getConfigFileCallId = await MockRepoConfigGithubCallHelper.MockRepoConfigGithubCall(owner, repo, "quiet.yml");
await MockRequiredChecksGithubCallHelper.MockRequiredChecks(owner, repo);

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

// ASSERT
var getConfigFileCall = await GetCall(getConfigFileCallId);
Assert.True(getConfigFileCall.HasBeenMade, "getConfigFile call should have been made");

var repoConfig = await repoConfigurationCollection.Collection.Find(d => d["Owner"] == owner && d["Repo"] == repo).FirstAsync();
Assert.NotNull(repoConfig);
Assert.Equal("all", repoConfig["UpdateBranchStrategy"]);
Assert.Equal("whitelist-strict", repoConfig["MergePolicy"]);
Assert.True(repoConfig["quiet"]);
}


Expand Down Expand Up @@ -92,7 +121,6 @@ public async Task PushEventOnMaster_RepoConfigIsCreated_InvalidYml_UseDefaults()
Assert.NotNull(repoConfig);
Assert.Equal("oldest", repoConfig["UpdateBranchStrategy"]);
Assert.Equal("whitelist", repoConfig["MergePolicy"]);
Assert.True((bool) repoConfig["DeleteAfterMerge"]);
}


Expand Down Expand Up @@ -152,7 +180,6 @@ public async Task PushEventOnMaster_NoConfigFilePresent_UseDefaults()
Assert.NotNull(repoConfig);
Assert.Equal("oldest", repoConfig["UpdateBranchStrategy"]);
Assert.Equal("whitelist", repoConfig["MergePolicy"]);
Assert.True((bool) repoConfig["DeleteAfterMerge"]);
}
}
}
1 change: 0 additions & 1 deletion Miro/Models/MiroConfig/RepoConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ public class RepoConfig
public ObjectId Id { get; set; }
public string Owner { get; set; }
public string Repo { get; set; }
public bool DeleteAfterMerge { get; set; } = true;
public string MergePolicy { get; set; } = "whitelist";
public string UpdateBranchStrategy { get; set; } = "oldest";
public string DefaultBranch { get; set; } = "master";
Expand Down
18 changes: 3 additions & 15 deletions Miro/Services/Github/EventHandlers/PullRequestEventHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,29 +106,17 @@ private async Task<WebhookResponse> HandleClosedEvent(PullRequestEvent payload)
var prId = payload.Number;
var extraLoggerData = new { owner, repo, prId };

logger.WithExtraData(extraLoggerData).Information("Handling PR closed event for PR - Deleting");
logger.WithExtraData(extraLoggerData).Information("Handling PR closed event for PR - Deleting from DB");
var deletedMergeRequest = await mergeRequestRepository.Delete(owner, repo, prId);

if (deletedMergeRequest != null && payload.PullRequest.Merged)
{
logger.WithExtraData(extraLoggerData).Information($"PR was merged, deleting branch");
var wasBranchDeleted = await DeleteBranchByStrategy(deletedMergeRequest);
return new WebhookResponse(true, $"PR merged event, was branch deleted: {wasBranchDeleted}");
logger.WithExtraData(extraLoggerData).Information($"PR was merged");
return new WebhookResponse(true, $"PR merged event");
}
return new WebhookResponse(true, "PR closed event");
}

private async Task<bool> DeleteBranchByStrategy(MergeRequest mergeRequestToDelete)
{
var config = await repoConfigManager.GetConfig(mergeRequestToDelete.Owner, mergeRequestToDelete.Repo);
if (config.DeleteAfterMerge)
{
await prDeleter.DeleteBranch(mergeRequestToDelete.Owner, mergeRequestToDelete.Repo, mergeRequestToDelete.Branch);
return true;
}
return false;
}

private async Task<WebhookResponse> HandleOpenedEvent(PullRequestEvent payload)
{
var owner = payload.Repository.Owner.Login;
Expand Down
4 changes: 2 additions & 2 deletions Miro/Services/MiroConfig/RepoConfigRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ public Task<RepoConfig> Update(RepoConfig config)
};
var update = Builders<RepoConfig>.Update
.Set(r => r.UpdatedAt, DateTime.UtcNow)
.Set(r => r.DeleteAfterMerge, config.DeleteAfterMerge)
.Set(r => r.MergePolicy, config.MergePolicy)
.Set(r => r.UpdateBranchStrategy, config.UpdateBranchStrategy)
.Set(r => r.DefaultBranch, config.DefaultBranch);
.Set(r => r.DefaultBranch, config.DefaultBranch)
.Set(r => r.Quiet, config.Quiet);


return collection.FindOneAndUpdateAsync<RepoConfig>(r => r.Owner == config.Owner && r.Repo == config.Repo, update, options);
Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ On every push to `master` Miro will grab the latest `.miro.yml` file if it exist
It can look like this:

```yml
deleteAfterMerge: true|false # delete branch after meging - default: true

updateBranchStrategy: all|oldest|none # When a PR is merged, how do we update the next - default: oldest

Expand Down

0 comments on commit 1e9d77f

Please sign in to comment.