public void TestDictionaryGeneration()
		{
			var checkin = new CheckIn("offset", "timezone", 1);
			Assert.AreEqual(checkin.BodyParameters["gmt_offset"], "offset");
			Assert.AreEqual(checkin.BodyParameters["timezone"], "timezone");
			Assert.AreEqual(checkin.BodyParameters["bid"], 1);

			Assert.IsFalse(checkin.BodyParameters.ContainsKey("geolat"));
			checkin.Geolat = 4;
			Assert.IsTrue(checkin.BodyParameters.ContainsKey("geolat"));
			Assert.AreEqual(checkin.BodyParameters["geolat"], 4);

			Assert.IsFalse(checkin.BodyParameters.ContainsKey("geolng"));
			checkin.Geolng = 4;
			Assert.IsTrue(checkin.BodyParameters.ContainsKey("geolng"));
			Assert.AreEqual(checkin.BodyParameters["geolng"], 4);

			Assert.IsFalse(checkin.BodyParameters.ContainsKey("shout"));
			checkin.Shout = "shout";
			Assert.IsTrue(checkin.BodyParameters.ContainsKey("shout"));
			Assert.AreEqual(checkin.BodyParameters["shout"], "shout");

			Assert.IsFalse(checkin.BodyParameters.ContainsKey("rating"));
			checkin.Rating = 2;
			Assert.IsTrue(checkin.BodyParameters.ContainsKey("rating"));
			Assert.AreEqual(checkin.BodyParameters["rating"], 2);
		}
		public void TestAccessors()
		{
			Assert.Throws<ArgumentNullException>(() => { new CheckIn(string.Empty, "timezone", 1); });
			Assert.Throws<ArgumentNullException>(() => { new CheckIn("1", string.Empty, 1); });
			var checkin = new CheckIn("offset", "timezone", 1);
			Assert.IsNotNullOrEmpty(checkin.RequestMethod.ToString());
			Assert.Throws<ArgumentOutOfRangeException>(() => { checkin.Rating = -1; });
			Assert.Throws<ArgumentOutOfRangeException>(() => { checkin.Rating = 6; });
			Assert.Throws<ArgumentOutOfRangeException>(() => { checkin.Shout = new String('d', 141); });
			checkin.Rating = 3;
			Assert.AreEqual(3, checkin.Rating);
			var t = "tst";
			checkin.Shout = t;
			Assert.IsNotNullOrEmpty(checkin.EndPoint);
			Assert.AreEqual(checkin.Shout, t);
		}
		public void ConfirmRequestWorks()
		{
			var mockCreds = new Mock<IUnAuthenticatedUntappdCredentials>();
			mockCreds.Setup(a => a.AuthenticationData).Returns(new ReadOnlyDictionary<string, string>(new Dictionary<string, string>()
			{
				{"client_id", "id"},
				 {"client_secret", "secret"}
			}));
			var bodyParam = new Dictionary<string, object> { { "key", "value" } };
			var client = new Mock<IRestClient>();
			var request = new Mock<IRestRequest>();
			request.Setup(a => a.AddParameter(It.IsAny<string>(), It.IsAny<string>()));
			request.Setup(a => a.AddParameter(It.IsAny<string>(), It.IsAny<string>()));

			var response = new Mock<IRestResponse>();
			response.Setup(a => a.Content).Returns(File.ReadAllText("../../Responses/Json/BeerInfo.json"));
			client.Setup(a => a.Execute(It.IsAny<IRestRequest>())).Callback(() =>
			{
			}).Returns(response.Object);
			client.Setup(a => a.ExecuteTaskAsync(It.IsAny<IRestRequest>())).Callback(() =>
			{
			}).Returns(Task.Run(() => response.Object));
#pragma warning disable CS0618 // Type or member is obsolete Using as intended
			var repository = new Repository(client.Object, request.Object);
#pragma warning restore CS0618 // Type or member is obsolete

			repository.Get<BeerInfo>(mockCreds.Object, "awesome", bodyParam);
			request.Verify(a => a.AddParameter("client_id", mockCreds.Object.AuthenticationData["client_id"]));
			request.Verify(a => a.AddParameter("client_secret", mockCreds.Object.AuthenticationData["client_secret"]));
			request.Verify(a => a.AddParameter("key", "value"));
			repository.GetAsync<BeerInfo>(mockCreds.Object, "awesome", bodyParam).Wait();
			request.Verify(a => a.AddParameter("client_id", mockCreds.Object.AuthenticationData["client_id"]));
			request.Verify(a => a.AddParameter("client_secret", mockCreds.Object.AuthenticationData["client_secret"]));
			request.Verify(a => a.AddParameter("key", "value"));

			var mockAuthCreds = new Mock<IAuthenticatedUntappdCredentials>();
			mockAuthCreds.Setup(a => a.AuthenticationData).Returns(new ReadOnlyDictionary<string, string>(new Dictionary<string, string>()
			{
				{"access_token", "accessToken"}
			}));

			repository.Get<BeerInfo>(mockAuthCreds.Object, "awesome", bodyParam);
			request.Verify(a => a.AddParameter("key", "value"));
			request.Verify(a => a.AddParameter("access_token", "accessToken"));
			repository.GetAsync<BeerInfo>(mockAuthCreds.Object, "awesome", bodyParam).Wait();
			request.Verify(a => a.AddParameter("key", "value"));
			request.Verify(a => a.AddParameter("access_token", "accessToken"));

			mockAuthCreds.Setup(a => a.AuthenticationData).Returns(new ReadOnlyDictionary<string, string>(new Dictionary<string, string>()
			{
				{"access_token", "PostaccessToken"}
			}));
			var checkin = new CheckIn("-5", "EST", 1044097) { Shout = "Awesome Brew", Rating = 4 };
			repository.FailFast = true;
			repository.OnExceptionThrown += (sender, e) =>
				{
					Assert.IsNotNull(sender);
					Assert.IsNotNull(e);
				};
			Assert.Throws<HttpErrorException>(() => repository.Post(mockAuthCreds.Object, checkin));
			repository.FailFast = false;
			repository.Post(mockAuthCreds.Object, checkin);
			request.Verify(a => a.AddParameter("access_token", "PostaccessToken"));

			mockAuthCreds.Setup(a => a.AuthenticationData).Returns(new ReadOnlyDictionary<string, string>(new Dictionary<string, string>()
			{
				{"access_token", "PostAsyncaccessToken"}
			}));
			repository.PostAsync(mockAuthCreds.Object, checkin).Wait();
			request.Verify(a => a.AddParameter("access_token", "PostAsyncaccessToken"));
		}