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

            ErrorMessage error;

            MockUserPersister.Setup(m => m.TryPersist(ref It.Ref <User> .IsAny, out error)).Callback(new CallbackUser((ref User user, out ErrorMessage errorCallback) =>
            {
                user.UserId   = 0;
                errorCallback = null;
            })).Returns(true);

            var request = new SiteRequest <ISiteData>()
            {
                RequestType = RequestType.Create,
                Payload     = TestData.NewUsers.ValidNewUser
            };

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

            Assert.IsTrue(result);
            Assert.IsInstanceOf <RegistrationResponse>(response);
            var registrationResponse = response as RegistrationResponse;

            Assert.IsNotNull(registrationResponse);

            Assert.AreEqual(ResponseResult.Success, registrationResponse?.Result);
            Assert.AreEqual(nameof(NewUser), registrationResponse.DataType);

            var dataResponse = registrationResponse.RegistrationForm;

            Assert.IsNotNull(dataResponse);
            Assert.IsInstanceOf <NewUser>(dataResponse);

            Assert.IsNull(dataResponse.Password);
            Assert.AreEqual(TestData.NewUsers.ValidNewUser, dataResponse);

            MockUsers.Verify(m => m.Add(It.IsAny <User>()), Times.Once);
        }
        public void Given_an_invalid_RegistrationRequest_is_received_when_processed_the_correct_error_is_returned_and_UserRepository_is_not_updated(NewUser newUser, ErrorCode errorCode)
        {
            //Arrange
            var sut = InitialiseSiteState();

            //Act
            var request = new SiteRequest <ISiteData>()
            {
                RequestType = RequestType.Create,
                Payload     = newUser
            };

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

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

            Assert.AreEqual(errorCode, errorMessage.Code);
            MockUsers.Verify(m => m.Add(It.IsAny <User>()), Times.Never);
        }