public async Task SetLocationAsync_ReturnsBadRequestWithStringObject_WhenExceptionIsRaised()
        {
            // Arrange
            var mockUserManager = SharedFunctions.InitialiseMockUserManager();

            mockUserManager.Setup(repo => repo.FindByNameAsync(It.IsAny <string>()))
            .ThrowsAsync(new InvalidOperationException());

            var controller = new ManageController(_mapper, _emailSender.Object, _urlService.Object, _logger.Object, mockUserManager.Object);

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = new DefaultHttpContext()
                {
                    User = SharedFunctions.GetTestClaimsPrincipal("example name")
                }
            };

            var model = new SetLocationViewModel()
            {
                DefaultLocationLatitude = 2F, DefaultLocationLongitude = 2F
            };

            // Act
            var result = await controller.SetLocationAsync(model);

            // Assert
            Assert.IsType <BadRequestObjectResult>(result);
            var objectResult = result as ObjectResult;

            Assert.Equal("There was an error updating the user", objectResult.Value);
        }
Exemplo n.º 2
0
        public async Task <IActionResult> SetLocationAsync(SetLocationViewModel model)
        {
            try
            {
                var user = await _userManager.FindByNameAsync(User.Identity.Name);

                if (user == null)
                {
                    _logger.LogError(LoggingEvents.GetItemNotFound, "SetLocationAsync");
                    return(NotFound("User not found"));
                }

                var coordinates = string.Concat(user.DefaultLocationLatitude, ",", user.DefaultLocationLongitude);

                if (string.Concat(model.DefaultLocationLatitude, ",", model.DefaultLocationLongitude) != coordinates)
                {
                    user.DefaultLocationLatitude  = model.DefaultLocationLatitude;
                    user.DefaultLocationLongitude = model.DefaultLocationLongitude;

                    var setCoordinates = await _userManager.UpdateAsync(user);

                    if (!setCoordinates.Succeeded)
                    {
                        throw new ApplicationException($"Unexpected error occurred setting the location for user with ID '{user.Id}'.");
                    }
                }

                return(Ok(model));
            }
            catch (Exception ex)
            {
                _logger.LogError(LoggingEvents.UpdateItemNotFound, ex, "SetLocation");
                return(BadRequest("There was an error updating the user"));
            }
        }
        public async Task SetLocationAsync_ReturnsNotFound_WithUserManagerReturnsNull()
        {
            // Arrange
            var mockUserManager = SharedFunctions.InitialiseMockUserManager();

            mockUserManager.Setup(repo => repo.FindByNameAsync(It.IsAny <string>()))
            .Returns(Task.FromResult <ApplicationUser>(null));

            var controller = new ManageController(_mapper, _emailSender.Object, _urlService.Object, _logger.Object, mockUserManager.Object);

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = new DefaultHttpContext()
                {
                    User = SharedFunctions.GetTestClaimsPrincipal("example name")
                }
            };

            var model = new SetLocationViewModel()
            {
                DefaultLocationLatitude = 2F, DefaultLocationLongitude = 2F
            };

            // Act
            var result = await controller.SetLocationAsync(model);

            // Assert
            var objectResult = Assert.IsType <NotFoundObjectResult>(result);

            Assert.IsType <String>(objectResult.Value);
            Assert.Equal("User not found", objectResult.Value);
        }
        public SelectLocation()
        {
            vm             = new SetLocationViewModel();
            BindingContext = vm;
            InitializeComponent();

            NavigationPage.SetHasBackButton(this, false);
            NavigationPage.SetHasNavigationBar(this, false);
        }
        public async Task SetLocationAsync_ReturnsOK_WhenSuccessful()
        {
            // Arrange
            var mockUserManager = SharedFunctions.InitialiseMockUserManager();

            mockUserManager.Setup(repo => repo.FindByNameAsync(It.IsAny <string>()))
            .ReturnsAsync(GetValidTestUser());
            mockUserManager.Setup(repo => repo.UpdateAsync(It.IsAny <ApplicationUser>()))
            .Returns(Task.FromResult(IdentityResult.Success));

            var controller = new ManageController(_mapper, _emailSender.Object, _urlService.Object, _logger.Object, mockUserManager.Object);

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = new DefaultHttpContext()
                {
                    User = SharedFunctions.GetTestClaimsPrincipal("example name")
                }
            };

            var model = new SetLocationViewModel()
            {
                DefaultLocationLatitude = 2F, DefaultLocationLongitude = 2F
            };

            // Act
            var result = await controller.SetLocationAsync(model);

            // Assert
            var objectResult = Assert.IsType <OkObjectResult>(result);

            Assert.NotNull(objectResult);
            Assert.True(objectResult is OkObjectResult);
            Assert.Equal(StatusCodes.Status200OK, objectResult.StatusCode);
            var returnObject = Assert.IsType <SetLocationViewModel>(objectResult.Value);

            Assert.Equal(model, returnObject);
        }