From e537e1ad95fe5bda35eb7d01029cbc1269e6430f Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Thu, 23 Apr 2015 21:22:13 -0400 Subject: [PATCH 1/9] 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 2/9] 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 3/9] 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 4/9] 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 5/9] 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 6/9] 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 7/9] 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 8/9] 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 9/9] 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