From e3fa865381333899dd787e4d42286d7f8d9e9547 Mon Sep 17 00:00:00 2001 From: Ryan Gribble Date: Tue, 5 Jul 2016 23:29:42 +1000 Subject: [PATCH] add convention test to ensure all response models have a public parameterless ctor 2 model classes were missing one - technically not needed for these 2 classes due to their api calls being basic data types that then get populated into these objects, but it's easiest to just add them to these 2 classes so the test can pass on all response models --- .../MissingPublicParameterlessCtorException.cs | 11 +++++++++++ Octokit.Tests.Conventions/ModelTests.cs | 12 ++++++++++++ .../Octokit.Tests.Conventions.csproj | 1 + Octokit/Models/Response/PunchCard.cs | 3 +++ Octokit/Models/Response/RepositoryLanguage.cs | 3 +++ 5 files changed, 30 insertions(+) create mode 100644 Octokit.Tests.Conventions/Exception/MissingPublicParameterlessCtorException.cs diff --git a/Octokit.Tests.Conventions/Exception/MissingPublicParameterlessCtorException.cs b/Octokit.Tests.Conventions/Exception/MissingPublicParameterlessCtorException.cs new file mode 100644 index 00000000..806c70d0 --- /dev/null +++ b/Octokit.Tests.Conventions/Exception/MissingPublicParameterlessCtorException.cs @@ -0,0 +1,11 @@ +using System; + +namespace Octokit.Tests.Conventions +{ + public class MissingPublicParameterlessCtorException : Exception + { + public MissingPublicParameterlessCtorException(Type modelType) + : base(string.Format("Model type '{0}' is missing a Public Parameterless Constructor required by SimpleJson Deserializer.", modelType.FullName)) + { } + } +} \ No newline at end of file diff --git a/Octokit.Tests.Conventions/ModelTests.cs b/Octokit.Tests.Conventions/ModelTests.cs index 1d3f5e16..7da1fcec 100644 --- a/Octokit.Tests.Conventions/ModelTests.cs +++ b/Octokit.Tests.Conventions/ModelTests.cs @@ -37,6 +37,18 @@ namespace Octokit.Tests.Conventions } } + [Theory] + [MemberData("ResponseModelTypes")] + public void AllResponseModelsHavePublicParameterlessCtors(Type modelType) + { + var ctor = modelType.GetConstructor(Type.EmptyTypes); + + if (ctor == null || !ctor.IsPublic) + { + throw new MissingPublicParameterlessCtorException(modelType); + } + } + [Theory] [MemberData("ResponseModelTypes")] public void ResponseModelsHaveGetterOnlyProperties(Type modelType) diff --git a/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj b/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj index e06a67b8..412724b7 100644 --- a/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj +++ b/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj @@ -67,6 +67,7 @@ + diff --git a/Octokit/Models/Response/PunchCard.cs b/Octokit/Models/Response/PunchCard.cs index 4fdb5d79..02c0bdec 100644 --- a/Octokit/Models/Response/PunchCard.cs +++ b/Octokit/Models/Response/PunchCard.cs @@ -10,6 +10,9 @@ namespace Octokit [DebuggerDisplay("{DebuggerDisplay,nq}")] public class PunchCard { + public PunchCard() + { } + public PunchCard(IEnumerable> punchCardData) { Ensure.ArgumentNotNull(punchCardData, "punchCardData"); diff --git a/Octokit/Models/Response/RepositoryLanguage.cs b/Octokit/Models/Response/RepositoryLanguage.cs index 44fd9c7a..c1d762eb 100644 --- a/Octokit/Models/Response/RepositoryLanguage.cs +++ b/Octokit/Models/Response/RepositoryLanguage.cs @@ -7,6 +7,9 @@ namespace Octokit [DebuggerDisplay("{DebuggerDisplay,nq}")] public class RepositoryLanguage { + public RepositoryLanguage() + { } + public RepositoryLanguage(string name, long numberOfBytes) { Name = name;