Exemplo n.º 1
0
        public IActionResult SearchWalk(string email)
        {
            var walker = _userRepository.GetBy(email);

            if (walker == null)
            {
                return(NotFound("The user you were looking for doesn't exist."));
            }

            var registration = _registrationRepository.GetLast(email);

            if (registration == null)
            {
                return(NotFound("The user you were looking for has no registrations."));
            }

            switch (registration.Privacy)
            {
            case Privacy.PRIVATE:
                return(NotFound());    // don't return walk

            case Privacy.FRIENDS when !User.Identity.IsAuthenticated:
                return(Unauthorized("You have not been authorized to track this user."));

            case Privacy.FRIENDS:
            {
                string mailAdress = User.Identity.Name;
                if (mailAdress == null)
                {
                    return(BadRequest());
                }

                var user = _userRepository.GetBy(mailAdress);
                if (user == null)
                {
                    return(BadRequest());
                }

                if (!walker.IsFriend(user.Email))
                {
                    return(BadRequest());        // don't return walk
                }
                break;
            }
            }

            var walk = _walkRepository.GetByUserAndRoute(walker.Id, registration.RouteId);

            if (walk == null)
            {
                return(NotFound("No walk found for the user you are trying to track."));
            }

            return(Ok(walk));
        }
        public void SearchWalk_UserExistsAndHasWalk_ReturnsWalk()
        {
            // Arrange
            var walker           = DummyData.UserFaker.Generate();
            var lastRegistration = walker.Registrations.Last();
            var route            = DummyData.RouteFaker.Generate();

            route.Id = lastRegistration.RouteId;
            var walk = new Walk(DateTime.Now, route);

            _userRepository.GetBy(walker.Email).Returns(walker);
            _registrationRepository.GetLast(walker.Email).Returns(lastRegistration);
            _walkRepository.GetByUserAndRoute(walker.Id, lastRegistration.RouteId).Returns(walk);

            // Act
            var result = _sut.SearchWalk(walker.Email);

            // Assert
            result.Should().BeOfType <OkObjectResult>()
            .Which.Value.Should().BeEquivalentTo(walk);
        }