public async Task ReturnSuccessfulOfmQueryResult_UsingPatch() { await Task.Run(async() => { // Arrange using (var testAppConfiguration = new AppConfigurationMock(File.ReadAllText(Path.GetDirectoryName(typeof(Startup).GetTypeInfo().Assembly.Location) + "\\appsettings.json"))) { // ARRANGE var httpContextAccessorMock = new Mock <IHttpContextAccessor>(); var httpRequestHandlerMock = new Mock <IHttpRequestExecuter>(); var genericAsyncGppdOfm = new CategoryApiModelRepository( testAppConfiguration.Instance, httpContextAccessorMock.Object, httpRequestHandlerMock.Object); var returnedCategoryOfmForGet = new CategoryOfmForGet() { Id = 1, Name = "UpdatedCategoryName" }; var patchDocument = new JsonPatchDocument() { Operations = { new Operation <CategoryOfmForPatch>("replace", "/Name", null, "UpdatedCategoryName") } }; var uri = new Uri(testAppConfiguration.Instance.GetValue <string>("FittifyApiBaseUrl") + "api/categories/1"); var httpResponse = new HttpResponseMessage(); httpResponse.Content = new StringContent(JsonConvert.SerializeObject(returnedCategoryOfmForGet)); httpResponse.StatusCode = HttpStatusCode.OK; httpRequestHandlerMock.Setup(s => s.Patch(uri, patchDocument, testAppConfiguration.Instance, httpContextAccessorMock.Object)).ReturnsAsync(httpResponse); // ACT var ofmQueryResult = await genericAsyncGppdOfm.Patch(1, patchDocument); // Assert var actualOfmQueryResult = JsonConvert.SerializeObject(ofmQueryResult, new JsonSerializerSettings() { Formatting = Newtonsoft.Json.Formatting.Indented }).MinifyJson().PrettifyJson(); var expectedOfmQueryResult = @" { ""OfmForGet"": { ""Id"": 1, ""Name"": ""UpdatedCategoryName"" }, ""HttpStatusCode"": 200, ""HttpResponseHeaders"": [], ""ErrorMessagesPresented"": null } ".MinifyJson().PrettifyJson(); Assert.AreEqual(actualOfmQueryResult, expectedOfmQueryResult); } }); }
public async Task ReturnOfmQueryResultWithErrorMessasges_UsingGetCollection() { await Task.Run(async() => { // Arrange using (var testAppConfiguration = new AppConfigurationMock(File.ReadAllText(Path.GetDirectoryName(typeof(Startup).GetTypeInfo().Assembly.Location) + "\\appsettings.json"))) { // ARRANGE var httpContextAccessorMock = new Mock <IHttpContextAccessor>(); var httpRequestHandlerMock = new Mock <IHttpRequestExecuter>(); var genericAsyncGppdOfm = new CategoryApiModelRepository( testAppConfiguration.Instance, httpContextAccessorMock.Object, httpRequestHandlerMock.Object); var returnedOfmCollectionQueryResult = new Dictionary <string, object>() { { "categories", new List <string>() { "Some error message", "Some other error message" } } }; var resourceParameters = new CategoryOfmCollectionResourceParameters(); var uri = new Uri(testAppConfiguration.Instance.GetValue <string>("FittifyApiBaseUrl") + "api/categories" + resourceParameters.ToQueryParameterString()); var httpResponse = new HttpResponseMessage(); httpResponse.Content = new StringContent(JsonConvert.SerializeObject(returnedOfmCollectionQueryResult)); httpResponse.StatusCode = HttpStatusCode.BadRequest; httpRequestHandlerMock.Setup(s => s.GetCollection(uri, testAppConfiguration.Instance, httpContextAccessorMock.Object)).ReturnsAsync(httpResponse); // ACT var ofmQueryResult = await genericAsyncGppdOfm.GetCollection(resourceParameters); // Assert var actualOfmQueryResult = JsonConvert.SerializeObject(ofmQueryResult, new JsonSerializerSettings() { Formatting = Newtonsoft.Json.Formatting.Indented }).MinifyJson().PrettifyJson(); var expectedOfmQueryResult = @" { ""OfmForGetCollection"": null, ""HttpStatusCode"": 400, ""HttpResponseHeaders"": [], ""ErrorMessagesPresented"": { ""categories"": [ ""Some error message"", ""Some other error message"" ] } } ".MinifyJson().PrettifyJson(); Assert.AreEqual(actualOfmQueryResult, expectedOfmQueryResult); } }); }
public void ThrowArgumentException_WhenApiVersionHasInvalidValueInAppSettings(string appsettingString) { using (var testAppConfiguration = new AppConfigurationMock(appsettingString)) { var configuration = testAppConfiguration.Instance; Assert.Throws <ArgumentException>(() => new IncomingRawHeaders(testAppConfiguration.Instance), "The value for 'LatestApiVersion' is incorrectly set in the appsettings or it is missing. It must exist and take an integer value greather than '0'."); } }
public async Task ReturnSuccessfulOfmQueryResult_UsingGetSingleWithResourceParameters() { await Task.Run(async() => { using (var testAppConfiguration = new AppConfigurationMock(File.ReadAllText(Path.GetDirectoryName(typeof(Startup).GetTypeInfo().Assembly.Location) + "\\appsettings.json"))) { // ARRANGE var httpContextAccessorMock = new Mock <IHttpContextAccessor>(); var httpRequestHandlerMock = new Mock <IHttpRequestExecuter>(); var workoutApiModelRepository = new WorkoutApiModelRepository( testAppConfiguration.Instance, httpContextAccessorMock.Object, httpRequestHandlerMock.Object); var returnedWorkoutOfmForGet = new WorkoutOfmForGet() { Id = 1, Name = "MockWorkoutName" }; var uri = new Uri(testAppConfiguration.Instance.GetValue <string>("FittifyApiBaseUrl") + "api/workouts/1?IncludeMapsExerciseWorkout=1"); var httpResponse = new HttpResponseMessage(); var resourceParameters = new WorkoutOfmResourceParameters() { IncludeMapsExerciseWorkout = "1" }; httpResponse.Content = new StringContent(JsonConvert.SerializeObject(returnedWorkoutOfmForGet)); httpResponse.StatusCode = HttpStatusCode.OK; httpRequestHandlerMock.Setup(s => s.GetSingle(uri, testAppConfiguration.Instance, httpContextAccessorMock.Object)).ReturnsAsync(httpResponse); // ACT var ofmQueryResult = await workoutApiModelRepository.GetSingle(1, resourceParameters); // Assert var actualOfmQueryResult = JsonConvert.SerializeObject(ofmQueryResult, new JsonSerializerSettings() { Formatting = Newtonsoft.Json.Formatting.Indented }).MinifyJson().PrettifyJson(); var expectedOfmQueryResult = @" { ""OfmForGet"": { ""Id"": 1, ""RangeOfExerciseIds"": null, ""MapsExerciseWorkout"": null, ""RangeOfWorkoutHistoryIds"": null, ""Name"": ""MockWorkoutName"" }, ""HttpStatusCode"": 200, ""HttpResponseHeaders"": [], ""ErrorMessagesPresented"": null } ".MinifyJson().PrettifyJson(); Assert.AreEqual(actualOfmQueryResult, expectedOfmQueryResult); } }); }
public TestServer GetApiTestServerInstance() { var appConfiguration = new AppConfigurationMock(@"{ ""LatestApiVersion"" : 1 }"); var latestSupportedApiVersion = appConfiguration.Instance.GetValue <int>("LatestApiVersion"); return(new TestServer(new WebHostBuilder() .UseStartup <ApiTestServerStartup>() .UseConfiguration(appConfiguration.Instance) .UseEnvironment("TestInMemoryDb"))); }
public async Task ShouldReturnBadRequestResult_ForInvalidApiVersionAndIncludeHateoas_AsXml(string invalidApiVersion) { await Task.Run(async() => { using (var testAppConfiguration = new AppConfigurationMock(@"{ ""LatestApiVersion"": 1 }")) { // ARRANGE var headerValidationInstance = new HeaderValidation(null, testAppConfiguration.Instance); var httpContextMock = new DefaultHttpContext(); httpContextMock.Request.Headers.Add("Content-Type", "application/xml"); httpContextMock.Request.Headers.Add("ApiVersion", invalidApiVersion); httpContextMock.Request.Headers.Add("IncludeHateoas", invalidApiVersion); // The Response.Body stream in DefaultHttpContext is Stream.Null, which is a stream that ignores all reads/writes. // We need to set the Stream ourself. httpContextMock.Response.Body = new MemoryStream(); // ACT await headerValidationInstance.Invoke(httpContextMock); // ASSERT // After having written to the stream, we have to set the pointer to the beginning of the stream, or the stream is null httpContextMock.Response.Body.Seek(0, SeekOrigin.Begin); // Only now the stream can be read! var reader = new StreamReader(httpContextMock.Response.Body); string responseBody = reader.ReadToEnd(); var actualResponse = responseBody.MinifyXml().PrettifyXml(); var expectedResponse = @" <headers> <value>The header 'IncludeHateoas' can only take a value of '0' (false) or '1' (true)!</value> <value>The header 'api-version' can only take an integer value of greater than or equal to '1'. The latest supported version is 1</value> </headers> ".MinifyXml().PrettifyXml(); Assert.AreEqual(actualResponse, expectedResponse); Assert.AreEqual(httpContextMock.Response.StatusCode, 400); } }); }
public async Task ReturnCategories_ForAuthenticatedUser_WhenGettingCollectionccc() { var appConfiguration = new AppConfigurationMock(@"{ ""LatestApiVersion"" : 1 }"); var latestSupportedApiVersion = appConfiguration.Instance.GetValue <int>("LatestApiVersion"); using (var server = new TestServer(new WebHostBuilder() .UseStartup <ApiTestServerStartup>() .UseConfiguration(appConfiguration.Instance) .UseEnvironment("TestInMemoryDb"))) { var client = server.CreateClient(); client.DefaultRequestHeaders.Add("X-Integration-Testing-Authentication", "InjectClaimsViaHeaders"); client.DefaultRequestHeaders.Add("sub", "d860efca-22d9-47fd-8249-791ba61b07c7"); var result = await client.GetAsync("/api/categories"); var responseString = await result.Content.ReadAsStringAsync(); var actualObjectResult = responseString.MinifyJson().PrettifyJson(); var expectedObjectResult = @" [ { ""id"": 1, ""name"": ""ChestSeed"" }, { ""id"": 2, ""name"": ""BackSeed"" }, { ""id"": 3, ""name"": ""LegsSeed"" } ] ".MinifyJson().PrettifyJson(); Assert.AreEqual(actualObjectResult, expectedObjectResult); } }
public async Task ReturnOfmQueryResultWithErrorMessages_UsingPostWithIncludeExerciseHistoresOverload() { await Task.Run(async() => { // Arrange using (var testAppConfiguration = new AppConfigurationMock(File.ReadAllText(Path.GetDirectoryName(typeof(Startup).GetTypeInfo().Assembly.Location) + "\\appsettings.json"))) { // ARRANGE var httpContextAccessorMock = new Mock <IHttpContextAccessor>(); var httpRequestExecuter = new Mock <IHttpRequestExecuter>(); var workoutHistoryOfmRepository = new WorkoutHistoryApiModelRepository( testAppConfiguration.Instance, httpContextAccessorMock.Object, httpRequestExecuter.Object); var workoutHistoryOfmForPost = new WorkoutHistoryOfmForPost() { WorkoutId = 4 }; var queryResult = new Dictionary <string, object>() { { "workouthistory", new List <string>() { "Some error message", "Some other error message" } } }; var uri = new Uri(testAppConfiguration.Instance.GetValue <string>("FittifyApiBaseUrl") + "api/workouthistories?includeExerciseHistories=1"); var httpResponse = new HttpResponseMessage(); httpResponse.Content = new StringContent(JsonConvert.SerializeObject(queryResult)); httpResponse.StatusCode = HttpStatusCode.BadRequest; httpRequestExecuter.Setup(s => s.Post(uri, workoutHistoryOfmForPost, testAppConfiguration.Instance, httpContextAccessorMock.Object)).ReturnsAsync(httpResponse); // ACT var ofmQueryResult = await workoutHistoryOfmRepository.Post(workoutHistoryOfmForPost, includeExerciseHistories: true); // Assert var actualOfmQueryResult = JsonConvert.SerializeObject(ofmQueryResult, new JsonSerializerSettings() { Formatting = Newtonsoft.Json.Formatting.Indented }).MinifyJson().PrettifyJson(); var expectedOfmQueryResult = @" { ""OfmForGet"": null, ""HttpStatusCode"": 400, ""HttpResponseHeaders"": [], ""ErrorMessagesPresented"": { ""workouthistory"": [ ""Some error message"", ""Some other error message"" ] } } ".MinifyJson().PrettifyJson(); Assert.AreEqual(actualOfmQueryResult, expectedOfmQueryResult); } }); }
public async Task ReturnOfmQueryResultWithErrorMessages_UsingGetById() { await Task.Run(async() => { using (var testAppConfiguration = new AppConfigurationMock(File.ReadAllText( Path.GetDirectoryName(typeof(Startup).GetTypeInfo().Assembly.Location) + "\\appsettings.json"))) { // ARRANGE var categoryApiModelRepository = new Mock <IApiModelRepository <int, CategoryOfmForGet, CategoryOfmForPost, CategoryOfmCollectionResourceParameters> >(); var returnedOfmQueryResult = new OfmQueryResult <CategoryOfmForGet>() { OfmForGet = null, ErrorMessagesPresented = new Dictionary <string, object>() { { "category", new List <string>() { "Some error message", "Some other error message" } } }, HttpStatusCode = HttpStatusCode.BadRequest }; categoryApiModelRepository.Setup(s => s.GetSingle(1)).ReturnsAsync(returnedOfmQueryResult); var categoryViewModelRepository = new CategoryViewModelRepository(categoryApiModelRepository.Object); // ACT var ofmQueryResult = await categoryViewModelRepository.GetById(1); // Assert var actualOfmQueryResult = JsonConvert.SerializeObject(ofmQueryResult, new JsonSerializerSettings() { Formatting = Newtonsoft.Json.Formatting.Indented }) .MinifyJson() .PrettifyJson(); var expectedOfmQueryResult = @" { ""ViewModel"": null, ""HttpStatusCode"": 400, ""HttpResponseHeaders"": null, ""ErrorMessagesPresented"": { ""category"": [ ""Some error message"", ""Some other error message"" ] } } ".MinifyJson().PrettifyJson(); Assert.AreEqual(actualOfmQueryResult, expectedOfmQueryResult); } }); }