From e537e1ad95fe5bda35eb7d01029cbc1269e6430f Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 21:22:13 -0400 Subject: [PATCH] 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) {