public async Task WhenSetupWithResponseData_GetById_CallsUrlOnceAndReturnsCorrectResult()
        {
            Assert.False(string.IsNullOrEmpty(AwardClientTests.ApiKey));

            var apiKey = BadgeUp.ApiKey.Create(ApiKey);

            var responseJson =
                @"{
				'id': 'cjktcmn5o635wmyd0w4ps',
				'applicationId': 'g6jtshln48',
				'name': '5 points',
				'description': '5 Points Awarded',
				'meta': {
					'created': '2016-09-17T06:50:11.426Z',
					'meta_key': 'meta_value'
				},
				'data': {
					'key': 'value',
					'points': 5
				}
			}"            .Replace("'", "\"");

            // setup the response action
            var url             = $"{Host}/v2/apps/{apiKey.ApplicationId}/awards/cjktcmn5o635wmyd0w4ps";
            var mockHttp        = new MockHttpMessageHandler();
            var expectedRequest = mockHttp.Expect(HttpMethod.Get, url).Respond("application/json", responseJson);

            mockHttp.Fallback.Throw(new InvalidOperationException("No matching mock handler"));

            using (var badgeUpHttpClient = new BadgeUpHttpClient(apiKey, Host))
            {
                badgeUpHttpClient.SetHttpClient(mockHttp.ToHttpClient());
                var client = new AwardClient(badgeUpHttpClient);

                // act
                var result = await client.GetById("cjktcmn5o635wmyd0w4ps");

                // assert url was called only once
                mockHttp.VerifyNoOutstandingExpectation();

                // assert result was parsed correctly
                Assert.NotNull(result);
                Assert.Equal("cjktcmn5o635wmyd0w4ps", result.Id);
                Assert.Equal("g6jtshln48", result.ApplicationId);
                Assert.Equal("value", result.Data.Value <string>("key"));
                Assert.Equal(5, result.Data.Value <int>("points"));
                Assert.Equal("5 points", result.Name);
                Assert.Equal("5 Points Awarded", result.Description);
                Assert.Equal(new DateTime(2016, 09, 17, 06, 50, 11, 426, DateTimeKind.Utc), result.Meta.Created);
            }
        }
 public async Task WhenAwardIsNull_CreateThrowsException()
 {
     var client = new AwardClient(null);
     await Assert.ThrowsAsync <ArgumentNullException>(() => client.Create(null));
 }