From 06737995ed95fbe6fee65ca967cba106e0ff78f4 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Wed, 27 Nov 2013 12:37:58 -0800 Subject: [PATCH] catch an obscure requirement when creating trees --- Octokit.Tests/Clients/TreesClientTests.cs | 13 +++++++++++++ Octokit/Clients/TreesClient.cs | 9 ++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Octokit.Tests/Clients/TreesClientTests.cs b/Octokit.Tests/Clients/TreesClientTests.cs index 60a18e2a..28bcc1b4 100644 --- a/Octokit.Tests/Clients/TreesClientTests.cs +++ b/Octokit.Tests/Clients/TreesClientTests.cs @@ -62,6 +62,19 @@ namespace Octokit.Tests await AssertEx.Throws(async () => await client.Create("owner", null, new NewTree())); await AssertEx.Throws(async () => await client.Create("owner", "", new NewTree())); } + + [Fact] + public async Task EnsureExceptionIsThrownWhenModeIsNotProvided() + { + var newTree = new NewTree(); + newTree.Tree.Add(new NewTreeItem { Path = "README.md", Type = TreeType.Blob, Sha = "2e1a73d60f004fd842d4bad28aa42392d4f35d28" }); + + var connection = Substitute.For(); + var client = new TreesClient(connection); + + await AssertEx.Throws( + async () => await client.Create("fake", "repo", newTree)); + } } public class TheCtor diff --git a/Octokit/Clients/TreesClient.cs b/Octokit/Clients/TreesClient.cs index 085ee05a..3d109fa9 100644 --- a/Octokit/Clients/TreesClient.cs +++ b/Octokit/Clients/TreesClient.cs @@ -1,4 +1,6 @@ -using System.Threading.Tasks; +using System; +using System.Linq; +using System.Threading.Tasks; namespace Octokit { @@ -44,6 +46,11 @@ namespace Octokit Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(newTree, "newTree"); + if (newTree.Tree.Any(t => String.IsNullOrWhiteSpace(t.Mode))) + { + throw new ArgumentException("You have specified items in the tree which do not have a Mode value set."); + } + return ApiConnection.Post(ApiUrls.Tree(owner, name), newTree); } }