Ejemplo n.º 1
0
        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);
                }
            });
        }
Ejemplo n.º 2
0
        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);
                }
            });
        }
Ejemplo n.º 3
0
 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'.");
     }
 }
Ejemplo n.º 4
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);
                }
            });
        }
Ejemplo n.º 5
0
        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")));
        }
Ejemplo n.º 6
0
        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);
                }
            });
        }
Ejemplo n.º 7
0
        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);
                }
            });
        }
Ejemplo n.º 9
0
        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);
                }
            });
        }