//[AuthorizeOwnerIntId(typeof(WorkoutOfmRepository))]
        public async Task <IActionResult> GetById(int id, WorkoutOfmResourceParameters workoutOfmResourceParameters)
        {
            var stringGuid = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;

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

            var ofmForGetQueryResult = await _asyncOfmRepository.GetById(id, workoutOfmResourceParameters, ownerGuid);

            if (!_controllerGuardClause.ValidateGetById(ofmForGetQueryResult, id, out ObjectResult objectResult))
            {
                return(objectResult);
            }
            var expandable       = ofmForGetQueryResult.ReturnedTOfmForGet.ToExpandableOfm();
            var shapedExpandable = expandable.Shape(workoutOfmResourceParameters.Fields);

            if (_incomingHeaders.IncludeHateoas)
            {
                shapedExpandable.Add("links", _hateoasLinkFactory.CreateLinksForOfmForGet(id, workoutOfmResourceParameters.Fields).ToList());
            }
            return(Ok(shapedExpandable));
        }
Example #2
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 async Task NotReturnSingleOfmGetById_WhenQueriedEntityFieldsAreErroneous()
        {
            // Arrange
            var asyncDataCrudMock = new Mock <IAsyncCrud <Workout, int, WorkoutResourceParameters> >();

            asyncDataCrudMock
            .Setup(s => s.GetById(It.IsAny <int>())).Returns(Task.FromResult(new Workout()
            {
                Id = 1
            }));

            var workoutOfmRepository = new WorkoutOfmRepository(asyncDataCrudMock.Object, new PropertyMappingService(), new TypeHelperService());

            // Act
            var workoutOfmResourceParameters = new WorkoutOfmResourceParameters()
            {
                Fields = "ThisFieldDoesntExistOnWorkout"
            };

            var workoutOfmResult = await workoutOfmRepository.GetById(1, workoutOfmResourceParameters, _ownerGuid);

            // Assert
            var actualOfmResult = JsonConvert.SerializeObject(workoutOfmResult,
                                                              new JsonSerializerSettings()
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore, Formatting = Formatting.Indented
            });

            var expectedOfmResult = JsonConvert.SerializeObject(
                new OfmForGetQueryResult <WorkoutOfmForGet>()
            {
                ReturnedTOfmForGet = null,
                ErrorMessages      = new List <string>()
                {
                    "A property named 'ThisFieldDoesntExistOnWorkout' does not exist"
                }
            },
                new JsonSerializerSettings()
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore, Formatting = Formatting.Indented
            });

            Assert.AreEqual(expectedOfmResult, actualOfmResult);
        }
        public async Task <OfmForGetQueryResult <WorkoutOfmForGet> > GetById(int id, WorkoutOfmResourceParameters resourceParameters, Guid ownerGuid)
        {
            var ofmForGetResult = new OfmForGetQueryResult <WorkoutOfmForGet>();

            ofmForGetResult = await AsyncGetOfmGuardClause.ValidateGetById(ofmForGetResult, resourceParameters.Fields); // Todo: Validate additional *Include* query parameters

            if (ofmForGetResult.ErrorMessages.Count > 0)
            {
                return(ofmForGetResult);
            }

            var workoutLinqToEntity = Repo.LinqToEntityQueryable();

            workoutLinqToEntity = workoutLinqToEntity
                                  .Include(i => i.MapExerciseWorkout)
                                  .Include(i => i.WorkoutHistories);

            if (resourceParameters.IncludeMapsExerciseWorkout.ToBool())
            {
                workoutLinqToEntity =
                    workoutLinqToEntity
                    .Include(i => i.MapExerciseWorkout)
                    .ThenInclude(i => i.Exercise);
            }

            var workout = workoutLinqToEntity.FirstOrDefault(f => f.Id == id && f.OwnerGuid == ownerGuid);

            if (workout == null)
            {
                return(ofmForGetResult);
            }

            ofmForGetResult.ReturnedTOfmForGet = Mapper.Map <Workout, WorkoutOfmForGet>(workout);

            if (resourceParameters.IncludeMapsExerciseWorkout.ToBool() && workout.MapExerciseWorkout.Count() > 0)
            {
                ofmForGetResult.ReturnedTOfmForGet.MapsExerciseWorkout = Mapper.Map <List <MapExerciseWorkoutOfmForGet> >(workout.MapExerciseWorkout.ToList());
            }

            return(ofmForGetResult);
        }
Example #5
0
        public async Task <IActionResult> AssociatedExercises(int workoutId)
        {
            var workoutResourceParameters = new WorkoutOfmResourceParameters()
            {
                IncludeMapsExerciseWorkout = "1"
            };
            var queryResult = await _workoutViewModelRepository.GetById(workoutId, workoutResourceParameters);

            if (queryResult.HttpStatusCode == HttpStatusCode.Unauthorized ||
                queryResult.HttpStatusCode == HttpStatusCode.Forbidden)
            {
                return(RedirectToAction("AccessDenied", "Authorization"));
            }

            WorkoutViewModel workoutViewModel = null;

            if ((int)queryResult.HttpStatusCode == 200)
            {
                workoutViewModel = queryResult.ViewModel;
            }

            return(View(workoutViewModel));
        }