diff --git a/Octokit.Tests/Clients/ReferencesClientTests.cs b/Octokit.Tests/Clients/ReferencesClientTests.cs index 20f705ff..bd914aea 100644 --- a/Octokit.Tests/Clients/ReferencesClientTests.cs +++ b/Octokit.Tests/Clients/ReferencesClientTests.cs @@ -79,17 +79,17 @@ namespace Octokit.Tests.Clients { var client = new ReferencesClient(Substitute.For()); - await AssertEx.Throws(async () => await client.Create(null, "name", new NewReference())); - await AssertEx.Throws(async () => await client.Create("owner", null, new NewReference())); + await AssertEx.Throws(async () => await client.Create(null, "name", new NewReference("heads/develop", "sha"))); + await AssertEx.Throws(async () => await client.Create("owner", null, new NewReference("heads/develop", "sha"))); await AssertEx.Throws(async () => await client.Create("owner", "name", null)); - await AssertEx.Throws(async () => await client.Create("", "name", new NewReference())); - await AssertEx.Throws(async () => await client.Create("owner", "", new NewReference())); + await AssertEx.Throws(async () => await client.Create("", "name", new NewReference("heads/develop", "sha"))); + await AssertEx.Throws(async () => await client.Create("owner", "", new NewReference("heads/develop", "sha"))); } [Fact] public async Task PostsToCorrectUrl() { - var newReference = new NewReference(); + var newReference = new NewReference("heads/develop", "sha"); var connection = Substitute.For(); var client = new ReferencesClient(connection); @@ -98,5 +98,61 @@ namespace Octokit.Tests.Clients connection.Received().Post(Arg.Is(u => u.ToString() == "repos/owner/repo/git/refs"), newReference); } } + + public class TheUpdateMethod + { + [Fact] + public async Task EnsuresNonNullArguments() + { + var client = new ReferencesClient(Substitute.For()); + + await AssertEx.Throws(async () => await client.Update(null, "name", "heads/develop", new ReferenceUpdate("sha"))); + await AssertEx.Throws(async () => await client.Update("owner", null, "heads/develop", new ReferenceUpdate("sha"))); + await AssertEx.Throws(async () => await client.Update("owner", "name", null, new ReferenceUpdate("sha"))); + await AssertEx.Throws(async () => await client.Update("owner", "name", "heads/develop", null)); + await AssertEx.Throws(async () => await client.Update("", "name", "heads/develop", new ReferenceUpdate("sha"))); + await AssertEx.Throws(async () => await client.Update("owner", "", "heads/develop", new ReferenceUpdate("sha"))); + await AssertEx.Throws(async () => await client.Update("owner", "name", "", new ReferenceUpdate("sha"))); + } + + [Fact] + public async Task PostsToCorrectUrl() + { + var referenceUpdate = new ReferenceUpdate("sha"); + var connection = Substitute.For(); + var client = new ReferencesClient(connection); + + await client.Update("owner", "repo", "heads/develop", referenceUpdate); + + connection.Received().Patch(Arg.Is(u => u.ToString() == "repos/owner/repo/git/refs/heads/develop"), referenceUpdate); + } + } + + public class TheDeleteMethod + { + [Fact] + public async Task EnsuresNonNullArguments() + { + var client = new ReferencesClient(Substitute.For()); + + await AssertEx.Throws(async () => await client.Delete(null, "name", "heads/develop")); + await AssertEx.Throws(async () => await client.Delete("owner", null, "heads/develop")); + await AssertEx.Throws(async () => await client.Delete("owner", "name", null)); + await AssertEx.Throws(async () => await client.Delete("", "name", "heads/develop")); + await AssertEx.Throws(async () => await client.Delete("owner", "", "heads/develop")); + await AssertEx.Throws(async () => await client.Delete("owner", "name", "")); + } + + [Fact] + public async Task RequestsCorrectUrl() + { + var connection = Substitute.For(); + var client = new ReferencesClient(connection); + + await client.Delete("owner", "repo", "heads/develop"); + + connection.Received().Delete(Arg.Is(u => u.ToString() == "repos/owner/repo/git/refs/heads/develop")); + } + } } } \ No newline at end of file diff --git a/Octokit/Models/Request/NewReference.cs b/Octokit/Models/Request/NewReference.cs index 60386a7c..d6c58ab9 100644 --- a/Octokit/Models/Request/NewReference.cs +++ b/Octokit/Models/Request/NewReference.cs @@ -2,7 +2,16 @@ { public class NewReference { - public string Ref { get; set; } - public string Sha { get; set; } + public NewReference(string @ref, string sha) + { + Ensure.ArgumentNotNullOrEmptyString(@ref, "ref"); + Ensure.ArgumentNotNullOrEmptyString(sha, "sha"); + + Ref = @ref; + Sha = sha; + } + + public string Ref { get; private set; } + public string Sha { get; private set; } } } \ No newline at end of file diff --git a/Octokit/Models/Request/ReferenceUpdate.cs b/Octokit/Models/Request/ReferenceUpdate.cs index 0b719cde..b2bf7442 100644 --- a/Octokit/Models/Request/ReferenceUpdate.cs +++ b/Octokit/Models/Request/ReferenceUpdate.cs @@ -4,11 +4,13 @@ { public ReferenceUpdate(string sha, bool force = false) { + Ensure.ArgumentNotNullOrEmptyString(sha, "sha"); + Sha = sha; Force = force; } - public string Sha { get; set; } - public bool Force { get; set; } + public string Sha { get; private set; } + public bool Force { get; private set; } } } \ No newline at end of file