From 59b22744b406904936bb81c7d73e360be2f8730e Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Wed, 22 Apr 2015 23:25:23 -0400 Subject: [PATCH 01/11] many adjustments --- Untappd.Net.sln.DotSettings | 2 + .../TestAuthenticationHelper.cs | 21 +++++- .../Request/TestRepository.cs | 9 +++ .../Responses/TestDeserializer.cs | 74 +++++++++---------- .../Responses/TestResponseEndpoints.cs | 31 ++++++++ .../Untappd.Net.UnitTests.csproj | 1 + .../Authentication/AuthenticationHelper.cs | 5 -- .../UnAuthenticatedUntappdCredentials.cs | 4 +- src/Untappd.Net/Client/UntappdCredentials.cs | 2 +- src/Untappd.Net/Request/BasicRequest.cs | 1 + .../Request/IAuthenticatedRequest.cs | 8 +- src/Untappd.Net/Request/IRequest.cs | 8 +- .../Request/IUnAuthenticatedRequest.cs | 8 +- src/Untappd.Net/Request/Repository.cs | 40 +++++----- src/Untappd.Net/Responses/UserBadges.cs | 1 - src/Untappd.Net/SingleObjectArrayConverter.cs | 19 ++--- 16 files changed, 133 insertions(+), 101 deletions(-) create mode 100644 Untappd.Net.sln.DotSettings create mode 100644 src/Untappd.Net.UnitTests/Responses/TestResponseEndpoints.cs diff --git a/Untappd.Net.sln.DotSettings b/Untappd.Net.sln.DotSettings new file mode 100644 index 0000000..aff3492 --- /dev/null +++ b/Untappd.Net.sln.DotSettings @@ -0,0 +1,2 @@ + + <data><IncludeFilters /><ExcludeFilters><Filter ModuleMask="Untappd.Net.UnitTests" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="True" /></ExcludeFilters></data> \ No newline at end of file diff --git a/src/Untappd.Net.UnitTests/Authentication/TestAuthenticationHelper.cs b/src/Untappd.Net.UnitTests/Authentication/TestAuthenticationHelper.cs index 4d2d1b5..7ea9b41 100644 --- a/src/Untappd.Net.UnitTests/Authentication/TestAuthenticationHelper.cs +++ b/src/Untappd.Net.UnitTests/Authentication/TestAuthenticationHelper.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using NUnit.Framework; using Untappd.Net.Authentication; using Untappd.Net.Client; @@ -47,5 +43,22 @@ namespace Untappd.Net.UnitTests.Authentication AuthenticationHelper.TokenUrl(new UnAuthenticatedUntappdCredentials("d", "d"), "ds", string.Empty); } + + [Test] + public void TestTokenUrl() + { + + var s = AuthenticationHelper.TokenUrl(new UnAuthenticatedUntappdCredentials("d", "d"), "ds", "code"); + Assert.AreEqual(s, Constants.OAuthTokenEndPoint + "/?client_id=d&client_secret=d&response_type=code&redirect_url=ds&code=code"); + + } + [Test] + public void TestRedirectUrl() + { + + var s = AuthenticationHelper.RedirectUserTo(new UnAuthenticatedUntappdCredentials("d", "d"), "ds"); + Assert.AreEqual(s, Constants.BaseRequestString + "/?client_id=d&response_type=code&redirect_url=ds"); + + } } } diff --git a/src/Untappd.Net.UnitTests/Request/TestRepository.cs b/src/Untappd.Net.UnitTests/Request/TestRepository.cs index 00453c0..b405557 100644 --- a/src/Untappd.Net.UnitTests/Request/TestRepository.cs +++ b/src/Untappd.Net.UnitTests/Request/TestRepository.cs @@ -45,5 +45,14 @@ namespace Untappd.Net.UnitTests.Request Assert.IsTrue(constructorTest.Client != null); Assert.IsTrue(constructorTest.Request != null); } + [Test] + public void ConfirmConfigureGetRequestClearsParams() + { + var constructorTest = new Repository(); + constructorTest.Request.Parameters.Add(new Parameter(){Name = "param"}); + Assert.IsTrue(constructorTest.Request.Parameters.Count > 0); + constructorTest.ConfigureGetRequest("endpoint"); + Assert.IsTrue(constructorTest.Request.Parameters.Count == 0); + } } } diff --git a/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs b/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs index d7eb638..06fc9c4 100644 --- a/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs +++ b/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs @@ -1,21 +1,21 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using System.IO; +using Newtonsoft.Json; using NUnit.Framework; using Untappd.Net.Client; using Untappd.Net.Request; -using Newtonsoft.Json; -using UserInfo = Untappd.Net.Responses.UserInfo; -using ActivityFeed = Untappd.Net.Responses.Feeds.ActivityFeed; -using UserActivityFeed = Untappd.Net.Responses.Feeds.UserActivityFeed; -using UserBadges = Untappd.Net.Responses.UserBadges; -using BeerInfo = Untappd.Net.Responses.BeerInfo; -using BeerSearch = Untappd.Net.Responses.BeerSearch; -using BreweryInfo = Untappd.Net.Responses.BreweryInfo; -using BrewerySearch = Untappd.Net.Responses.BrewerySearch; +using Untappd.Net.Responses.BeerInfo; +using Untappd.Net.Responses.BeerSearch; +using Untappd.Net.Responses.BreweryInfo; +using Untappd.Net.Responses.BrewerySearch; +using Untappd.Net.Responses.Feeds.ActivityFeed; +using Untappd.Net.Responses.Feeds.UserActivityFeed; +using Untappd.Net.Responses.UserBadges; +using Untappd.Net.Responses.UserFriends; +using Untappd.Net.Responses.UserInfo; +using Untappd.Net.Responses.VenueInfo; using UserDistinctBeers = Untappd.Net.Responses.UserDistinctBeer; -using UserFriends = Untappd.Net.Responses.UserFriends; using UserWishList = Untappd.Net.Responses.UserWishlist; -using VenueInfo = Untappd.Net.Responses.VenueInfo; namespace Untappd.Net.UnitTests { @@ -38,92 +38,92 @@ namespace Untappd.Net.UnitTests var repo = new Repository(); //var resp = repo.Get(credentials); - var resp3 = repo.Get(credentials, "", parameters); - var resp2 = repo.Get(credentials); + var resp3 = repo.Get(credentials, "", parameters); + var resp2 = repo.Get(credentials); } [Test] public void TestJsonDeserializeUserBadges() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "UserBadges.json")); - var jsonresult = JsonConvert.DeserializeObject(json); + var json = File.ReadAllText(string.Format(ResponsePath, "UserBadges.json")); + var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerBeerInfo() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "BeerInfo.json")); - var jsonresult = JsonConvert.DeserializeObject(json); + var json = File.ReadAllText(string.Format(ResponsePath, "BeerInfo.json")); + var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerBeerSearch() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "BeerSearch.json")); - var jsonresult = JsonConvert.DeserializeObject(json); + var json = File.ReadAllText(string.Format(ResponsePath, "BeerSearch.json")); + var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerBreweryInfo() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "BreweryInfo.json")); - var jsonresult = JsonConvert.DeserializeObject(json); + var json = File.ReadAllText(string.Format(ResponsePath, "BreweryInfo.json")); + var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerBrewerySearch() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "BrewerySearch.json")); - var jsonresult = JsonConvert.DeserializeObject(json); + var json = File.ReadAllText(string.Format(ResponsePath, "BrewerySearch.json")); + var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerUserDistinctBeers() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "UserDistinctBeers.json")); + var json = File.ReadAllText(string.Format(ResponsePath, "UserDistinctBeers.json")); var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerUserFriends() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "UserFriends.json")); - var jsonresult = JsonConvert.DeserializeObject(json); + var json = File.ReadAllText(string.Format(ResponsePath, "UserFriends.json")); + var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerUserInfo() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "UserInfo.json")); - var jsonresult = JsonConvert.DeserializeObject(json); + var json = File.ReadAllText(string.Format(ResponsePath, "UserInfo.json")); + var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerUserWishList() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "UserWishList.json")); + var json = File.ReadAllText(string.Format(ResponsePath, "UserWishList.json")); var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerVenueInfo() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "VenueInfo.json")); - var jsonresult = JsonConvert.DeserializeObject(json); + var json = File.ReadAllText(string.Format(ResponsePath, "VenueInfo.json")); + var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerActivityFeed() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "ActivityFeed.json")); - var jsonresult = JsonConvert.DeserializeObject(json); + var json = File.ReadAllText(string.Format(ResponsePath, "ActivityFeed.json")); + var jsonresult = JsonConvert.DeserializeObject(json); } [Test] public void TestJsonDeserializerUserActivityFeed() { - var json = System.IO.File.ReadAllText(string.Format(ResponsePath, "UserActivityFeed.json")); - var jsonresult = JsonConvert.DeserializeObject(json); + var json = File.ReadAllText(string.Format(ResponsePath, "UserActivityFeed.json")); + var jsonresult = JsonConvert.DeserializeObject(json); } } } diff --git a/src/Untappd.Net.UnitTests/Responses/TestResponseEndpoints.cs b/src/Untappd.Net.UnitTests/Responses/TestResponseEndpoints.cs new file mode 100644 index 0000000..959d8bb --- /dev/null +++ b/src/Untappd.Net.UnitTests/Responses/TestResponseEndpoints.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; +using Untappd.Net.Request; + +namespace Untappd.Net.UnitTests.Responses +{ + [TestFixture] + public class TestResponseEndpoints + { + + /// + /// Run through all the endpoints to make sure they all atleast do not error out. + /// This is so we can get a high code coverage, while also covering new types that get added. + /// + [Test] + public void RunAllEndpoints() + { + + var objects = Assembly.GetAssembly(typeof (IRequest)).GetTypes().Where(myType => + myType.IsClass + && !myType.IsAbstract + && myType.GetInterface("IRequest") != null).Select(type => (IRequest) Activator.CreateInstance(type)).ToList(); + objects.ForEach(a=>Assert.IsNotNullOrEmpty(a.EndPoint("t"))); + } + } +} diff --git a/src/Untappd.Net.UnitTests/Untappd.Net.UnitTests.csproj b/src/Untappd.Net.UnitTests/Untappd.Net.UnitTests.csproj index 6c21b27..9bb0afb 100644 --- a/src/Untappd.Net.UnitTests/Untappd.Net.UnitTests.csproj +++ b/src/Untappd.Net.UnitTests/Untappd.Net.UnitTests.csproj @@ -77,6 +77,7 @@ + diff --git a/src/Untappd.Net/Authentication/AuthenticationHelper.cs b/src/Untappd.Net/Authentication/AuthenticationHelper.cs index a3dad16..ddb9226 100644 --- a/src/Untappd.Net/Authentication/AuthenticationHelper.cs +++ b/src/Untappd.Net/Authentication/AuthenticationHelper.cs @@ -1,10 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Untappd.Net.Client; -using Untappd.Net.Request; namespace Untappd.Net.Authentication { diff --git a/src/Untappd.Net/Client/UnAuthenticatedUntappdCredentials.cs b/src/Untappd.Net/Client/UnAuthenticatedUntappdCredentials.cs index b349e02..39f4b68 100644 --- a/src/Untappd.Net/Client/UnAuthenticatedUntappdCredentials.cs +++ b/src/Untappd.Net/Client/UnAuthenticatedUntappdCredentials.cs @@ -1,6 +1,4 @@ -using System; - -namespace Untappd.Net.Client +namespace Untappd.Net.Client { public class UnAuthenticatedUntappdCredentials : UntappdCredentials, IUnAuthenticatedUntappdCredentials { diff --git a/src/Untappd.Net/Client/UntappdCredentials.cs b/src/Untappd.Net/Client/UntappdCredentials.cs index 6bdbce8..23e5390 100644 --- a/src/Untappd.Net/Client/UntappdCredentials.cs +++ b/src/Untappd.Net/Client/UntappdCredentials.cs @@ -12,7 +12,7 @@ namespace Untappd.Net.Client /// /// /// - public UntappdCredentials(string clientId, string clientSecret) + protected UntappdCredentials(string clientId, string clientSecret) { if (string.IsNullOrWhiteSpace(clientId)) { diff --git a/src/Untappd.Net/Request/BasicRequest.cs b/src/Untappd.Net/Request/BasicRequest.cs index 37e5688..f3ab311 100644 --- a/src/Untappd.Net/Request/BasicRequest.cs +++ b/src/Untappd.Net/Request/BasicRequest.cs @@ -1,4 +1,5 @@ using System; + namespace Untappd.Net.Request { public abstract class BasicRequest diff --git a/src/Untappd.Net/Request/IAuthenticatedRequest.cs b/src/Untappd.Net/Request/IAuthenticatedRequest.cs index a102cdc..3ec9ffd 100644 --- a/src/Untappd.Net/Request/IAuthenticatedRequest.cs +++ b/src/Untappd.Net/Request/IAuthenticatedRequest.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Untappd.Net.Request +namespace Untappd.Net.Request { public interface IAuthenticatedRequest : IRequest { diff --git a/src/Untappd.Net/Request/IRequest.cs b/src/Untappd.Net/Request/IRequest.cs index 44b548a..1283f2f 100644 --- a/src/Untappd.Net/Request/IRequest.cs +++ b/src/Untappd.Net/Request/IRequest.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Untappd.Net.Request +namespace Untappd.Net.Request { public interface IRequest { diff --git a/src/Untappd.Net/Request/IUnAuthenticatedRequest.cs b/src/Untappd.Net/Request/IUnAuthenticatedRequest.cs index a4d49b1..86e287c 100644 --- a/src/Untappd.Net/Request/IUnAuthenticatedRequest.cs +++ b/src/Untappd.Net/Request/IUnAuthenticatedRequest.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Untappd.Net.Request +namespace Untappd.Net.Request { public interface IUnAuthenticatedRequest : IRequest { diff --git a/src/Untappd.Net/Request/Repository.cs b/src/Untappd.Net/Request/Repository.cs index faf5c4d..946cc2f 100644 --- a/src/Untappd.Net/Request/Repository.cs +++ b/src/Untappd.Net/Request/Repository.cs @@ -1,10 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; +using System.Collections.Generic; using Newtonsoft.Json; using RestSharp; using Untappd.Net.Client; -using System.Threading; namespace Untappd.Net.Request { @@ -25,15 +22,18 @@ namespace Untappd.Net.Request Request = request; } - private void ConfigureGetRequest(IRestRequest request, string endPoint, IDictionary bodyParameters = null) + internal void ConfigureGetRequest(string endPoint, IDictionary bodyParameters = null) { - request.Resource = endPoint; - request.Method = Method.GET; - if (request.Parameters != null) this.Request.Parameters.Clear(); + Request.Resource = endPoint; + Request.Method = Method.GET; + if (Request.Parameters != null) Request.Parameters.Clear(); - if (bodyParameters != null) - foreach (var param in bodyParameters) - request.AddParameter(param.Key, param.Value); + if (bodyParameters == null) return; + foreach (var param in bodyParameters) + { + Request.AddParameter(param.Key, param.Value); + } + } /// @@ -48,12 +48,12 @@ namespace Untappd.Net.Request where TResult : IUnAuthenticatedRequest,new() { var result = new TResult(); - this.ConfigureGetRequest(this.Request, result.EndPoint(urlParameter), bodyParameters); + ConfigureGetRequest(result.EndPoint(urlParameter), bodyParameters); - this.Request.AddParameter("client_id", credentials.ClientId); - this.Request.AddParameter("client_secret", credentials.ClientSecret); + Request.AddParameter("client_id", credentials.ClientId); + Request.AddParameter("client_secret", credentials.ClientSecret); - return this.DoRestRequest(this.Request); + return DoRestRequest(); } /// @@ -68,17 +68,17 @@ namespace Untappd.Net.Request where TResult : IAuthenticatedRequest, new() { var result = new TResult(); - this.ConfigureGetRequest(this.Request, result.EndPoint(urlParameter), bodyParameters); + ConfigureGetRequest(result.EndPoint(urlParameter), bodyParameters); - this.Request.AddParameter("access_token", credentials.AccessToken); + Request.AddParameter("access_token", credentials.AccessToken); - return this.DoRestRequest(this.Request); + return DoRestRequest(); } - private TResult DoRestRequest(IRestRequest request) + private TResult DoRestRequest() { var client = new RestClient(Constants.BaseRequestString); - var resp = client.Execute(request); + var resp = client.Execute(Request); return JsonConvert.DeserializeObject(resp.Content); } diff --git a/src/Untappd.Net/Responses/UserBadges.cs b/src/Untappd.Net/Responses/UserBadges.cs index 7ba02ff..6cfd4bf 100644 --- a/src/Untappd.Net/Responses/UserBadges.cs +++ b/src/Untappd.Net/Responses/UserBadges.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using Newtonsoft.Json; using Untappd.Net.Request; -using System.ComponentModel; namespace Untappd.Net.Responses.UserBadges { diff --git a/src/Untappd.Net/SingleObjectArrayConverter.cs b/src/Untappd.Net/SingleObjectArrayConverter.cs index b3c349e..75d6c40 100644 --- a/src/Untappd.Net/SingleObjectArrayConverter.cs +++ b/src/Untappd.Net/SingleObjectArrayConverter.cs @@ -19,17 +19,18 @@ namespace Untappd.Net public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { - object retval = new Object(); + var retval = new Object(); - if (reader.TokenType == JsonToken.StartObject) + switch (reader.TokenType) { - T instance = (T)serializer.Deserialize(reader, typeof(T)); - retval = instance; - } - else if (reader.TokenType == JsonToken.StartArray) - { - reader.Read(); - retval = null; + case JsonToken.StartObject: + var instance = (T)serializer.Deserialize(reader, typeof(T)); + retval = instance; + break; + case JsonToken.StartArray: + reader.Read(); + retval = null; + break; } return retval; From d77155e4165d84f5ed247be29215959f83a97696 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Wed, 22 Apr 2015 23:41:34 -0400 Subject: [PATCH 02/11] remove dot settings file and add gitignore --- .gitignore | 2 +- Untappd.Net.sln.DotSettings | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 Untappd.Net.sln.DotSettings diff --git a/.gitignore b/.gitignore index 57a1574..830d556 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,7 @@ *.user *.userosscache *.sln.docstates - +*.DotSettings # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs diff --git a/Untappd.Net.sln.DotSettings b/Untappd.Net.sln.DotSettings deleted file mode 100644 index aff3492..0000000 --- a/Untappd.Net.sln.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - <data><IncludeFilters /><ExcludeFilters><Filter ModuleMask="Untappd.Net.UnitTests" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="True" /></ExcludeFilters></data> \ No newline at end of file From e537e1ad95fe5bda35eb7d01029cbc1269e6430f Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 21:22:13 -0400 Subject: [PATCH 03/11] async things, and other minor changes --- .../Responses/TestDeserializer.cs | 8 +++ .../Responses/TestResponseEndpoints.cs | 10 +++ .../EndpointConfigurationException.cs | 1 + src/Untappd.Net/Request/Repository.cs | 66 ++++++++++++++----- src/Untappd.Net/SingleObjectArrayConverter.cs | 5 +- 5 files changed, 70 insertions(+), 20 deletions(-) diff --git a/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs b/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs index 06fc9c4..aa7f503 100644 --- a/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs +++ b/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs @@ -16,6 +16,7 @@ using Untappd.Net.Responses.UserInfo; using Untappd.Net.Responses.VenueInfo; using UserDistinctBeers = Untappd.Net.Responses.UserDistinctBeer; using UserWishList = Untappd.Net.Responses.UserWishlist; +using System; namespace Untappd.Net.UnitTests { @@ -125,5 +126,12 @@ namespace Untappd.Net.UnitTests var json = File.ReadAllText(string.Format(ResponsePath, "UserActivityFeed.json")); var jsonresult = JsonConvert.DeserializeObject(json); } + + [Test] + [ExpectedException(typeof(NotImplementedException))] + public void testNotImplementedException() + { + new SingleObjectArrayConverter().WriteJson(null, null, null); + } } } diff --git a/src/Untappd.Net.UnitTests/Responses/TestResponseEndpoints.cs b/src/Untappd.Net.UnitTests/Responses/TestResponseEndpoints.cs index 959d8bb..deba7af 100644 --- a/src/Untappd.Net.UnitTests/Responses/TestResponseEndpoints.cs +++ b/src/Untappd.Net.UnitTests/Responses/TestResponseEndpoints.cs @@ -27,5 +27,15 @@ namespace Untappd.Net.UnitTests.Responses && myType.GetInterface("IRequest") != null).Select(type => (IRequest) Activator.CreateInstance(type)).ToList(); objects.ForEach(a=>Assert.IsNotNullOrEmpty(a.EndPoint("t"))); } + [Test] + public void RunAllEndpointsWithEmptyString() + { + + var objects = Assembly.GetAssembly(typeof (IRequest)).GetTypes().Where(myType => + myType.IsClass + && !myType.IsAbstract + && myType.GetInterface("IRequest") != null).Select(type => (IRequest) Activator.CreateInstance(type)).ToList(); + objects.ForEach(a=>Assert.IsNotNullOrEmpty(a.EndPoint(string.Empty))); + } } } diff --git a/src/Untappd.Net/Exception/EndpointConfigurationException.cs b/src/Untappd.Net/Exception/EndpointConfigurationException.cs index 30f8324..2d9786d 100644 --- a/src/Untappd.Net/Exception/EndpointConfigurationException.cs +++ b/src/Untappd.Net/Exception/EndpointConfigurationException.cs @@ -1,5 +1,6 @@ namespace Untappd.Net.Exception { + [System.Serializable] public class EndpointConfigurationException : BaseUntappdException { /// diff --git a/src/Untappd.Net/Request/Repository.cs b/src/Untappd.Net/Request/Repository.cs index 946cc2f..d398ff8 100644 --- a/src/Untappd.Net/Request/Repository.cs +++ b/src/Untappd.Net/Request/Repository.cs @@ -2,6 +2,8 @@ using Newtonsoft.Json; using RestSharp; using Untappd.Net.Client; +using System.Threading.Tasks; +using System.Threading; namespace Untappd.Net.Request { @@ -22,10 +24,10 @@ namespace Untappd.Net.Request Request = request; } - internal void ConfigureGetRequest(string endPoint, IDictionary bodyParameters = null) + internal void ConfigureGetRequest(string endPoint, Method webMethod = Method.GET, IDictionary bodyParameters = null) { Request.Resource = endPoint; - Request.Method = Method.GET; + Request.Method = webMethod; if (Request.Parameters != null) Request.Parameters.Clear(); if (bodyParameters == null) return; @@ -48,14 +50,30 @@ namespace Untappd.Net.Request where TResult : IUnAuthenticatedRequest,new() { var result = new TResult(); - ConfigureGetRequest(result.EndPoint(urlParameter), bodyParameters); - + ConfigureGetRequest(result.EndPoint(urlParameter), Method.GET, bodyParameters); Request.AddParameter("client_id", credentials.ClientId); Request.AddParameter("client_secret", credentials.ClientSecret); - return DoRestRequest(); } + /// + /// Get the things! Async! + /// + /// + /// + /// + /// + /// + public Task GetAsync(IUnAuthenticatedUntappdCredentials credentials, string urlParameter, IDictionary bodyParameters = null) + where TResult : IUnAuthenticatedRequest, new() + { + var result = new TResult(); + ConfigureGetRequest(result.EndPoint(urlParameter), Method.GET, bodyParameters); + Request.AddParameter("client_id", credentials.ClientId); + Request.AddParameter("client_secret", credentials.ClientSecret); + return DoRestRequestAsync(); + } + /// /// Get the things! authenticated! /// @@ -68,26 +86,38 @@ namespace Untappd.Net.Request where TResult : IAuthenticatedRequest, new() { var result = new TResult(); - ConfigureGetRequest(result.EndPoint(urlParameter), bodyParameters); - + ConfigureGetRequest(result.EndPoint(urlParameter), Method.GET, bodyParameters); Request.AddParameter("access_token", credentials.AccessToken); - return DoRestRequest(); } + /// + /// Get the things Authenticated! Async!! + /// + /// + /// + /// + /// + /// + public Task GetAsync(IAuthenticatedUntappdCredentials credentials, string urlParameter = "", IDictionary bodyParameters = null) + where TResult : IAuthenticatedRequest, new() + { + var result = new TResult(); + ConfigureGetRequest(result.EndPoint(urlParameter), Method.GET, bodyParameters); + Request.AddParameter("access_token", credentials.AccessToken); + return DoRestRequestAsync(); + } + private TResult DoRestRequest() { - var client = new RestClient(Constants.BaseRequestString); - var resp = client.Execute(Request); - return JsonConvert.DeserializeObject(resp.Content); + var response = Client.Execute(this.Request); + return JsonConvert.DeserializeObject(response.Content); } - //private async Task DoRestRequestAsync(IRestRequest request) - //{ - // var client = new RestClient(Constants.BaseRequestString); - // var cancellationTokenSource = new CancellationTokenSource(); - // var resp = await client.ExecuteTaskAsync(request, cancellationTokenSource.Token); - // return JsonConvert.DeserializeObject(resp.Content); - //} + private async Task DoRestRequestAsync() + { + var response = await Client.ExecuteTaskAsync(Request); + return JsonConvert.DeserializeObject(response.Content); + } } } diff --git a/src/Untappd.Net/SingleObjectArrayConverter.cs b/src/Untappd.Net/SingleObjectArrayConverter.cs index 75d6c40..b5b73ec 100644 --- a/src/Untappd.Net/SingleObjectArrayConverter.cs +++ b/src/Untappd.Net/SingleObjectArrayConverter.cs @@ -1,5 +1,6 @@ using System; using Newtonsoft.Json; +using Untappd.Net.Request; namespace Untappd.Net { @@ -14,12 +15,12 @@ namespace Untappd.Net { public override bool CanConvert(Type objectType) { - return true; + return objectType.IsAssignableFrom(typeof(IAuthenticatedRequest)) || objectType.IsAssignableFrom(typeof(IUnAuthenticatedRequest)); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { - var retval = new Object(); + var retval = new object(); switch (reader.TokenType) { From 0aeef89c633504fdd46c4eba5360355bfb74da1c Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 21:34:04 -0400 Subject: [PATCH 04/11] add gitter notification webhook --- appveyor.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index f132c85..7afed14 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,11 @@ version: 0.2.{build} configuration: Release +notifications: + - provider: Webhook + url: https://webhooks.gitter.im/e/4ddb88959635299132ce + on_build_success: false + on_build_failure: True + on_build_status_changed: true assembly_info: patch: true file: '**\AssemblyInfo.*' From e2bc9f397d82c8cdea40f0107da06549930f8212 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 21:36:28 -0400 Subject: [PATCH 05/11] I hate yaml --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 7afed14..ca0553a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,9 +3,9 @@ configuration: Release notifications: - provider: Webhook url: https://webhooks.gitter.im/e/4ddb88959635299132ce - on_build_success: false + on_build_success: false on_build_failure: True - on_build_status_changed: true + on_build_status_changed: true assembly_info: patch: true file: '**\AssemblyInfo.*' From 60c599c1eefe59a0f7e8a9f19fdeb9a0fda280b9 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 21:59:38 -0400 Subject: [PATCH 06/11] test async things --- .../Request/TestRepository.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Untappd.Net.UnitTests/Request/TestRepository.cs b/src/Untappd.Net.UnitTests/Request/TestRepository.cs index b405557..9a5b815 100644 --- a/src/Untappd.Net.UnitTests/Request/TestRepository.cs +++ b/src/Untappd.Net.UnitTests/Request/TestRepository.cs @@ -6,6 +6,7 @@ using RestSharp; using Untappd.Net.Client; using Untappd.Net.Request; using Untappd.Net.Responses.BeerInfo; +using System.Threading.Tasks; namespace Untappd.Net.UnitTests.Request { @@ -30,12 +31,29 @@ namespace Untappd.Net.UnitTests.Request client.Setup(a => a.Execute(It.IsAny())).Callback(() => { }).Returns(response.Object); + client.Setup(a => a.ExecuteTaskAsync(It.IsAny())).Callback(() => + { + }).Returns(Task.Run(()=> response.Object)); var repository = new Repository(client.Object, request.Object); repository.Get(mockCreds.Object, "awesome", bodyParam); request.Verify(a => a.AddParameter("client_id", mockCreds.Object.ClientId)); request.Verify(a => a.AddParameter("client_secret", mockCreds.Object.ClientSecret)); request.Verify(a => a.AddParameter("key", "value")); + repository.GetAsync(mockCreds.Object, "awesome", bodyParam).Wait(); + request.Verify(a => a.AddParameter("client_id", mockCreds.Object.ClientId)); + request.Verify(a => a.AddParameter("client_secret", mockCreds.Object.ClientSecret)); + request.Verify(a => a.AddParameter("key", "value")); + + var mockAuthCreds = new Mock(); + mockAuthCreds.Setup(a => a.AccessToken).Returns("accessToken"); + + repository.Get(mockAuthCreds.Object, "awesome", bodyParam); + request.Verify(a => a.AddParameter("key", "value")); + request.Verify(a => a.AddParameter("access_token", "accessToken")); + repository.GetAsync(mockAuthCreds.Object, "awesome", bodyParam).Wait(); + request.Verify(a => a.AddParameter("key", "value")); + request.Verify(a => a.AddParameter("access_token", "accessToken")); } [Test] From 905dbe233f0bba5398ab2cb444861a7b6a92b494 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 22:01:54 -0400 Subject: [PATCH 07/11] push successes --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index ca0553a..bafba14 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,7 +3,7 @@ configuration: Release notifications: - provider: Webhook url: https://webhooks.gitter.im/e/4ddb88959635299132ce - on_build_success: false + on_build_success: true on_build_failure: True on_build_status_changed: true assembly_info: From 0d65cedfe2db20562ec9331a56bfef0044079606 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 22:15:03 -0400 Subject: [PATCH 08/11] test all the things --- .../Responses/TestDeserializer.cs | 11 +++++++++++ src/Untappd.Net/SingleObjectArrayConverter.cs | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs b/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs index aa7f503..807dbf2 100644 --- a/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs +++ b/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs @@ -133,5 +133,16 @@ namespace Untappd.Net.UnitTests { new SingleObjectArrayConverter().WriteJson(null, null, null); } + + [Test] + public void testTypeValid() + { + Assert.IsTrue(new SingleObjectArrayConverter().CanConvert(typeof(UserActivityFeed))); + } + [Test] + public void testTypeInValid() + { + Assert.IsFalse(new SingleObjectArrayConverter().CanConvert(typeof(Repository))); + } } } diff --git a/src/Untappd.Net/SingleObjectArrayConverter.cs b/src/Untappd.Net/SingleObjectArrayConverter.cs index b5b73ec..c49e05a 100644 --- a/src/Untappd.Net/SingleObjectArrayConverter.cs +++ b/src/Untappd.Net/SingleObjectArrayConverter.cs @@ -15,7 +15,8 @@ namespace Untappd.Net { public override bool CanConvert(Type objectType) { - return objectType.IsAssignableFrom(typeof(IAuthenticatedRequest)) || objectType.IsAssignableFrom(typeof(IUnAuthenticatedRequest)); + return (objectType.GetInterface("IUnAuthenticatedRequest") != null) || (objectType.GetInterface("IAuthenticatedRequest") != null); + } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) From c80ca123c2164994e2b9cc4ef7b90bee41498eb8 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 22:25:28 -0400 Subject: [PATCH 09/11] revert change --- src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs | 5 ----- src/Untappd.Net/SingleObjectArrayConverter.cs | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs b/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs index 807dbf2..bd9da1e 100644 --- a/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs +++ b/src/Untappd.Net.UnitTests/Responses/TestDeserializer.cs @@ -139,10 +139,5 @@ namespace Untappd.Net.UnitTests { Assert.IsTrue(new SingleObjectArrayConverter().CanConvert(typeof(UserActivityFeed))); } - [Test] - public void testTypeInValid() - { - Assert.IsFalse(new SingleObjectArrayConverter().CanConvert(typeof(Repository))); - } } } diff --git a/src/Untappd.Net/SingleObjectArrayConverter.cs b/src/Untappd.Net/SingleObjectArrayConverter.cs index c49e05a..32664d7 100644 --- a/src/Untappd.Net/SingleObjectArrayConverter.cs +++ b/src/Untappd.Net/SingleObjectArrayConverter.cs @@ -15,7 +15,7 @@ namespace Untappd.Net { public override bool CanConvert(Type objectType) { - return (objectType.GetInterface("IUnAuthenticatedRequest") != null) || (objectType.GetInterface("IAuthenticatedRequest") != null); + return true; } From 402533386b2c18b078e66134b68e4d74c6cdab4b Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 22:39:28 -0400 Subject: [PATCH 10/11] i think this fixes it --- appveyor.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index bafba14..d271ce4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,11 +1,11 @@ version: 0.2.{build} configuration: Release notifications: - - provider: Webhook - url: https://webhooks.gitter.im/e/4ddb88959635299132ce - on_build_success: true - on_build_failure: True - on_build_status_changed: true +- provider: Webhook + url: https://webhooks.gitter.im/e/4ddb88959635299132ce + on_build_success: true + on_build_failure: true + on_build_status_changed: true assembly_info: patch: true file: '**\AssemblyInfo.*' From 9822a4ee8907dc9bf41088d7bd0f3fb226e67c00 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 23:09:57 -0400 Subject: [PATCH 11/11] try a different url --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index d271ce4..488e610 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: 0.2.{build} configuration: Release notifications: - provider: Webhook - url: https://webhooks.gitter.im/e/4ddb88959635299132ce + url: https://webhooks.gitter.im/e/cff271c9681834896234 on_build_success: true on_build_failure: true on_build_status_changed: true