public void Given_an_valid_NewSessionRequest_is_received_when_processed_the_users_session_data_is_returned_and_a_UserSession_is_added_to_CurrentUserSessions()
        {
            //Arrange
            var sut = InitialiseSiteState();

            var meJulie = TestData.Users.MeJulie;
            var request = new SiteRequest <ISiteData>()
            {
                RequestType = RequestType.Read,
                Payload     = new UserCredentials()
                {
                    Email    = TestData.Users.MeJulie.Email,
                    Password = "******"
                }
            };

            User outUser = meJulie;

            MockUsers.Setup(m => m.TryFindUserByEmail(TestData.Users.MeJulie.Email, out outUser)).Returns(true);
            MockUsers.Setup(m => m.GetUserByEmail(meJulie.Email)).Returns(meJulie);
            SetupMockUserSessionData();

            //Act
            IResponse response;
            var       result = sut.ProcessRequest(request, out response);

            Assert.IsTrue(result);
            Assert.IsNotNull(response as UserSessionResponse);
            var responseData = (response as UserSessionResponse).UserSession;

            Assert.AreEqual(1, sut.GetUserSessions().Count);
            AssertMeJuliesSessionDataIsCorrect(responseData);
        }
        public void Given_an_invalid_NewSessionRequest_is_received_when_processed_the_correct_ErrorMessage_is_returned_is_returned_and_UserRepository_is_updated(bool isEmailMatch, bool isPasswordMatch, ErrorCode errorCode)
        {
            //Arrange
            var sut = InitialiseSiteState();

            var meJulie = TestData.Users.MeJulie;
            var request = new SiteRequest <ISiteData>()
            {
                RequestType = RequestType.Read,
                Payload     = new UserCredentials()
                {
                    Email    = meJulie.Email,
                    Password = "******" //Her password is actually "JungleIsMassive"
                }
            };

            User outUser = meJulie;

            MockUsers.Setup(m => m.TryFindUserByEmail(It.IsAny <string>(), out outUser)).Returns(isEmailMatch);

            //Act
            IResponse response;
            var       result = sut.ProcessRequest(request, out response);

            Assert.IsFalse(result);
            Assert.IsNotNull(response);
            var errorMessage = (response as IResponse).Error;

            Assert.AreEqual(errorCode, errorMessage.Code);
            Assert.IsEmpty(sut.GetUserSessions());
        }