using System.Collections.Generic; using Moq; using Newtonsoft.Json; using NUnit.Framework; using RestSharp; using Untappd.Net.Client; using Untappd.Net.Request; using Untappd.Net.Responses.BeerInfo; using System.Threading.Tasks; namespace Untappd.Net.UnitTests.Request { [TestFixture] public class TestRepository { [Test] public void ConfirmRequestWorks() { var mockCreds = new Mock(); mockCreds.Setup(a => a.ClientId).Returns("id"); mockCreds.Setup(a => a.ClientSecret).Returns("secret"); var bodyParam = new Dictionary {{"key", "value"}}; var client = new Mock(); var request = new Mock(); request.Setup(a => a.AddParameter(It.IsAny(), It.IsAny())); request.Setup(a => a.AddParameter(It.IsAny(), It.IsAny())); var response = new Mock(); var obj = JsonConvert.SerializeObject(new BeerInfo()); response.Setup(a => a.Content).Returns(obj); 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] public void ConfirmBasicConstructorWorks() { var constructorTest = new Repository(); 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); } } }