mirror of
https://github.com/zoriya/octokit.net.git
synced 2026-06-05 11:40:42 +00:00
Finalized integration testing for review comments
This commit is contained in:
@@ -11,16 +11,15 @@ using Xunit;
|
||||
public class PullRequestReviewCommentsClientTests : IDisposable
|
||||
{
|
||||
IGitHubClient _gitHubClient;
|
||||
Repository _repository;
|
||||
List<Repository> _repositoriesToDelete = new List<Repository>();
|
||||
IPullRequestReviewCommentsClient _client;
|
||||
|
||||
string _ownerName;
|
||||
string _repoName;
|
||||
string _branchName;
|
||||
const string _branchName = "heads/new-branch";
|
||||
const string _path = "CONTRIBUTING.md";
|
||||
|
||||
string _repoName;
|
||||
int _pullRequestNumber;
|
||||
string _pullRequestCommitId;
|
||||
string _path;
|
||||
|
||||
public PullRequestReviewCommentsClientTests()
|
||||
{
|
||||
@@ -29,109 +28,276 @@ public class PullRequestReviewCommentsClientTests : IDisposable
|
||||
Credentials = Helper.Credentials
|
||||
};
|
||||
|
||||
// Creating a repository
|
||||
_client = _gitHubClient.PullRequest.Comment;
|
||||
|
||||
_repoName = Helper.MakeNameWithTimestamp("public-repo");
|
||||
_repository = _gitHubClient.Repository.Create(new NewRepository { Name = _repoName }).Result;
|
||||
_ownerName = _repository.Owner.Name;
|
||||
// We'll create a pull request that can be used by most tests
|
||||
|
||||
var pullRequestData = CreatePullRequest().Result;
|
||||
|
||||
_repositoriesToDelete.Add(pullRequestData.Repository);
|
||||
|
||||
_repoName = pullRequestData.RepoName;
|
||||
_pullRequestNumber = pullRequestData.PullRequestNumber;
|
||||
_pullRequestCommitId = pullRequestData.PullRequestCommitId;
|
||||
}
|
||||
|
||||
[IntegrationTest]
|
||||
public async Task CanCreateAndRetrieveComment()
|
||||
{
|
||||
var body = "A review comment message";
|
||||
var position = 1;
|
||||
|
||||
var createdCommentId = await CreateComment(body, position);
|
||||
|
||||
var commentFromGitHub = await _client.GetComment(Helper.UserName, _repoName, createdCommentId);
|
||||
|
||||
AssertComment(commentFromGitHub, body, position);
|
||||
}
|
||||
|
||||
[IntegrationTest]
|
||||
public async Task CanEditComment()
|
||||
{
|
||||
var body = "A new review comment message";
|
||||
var position = 1;
|
||||
|
||||
var createdCommentId = await CreateComment(body, position);
|
||||
|
||||
var edit = new PullRequestReviewCommentEdit("Edited Comment");
|
||||
|
||||
var editedComment = await _client.Edit(Helper.UserName, _repoName, createdCommentId, edit);
|
||||
|
||||
var commentFromGitHub = await _client.GetComment(Helper.UserName, _repoName, editedComment.Id);
|
||||
|
||||
AssertComment(commentFromGitHub, edit.Body, position);
|
||||
}
|
||||
|
||||
[IntegrationTest]
|
||||
public async Task CanDeleteComment()
|
||||
{
|
||||
var body = "A new review comment message";
|
||||
var position = 1;
|
||||
|
||||
var createdCommentId = await CreateComment(body, position);
|
||||
|
||||
var edit = new PullRequestReviewCommentEdit("Edited Comment");
|
||||
|
||||
Assert.DoesNotThrow(async () => { await _client.Delete(Helper.UserName, _repoName, createdCommentId); });
|
||||
}
|
||||
|
||||
[IntegrationTest]
|
||||
public async Task CanCreateReply()
|
||||
{
|
||||
var body = "Reply me!";
|
||||
var position = 1;
|
||||
|
||||
var createdCommentId = await CreateComment(body, position);
|
||||
|
||||
var reply = new PullRequestReviewCommentReplyCreate("Replied", createdCommentId);
|
||||
var createdReply = await _client.CreateReply(Helper.UserName, _repoName, _pullRequestNumber, reply);
|
||||
var createdReplyFromGitHub = await _client.GetComment(Helper.UserName, _repoName, createdReply.Id);
|
||||
|
||||
AssertComment(createdReplyFromGitHub, reply.Body, position);
|
||||
}
|
||||
|
||||
[IntegrationTest]
|
||||
public async Task CanGetForPullRequest()
|
||||
{
|
||||
var pullRequest = await CreatePullRequest();
|
||||
_repositoriesToDelete.Add(pullRequest.Repository);
|
||||
|
||||
var position = 1;
|
||||
List<string> commentsToCreate = new List<string> { "Comment 1", "Comment 2", "Comment 3" };
|
||||
|
||||
await CreateComments(commentsToCreate, position, pullRequest.RepoName, pullRequest.PullRequestCommitId, pullRequest.PullRequestNumber);
|
||||
|
||||
var pullRequestComments = await _client.GetForPullRequest(Helper.UserName, pullRequest.RepoName, pullRequest.PullRequestNumber);
|
||||
|
||||
AssertComments(pullRequestComments, commentsToCreate, position);
|
||||
}
|
||||
|
||||
[IntegrationTest]
|
||||
public async Task CanGetForRepository()
|
||||
{
|
||||
var pullRequest = await CreatePullRequest();
|
||||
_repositoriesToDelete.Add(pullRequest.Repository);
|
||||
|
||||
var position = 1;
|
||||
List<string> commentsToCreate = new List<string> { "Comment One", "Comment Two" };
|
||||
|
||||
await CreateComments(commentsToCreate, position, pullRequest.RepoName, pullRequest.PullRequestCommitId, pullRequest.PullRequestNumber);
|
||||
|
||||
var pullRequestComments = await _client.GetForRepository(Helper.UserName, pullRequest.RepoName);
|
||||
|
||||
AssertComments(pullRequestComments, commentsToCreate, position);
|
||||
}
|
||||
|
||||
[IntegrationTest]
|
||||
public async Task CanGetForRepositoryAscendingSort()
|
||||
{
|
||||
var pullRequest = await CreatePullRequest();
|
||||
_repositoriesToDelete.Add(pullRequest.Repository);
|
||||
|
||||
var position = 1;
|
||||
List<string> commentsToCreate = new List<string> { "Comment One", "Comment Two", "Comment Three", "Comment Four" };
|
||||
|
||||
await CreateComments(commentsToCreate, position, pullRequest.RepoName, pullRequest.PullRequestCommitId, pullRequest.PullRequestNumber);
|
||||
|
||||
var pullRequestComments = await _client.GetForRepository(Helper.UserName, pullRequest.RepoName, new PullRequestReviewCommentRequest { Direction = SortDirection.Ascending });
|
||||
|
||||
AssertComments(pullRequestComments, commentsToCreate, position);
|
||||
}
|
||||
|
||||
[IntegrationTest]
|
||||
public async Task CanGetForRepositoryDescendingSort()
|
||||
{
|
||||
var pullRequest = await CreatePullRequest();
|
||||
_repositoriesToDelete.Add(pullRequest.Repository);
|
||||
|
||||
var position = 1;
|
||||
List<string> commentsToCreate = new List<string> { "Comment One", "Comment Two", "Comment Three", "Comment Four" };
|
||||
|
||||
await CreateComments(commentsToCreate, position, pullRequest.RepoName, pullRequest.PullRequestCommitId, pullRequest.PullRequestNumber);
|
||||
|
||||
var pullRequestComments = await _client.GetForRepository(Helper.UserName, pullRequest.RepoName, new PullRequestReviewCommentRequest { Direction = SortDirection.Descending });
|
||||
|
||||
commentsToCreate.Reverse();
|
||||
AssertComments(pullRequestComments, commentsToCreate, position);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var repo in _repositoriesToDelete)
|
||||
{
|
||||
Helper.DeleteRepo(repo);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<int> CreateComment(string body, int position)
|
||||
{
|
||||
return await CreateComment(body, position, _repoName, _pullRequestCommitId, _pullRequestNumber);
|
||||
}
|
||||
|
||||
private async Task<int> CreateComment(string body, int position, string repoName, string pullRequestCommitId, int pullRequestNumber)
|
||||
{
|
||||
var comment = new PullRequestReviewCommentCreate(body, pullRequestCommitId, _path, position);
|
||||
|
||||
var createdComment = await _client.Create(Helper.UserName, repoName, pullRequestNumber, comment);
|
||||
|
||||
AssertComment(createdComment, body, position);
|
||||
|
||||
return createdComment.Id;
|
||||
}
|
||||
|
||||
private async Task CreateComments(List<string> comments, int position, string repoName, string pullRequestCommitId, int pullRequestNumber)
|
||||
{
|
||||
foreach (var comment in comments)
|
||||
{
|
||||
await CreateComment(comment, position, repoName, pullRequestCommitId, pullRequestNumber);
|
||||
}
|
||||
}
|
||||
|
||||
private void AssertComment(PullRequestReviewComment comment, string body, int position)
|
||||
{
|
||||
Assert.NotNull(comment);
|
||||
Assert.Equal(body, comment.Body);
|
||||
Assert.Equal(position, comment.Position);
|
||||
}
|
||||
|
||||
private void AssertComments(IReadOnlyList<PullRequestReviewComment> comments, List<string> bodies, int position)
|
||||
{
|
||||
Assert.Equal(bodies.Count, comments.Count);
|
||||
|
||||
for (int i = 0; i < bodies.Count; i = i + 1)
|
||||
{
|
||||
AssertComment(comments[i], bodies[i], position);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<Repository> CreateRepository(string repoName)
|
||||
{
|
||||
return await _gitHubClient.Repository.Create(new NewRepository { Name = repoName, AutoInit = true });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the base state for testing (creates a repo, a commit in master, a branch, a commit in the branch and a pull request)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task<PullRequestData> CreatePullRequest()
|
||||
{
|
||||
var repoName = Helper.MakeNameWithTimestamp("test-repo");
|
||||
var repository = await CreateRepository(repoName);
|
||||
|
||||
// Creating a commit in master
|
||||
|
||||
var createdCommitInMaster = await CreateCommit(repoName, "Hello World!", "README.md", "heads/master", "A master commit message");
|
||||
|
||||
// Creating a branch
|
||||
|
||||
var newBranch = new NewReference("refs/" + _branchName, createdCommitInMaster.Sha);
|
||||
var branchReference = await _gitHubClient.GitDatabase.Reference.Create(Helper.UserName, repoName, newBranch);
|
||||
|
||||
// Creating a commit in the branch
|
||||
|
||||
var createdCommitInBranch = await CreateCommit(repoName, "Hello from the fork!", _path, _branchName, "A branch commit message");
|
||||
|
||||
// Creating a pull request
|
||||
|
||||
var pullRequest = new NewPullRequest("Nice title for the pull request", _branchName, "master");
|
||||
var createdPullRequest = await _gitHubClient.PullRequest.Create(Helper.UserName, repoName, pullRequest);
|
||||
|
||||
var data = new PullRequestData
|
||||
{
|
||||
PullRequestCommitId = createdCommitInBranch.Sha,
|
||||
PullRequestNumber = createdPullRequest.Number,
|
||||
RepoName = repoName,
|
||||
Repository = repository,
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private async Task<Commit> CreateCommit(string repoName, string blobContent, string treePath, string reference, string commitMessage)
|
||||
{
|
||||
// Creating a blob
|
||||
|
||||
var blob = new NewBlob
|
||||
{
|
||||
Content = "Hello World!",
|
||||
Content = blobContent,
|
||||
Encoding = EncodingType.Utf8
|
||||
};
|
||||
|
||||
var createdBlob = _gitHubClient.GitDatabase.Blob.Create(_ownerName, _repoName, blob).Result;
|
||||
var createdBlob = await _gitHubClient.GitDatabase.Blob.Create(Helper.UserName, repoName, blob);
|
||||
|
||||
// Creating a tree
|
||||
|
||||
var treeSha = createdBlob.Sha;
|
||||
|
||||
var newTree = new NewTree();
|
||||
newTree.Tree.Add(new NewTreeItem
|
||||
{
|
||||
Type = TreeType.Blob,
|
||||
Mode = FileMode.File,
|
||||
Path = "README.md",
|
||||
Sha = treeSha,
|
||||
Path = treePath,
|
||||
Sha = createdBlob.Sha,
|
||||
});
|
||||
|
||||
var createdTree = _gitHubClient.GitDatabase.Tree.Create(_ownerName, _repoName, newTree).Result;
|
||||
var createdTree = await _gitHubClient.GitDatabase.Tree.Create(Helper.UserName, repoName, newTree);
|
||||
var treeSha = createdTree.Sha;
|
||||
|
||||
// Creating a commit
|
||||
|
||||
var commit = new NewCommit("A nice commit message", treeSha, Enumerable.Empty<string>());
|
||||
var parent = await _gitHubClient.GitDatabase.Reference.Get(Helper.UserName, repoName, reference);
|
||||
var commit = new NewCommit(commitMessage, treeSha, parent.Object.Sha);
|
||||
|
||||
var createdCommit = _gitHubClient.GitDatabase.Commit.Create(_ownerName, _repoName, commit).Result;
|
||||
var createdCommit = await _gitHubClient.GitDatabase.Commit.Create(Helper.UserName, repoName, commit);
|
||||
await _gitHubClient.GitDatabase.Reference.Update(Helper.UserName, repoName, reference, new ReferenceUpdate(createdCommit.Sha));
|
||||
|
||||
// Creating a branch
|
||||
|
||||
var newBranch = new NewReference("refs/heads/new-branch", createdCommit.Sha);
|
||||
var reference = _gitHubClient.GitDatabase.Reference.Create(_ownerName, _repoName, newBranch).Result;
|
||||
_branchName = reference.Ref;
|
||||
|
||||
// Creating a blob in the branch
|
||||
|
||||
var pullRequestBlob = new NewBlob
|
||||
{
|
||||
Content = "Hello from the fork!",
|
||||
Encoding = EncodingType.Utf8
|
||||
};
|
||||
|
||||
var createdPullRequestBlob = _gitHubClient.GitDatabase.Blob.Create(_ownerName, _branchName, pullRequestBlob).Result;
|
||||
|
||||
// Creating a tree in the branch
|
||||
|
||||
var pullRequestTreeSha = createdPullRequestBlob.Sha;
|
||||
_path = "CONTRIBUTING.md";
|
||||
|
||||
var pullRequestTree = new NewTree();
|
||||
pullRequestTree.Tree.Add(new NewTreeItem
|
||||
{
|
||||
Type = TreeType.Blob,
|
||||
Mode = FileMode.File,
|
||||
Path = _path,
|
||||
Sha = pullRequestTreeSha,
|
||||
});
|
||||
|
||||
var createdPullRequestTree = _gitHubClient.GitDatabase.Tree.Create(_ownerName, _branchName, pullRequestTree).Result;
|
||||
|
||||
// Creating a commit in the branch
|
||||
|
||||
var pullRequestcommit = new NewCommit("A pull request commit message", pullRequestTreeSha, Enumerable.Empty<string>());
|
||||
|
||||
var createdPullRequestCommit = _gitHubClient.GitDatabase.Commit.Create(_ownerName, _branchName, pullRequestcommit).Result;
|
||||
_pullRequestCommitId = createdPullRequestCommit.Sha;
|
||||
|
||||
// Creating a pull request
|
||||
|
||||
// TODO Not Implemented: http://developer.github.com/v3/pulls/#create-a-pull-request
|
||||
_pullRequestNumber = 0;
|
||||
|
||||
_client = _gitHubClient.PullRequest.Comment;
|
||||
}
|
||||
|
||||
[IntegrationTest(Skip = "Requires Pull Request Api implementation")]
|
||||
public async Task CanCreateAndRetrieveReviewComment()
|
||||
{
|
||||
var pullRequestReviewComment = new PullRequestReviewCommentCreate("A review comment message", _pullRequestCommitId, _path, 1);
|
||||
|
||||
var createdComment = await _client.Create(_ownerName, _repoName, _pullRequestNumber, pullRequestReviewComment);
|
||||
|
||||
Assert.NotNull(createdComment);
|
||||
Assert.Equal(pullRequestReviewComment.Body, createdComment.Body);
|
||||
|
||||
var commentFromGitHub = await _client.GetComment(_ownerName, _repoName, createdComment.Id);
|
||||
|
||||
Assert.NotNull(commentFromGitHub);
|
||||
Assert.Equal(pullRequestReviewComment.Body, commentFromGitHub.Body);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Helper.DeleteRepo(_repository);
|
||||
// TODO Ensure that it deletes the branch too
|
||||
return createdCommit;
|
||||
}
|
||||
}
|
||||
|
||||
class PullRequestData
|
||||
{
|
||||
public Repository Repository { get; set; }
|
||||
public int PullRequestNumber { get; set; }
|
||||
public string PullRequestCommitId { get; set; }
|
||||
public string RepoName { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user