public void WhenCompletingRegistration_ThenUserUpdated()
        {
            var testUser = new User
                               {
                                   UserId = 1,
                                   DisplayName = "DisplayName",
                                   PostalCode = "12345",
                                   TwoLetterCountryCode = "US"
                               };

            userServicesMock
                .Setup(r => r.GetUserByClaimedIdentifier(It.IsAny<string>()))
                .Returns(testUser);

            var controller = new ProfileController(
                userServicesMock.Object,
                countryServicesMock.Object,
                formsAuthenticationMock.Object);

            controller.SetFakeControllerContext();
            controller.SetUserIdentity(new MileageStatsIdentity("TestName", "TestDisplayName", 1));

            ActionResult response = controller.CompleteRegistration(testUser);

            userServicesMock
                .Verify(x => x.UpdateUser(testUser), Times.Once());

            formsAuthenticationMock
                .Verify(x => x.SetAuthCookie(It.IsAny<HttpContextBase>(), It.IsAny<FormsAuthenticationTicket>()),
                        Times.Once());

            var result = (RedirectToRouteResult) response;
            Assert.Equal("Dashboard", result.RouteName);
        }
        public void WhenCompletingRegistrationWithDifferentUser_ThenThrows()
        {
            var user = new User {UserId = 2};
            var actualUser = new User {UserId = 1};

            userServicesMock.Setup(r => r.GetUserByClaimedIdentifier(It.IsAny<string>())).Returns(actualUser);

            var controller = new ProfileController(
                userServicesMock.Object,
                countryServicesMock.Object,
                formsAuthenticationMock.Object);

            controller.SetFakeControllerContext();
            controller.SetUserIdentity(new MileageStatsIdentity("TestName", "TestDisplayName", 1));

            Assert.Throws<SecurityException>(() => { controller.CompleteRegistration(user); });
        }
        public void WhenCompletingRegistrationWithInvalidUser_ThenViewReturned()
        {
            var user = new User {UserId = 1, DisplayName = new string('X', 200)};

            userServicesMock
                .Setup(r => r.GetUserByClaimedIdentifier(It.IsAny<string>()))
                .Returns(user);

            var controller = new ProfileController(
                userServicesMock.Object,
                countryServicesMock.Object,
                formsAuthenticationMock.Object);

            controller.SetFakeControllerContext();
            controller.ModelState.AddModelError("DisplayName", "Too long");

            controller.SetUserIdentity(new MileageStatsIdentity("TestName", "TestDisplayName", 1));

            ActionResult actual = controller.CompleteRegistration(user);

            Assert.IsType<ViewResult>(actual);
            var viewResult = (ViewResult) actual;
            Assert.NotNull(viewResult.ViewBag.CountryList);
            var model = (User) viewResult.Model;
            Assert.NotNull(model);
            Assert.Same(user, model);
        }