Beispiel #1
0
        public async Task ReturnCorrectQueryParameterString()
        {
            await Task.Run(() =>
            {
                var CategoryOfmCollectionResourceParameters = new CategoryOfmCollectionResourceParameters()
                {
                    SearchQuery = "Chest",
                    OrderBy     = "",
                    Ids         = "1-5,8,10-12",
                    PageNumber  = 2,
                    PageSize    = 10,
                    Fields      = "Id, Name"
                };

                var queryParameterString = CategoryOfmCollectionResourceParameters.ToQueryParameterString();

                // Assert
                var actualQueryParameterString = queryParameterString;
                var expectedOfmQueryResult     =
                    "?SearchQuery=Chest&Ids=1-5,8,10-12&PageNumber=2&PageSize=10&Fields=Id, Name";


                Assert.AreEqual(actualQueryParameterString, expectedOfmQueryResult);
            });
        }
Beispiel #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);
                }
            });
        }
        public async Task <IActionResult> GetCollection(CategoryOfmCollectionResourceParameters collectionResourceParameters)
        {
            var stringGuid = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;

            if (String.IsNullOrWhiteSpace(stringGuid))
            {
                return(Unauthorized());
            }
            var ownerGuid = new Guid(stringGuid);

            var ofmForGetCollectionQueryResult = await _asyncOfmRepository.GetCollection(collectionResourceParameters, ownerGuid);

            if (!_controllerGuardClause.ValidateGetCollection(ofmForGetCollectionQueryResult, out ObjectResult objectResult))
            {
                return(objectResult);
            }
            var expandableOfmForGetCollection = ofmForGetCollectionQueryResult.ReturnedTOfmForGetCollection.OfmForGets.ToExpandableOfmForGets();

            if (_incomingHeaders.IncludeHateoas)
            {
                expandableOfmForGetCollection = expandableOfmForGetCollection.CreateHateoasForExpandableOfmForGets <CategoryOfmForGet, int>(_urlHelper, nameof(CategoryApiController), collectionResourceParameters.Fields).ToList();                                 // Todo Improve! The data is only superficially shaped AFTER a full query was run against the database
            }
            expandableOfmForGetCollection = expandableOfmForGetCollection.Shape(collectionResourceParameters.Fields, _incomingHeaders.IncludeHateoas).ToList();

            this.AddPaginationMetadata <int, CategoryOfmForGet>(ofmForGetCollectionQueryResult,
                                                                _incomingHeaders, collectionResourceParameters.AsDictionary().RemoveNullValues(), _urlHelper, nameof(CategoryApiController));

            if (!_incomingHeaders.IncludeHateoas)
            {
                return(Ok(expandableOfmForGetCollection));
            }

            dynamic result = new
            {
                value = expandableOfmForGetCollection,
                links = _hateoasLinkFactory.CreateLinksForOfmGetGeneric(collectionResourceParameters.AsDictionary().RemoveNullValues(),
                                                                        ofmForGetCollectionQueryResult.HasPrevious, ofmForGetCollectionQueryResult.HasNext).ToList()
            };

            return(Ok(result));
        }