From e537e1ad95fe5bda35eb7d01029cbc1269e6430f Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 21:22:13 -0400 Subject: [PATCH 1/4] 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 60c599c1eefe59a0f7e8a9f19fdeb9a0fda280b9 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 21:59:38 -0400 Subject: [PATCH 2/4] 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 0d65cedfe2db20562ec9331a56bfef0044079606 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 22:15:03 -0400 Subject: [PATCH 3/4] 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 4/4] 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; }