public async Task WhenSetupWithResponseData_Create_CallsUrlOnceAndReturnsCorrectResult() { var apiKey = BadgeUp.ApiKey.Create(ApiKey); var responseJson = @"{ 'id': 'cjktcmn5o635wmyd0w4ps', 'applicationId': 'g6jtshln48', 'name': 'Achievement name', 'description': 'Achievement description', 'awards': ['award-1','award-2','award-3'], 'options': { 'earnLimit': 5, 'suspended': true }, 'meta': { 'created': '2016-09-12T06:51:35.453Z', 'icon': 'https://example.com/favicon.ico' } }" .Replace("'", "\""); // setup the response action var url = $"{Host}/v2/apps/{apiKey.ApplicationId}/achievements"; var mockHttp = new MockHttpMessageHandler(); var expectedRequest = mockHttp.Expect(HttpMethod.Post, 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 AchievementClient(badgeUpHttpClient); var result = await client.Create(new Achievement() { Name = "Achievement name", Description = "Achievement description", Awards = new[] { "award-1", "award-2", "award-3" }, // TODO: Add simple EvalTree test once client.Criterion.GetAll() is completed EvalTree = null, Options = new AchievementOptions() { EarnLimit = 5, Suspended = true }, Meta = new AchievementMeta() { Icon = "https://example.com/favicon.ico" } }); Assert.Equal("Achievement name", result.Name); Assert.Equal("Achievement description", result.Description); Assert.Equal("cjktcmn5o635wmyd0w4ps", result.Id); Assert.Equal(new[] { "award-1", "award-2", "award-3" }, result.Awards); Assert.True(result.Options.Suspended); Assert.Equal(5, result.Options.EarnLimit); Assert.Equal(new DateTime(2016, 09, 12, 06, 51, 35, 453), result.Meta.Created); Assert.Equal("https://example.com/favicon.ico", result.Meta.Icon); } mockHttp.VerifyNoOutstandingExpectation(); }
public async Task WhenAchievementIsNull_CreateThrowsException() { var client = new AchievementClient(null); await Assert.ThrowsAsync <ArgumentNullException>(() => client.Create(null)); }