Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion SharpBucket/V2/EndPoints/IssuesResource.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.Threading;

using System.Threading.Tasks;
using SharpBucket.V2.Pocos;

namespace SharpBucket.V2.EndPoints
Expand Down Expand Up @@ -66,6 +66,27 @@ public IAsyncEnumerable<Issue> EnumerateIssuesAsync(EnumerateParameters paramete
}
#endif

/// <summary>
/// Creates a new issue in the specified repository.
/// </summary>
/// <param name="issue">The issue to create.</param>
/// <returns>The created issue.</returns>
public Issue PostIssue(Issue issue)
{
return SharpBucketV2.Post(issue, BaseUrl);
}

/// <summary>
/// Creates a new issue in the specified repository.
/// </summary>
/// <param name="issue">The issue to create.</param>
/// <param name="token">The cancellation token.</param>
/// <returns>The created issue.</returns>
public Task<Issue> PostIssueAsync(Issue issue, CancellationToken token = default)
{
return SharpBucketV2.PostAsync(issue, BaseUrl, token);
}

#region Issue Resource

/// <summary>
Expand Down
9 changes: 9 additions & 0 deletions SharpBucket/V2/RequestExecutorV2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,15 @@ private class JsonSerializerStrategy : PocoJsonSerializerStrategy
{
protected override object SerializeEnum(Enum p)
{
if (p is IssuePriority)
return p.ToString().ToLower();

if (p is IssueKind)
return p.ToString().ToLower();

if (p is IssueStatus)
return p.ToString().ToLower();

return p.ToString();
}

Expand Down
82 changes: 82 additions & 0 deletions SharpBucketTests/V2/EndPoints/IssuesResourceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
using NUnit.Framework;
using SharpBucket.V2;
using SharpBucket.V2.EndPoints;
using SharpBucket.V2.Pocos;
using SharpBucketTests.V2.Pocos;
using Shouldly;

namespace SharpBucketTests.V2.EndPoints
Expand Down Expand Up @@ -100,5 +102,85 @@ public void EnumerateIssuesAsync_NotExistingRepository_ThrowException()
async () => await NotExistingRepository.EnumerateIssuesAsync().ToListAsync());
exception.HttpStatusCode.ShouldBe(HttpStatusCode.NotFound);
}

[Test]
public void PostIssue_NewIssue_IssueIsCreated()
{
var issueResource = SampleRepositories.TestRepository.RepositoryResource.IssuesResource();
var initialIssues = issueResource.ListIssues();
var newIssue = new Issue
{
title = "newIssue",
kind = IssueKind.Task,
state = IssueStatus.Open,
priority = IssuePriority.Minor
};

var createdIssue = issueResource.PostIssue(newIssue);

createdIssue.ShouldBeFilled();
createdIssue.title.ShouldBe(newIssue.title);
createdIssue.kind.ShouldBe(newIssue.kind);
createdIssue.state.ShouldBe(newIssue.state);
createdIssue.priority.ShouldBe(newIssue.priority);

var currentIssues = issueResource.ListIssues();
currentIssues.Count.ShouldBeGreaterThan(initialIssues.Count);
}

[Test]
public void PostIssue_IssueWithNullTitle_ThrowsException()
{
var issueResource = SampleRepositories.TestRepository.RepositoryResource.IssuesResource();
var newIssue = new Issue
{
title = null,
kind = IssueKind.Task,
state = IssueStatus.Open,
priority = IssuePriority.Minor
};

Should.Throw<BitbucketV2Exception>(() => issueResource.PostIssue(newIssue));
}

[Test]
public async Task PostIssueAsync_NewIssue_IssueIsCreated()
{
var issueResource = SampleRepositories.TestRepository.RepositoryResource.IssuesResource();
var initialIssues = issueResource.ListIssues();
var newIssue = new Issue
{
title = "newIssue",
kind = IssueKind.Task,
state = IssueStatus.Open,
priority = IssuePriority.Minor
};

var createdIssue = await issueResource.PostIssueAsync(newIssue);

createdIssue.ShouldBeFilled();
createdIssue.title.ShouldBe(newIssue.title);
createdIssue.kind.ShouldBe(newIssue.kind);
createdIssue.state.ShouldBe(newIssue.state);
createdIssue.priority.ShouldBe(newIssue.priority);

var currentIssues = issueResource.ListIssues();
currentIssues.Count.ShouldBeGreaterThan(initialIssues.Count);
}

[Test]
public async Task PostIssueAsync_IssueWithNullTitle_ThrowsException()
{
var issueResource = SampleRepositories.TestRepository.RepositoryResource.IssuesResource();
var newIssue = new Issue
{
title = null,
kind = IssueKind.Task,
state = IssueStatus.Open,
priority = IssuePriority.Minor
};

Should.Throw<BitbucketV2Exception>(async () => await issueResource.PostIssueAsync(newIssue));
}
}
}
17 changes: 17 additions & 0 deletions SharpBucketTests/V2/Pocos/IssueAssertions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using SharpBucket.V2.Pocos;
using Shouldly;

namespace SharpBucketTests.V2.Pocos
{
public static class IssueAssertions
{
public static void ShouldBeFilled(this Issue issue)
{
issue.ShouldNotBeNull();
issue.content.ShouldNotBeNull();
issue.links.ShouldNotBeNull();
issue.reporter.ShouldBeFilled();
issue.repository.ShouldNotBeNull();
}
}
}