public void ExecuteReturnsSuccessWhenGood(string tName, string tPassword, string tEmail)
        {
            var vHashProvider = new Mock<IHashProvider>();
            var vDocumentStore = GetEmbeddedDatabase;
            var vAccountCommandFactory = new Mock<IAccountCommandFactory>();
            var vSendConfirmationCommand = new Mock<ISendConfirmationCommand>();
            vAccountCommandFactory
                .Setup(t => t.CreateSendConfirmationCommand(It.IsAny<Account>()))
                .Returns(vSendConfirmationCommand.Object);
            vSendConfirmationCommand.Setup(t => t.Execute()).Returns(true);

            var vCreateAccount = new CreateAccount
                                     {
                                         Name = tName,
                                         Password = tPassword,
                                         Email = tEmail
                                     };
            var vRandomProvider = new Mock<IRandomProvider>();

            var vCreateAccountCommand = new CreateAccountCommand(vDocumentStore, vHashProvider.Object,
                                                                 vAccountCommandFactory.Object, vRandomProvider.Object,
                                                                 vCreateAccount);

            var vResult = vCreateAccountCommand.Execute();
            Assert.AreEqual(eAccountCreationStatus.Success, vResult);
        }
        private TestObjects Setup()
        {
            var vObjects = new TestObjects();
            vObjects.HashProvider = new Mock<IHashProvider>();
            vObjects.HashProvider.Setup(t => t.Hash(cPassword)).Returns(cHash);
            vObjects.HashProvider.Setup(t => t.CheckHash(cPassword, cHash)).Returns(true);

            vObjects.DocumentStore = GetEmbeddedDatabase;

            var vNewAccount = new CreateAccount
                                  {
                                      Name = cName,
                                      Email = cEmail,
                                      Password = cPassword
                                  };
            var vAccountCommandFactory = new Mock<IAccountCommandFactory>();
            var vSendConfirmationCommand = new Mock<ISendConfirmationCommand>();
            vAccountCommandFactory
                .Setup(t => t.CreateSendConfirmationCommand(It.IsAny<Account>()))
                .Returns(vSendConfirmationCommand.Object);


            var vNewAccountCommand = new CreateAccountCommand(
                vObjects.DocumentStore,
                vObjects.HashProvider.Object, vAccountCommandFactory.Object, new CryptoRandomProvider(),
                vNewAccount);
            vNewAccountCommand.Execute();

            var vLogin = new LoginAccount
                             {
                                 Name = cName,
                                 Password = cPassword
                             };
            vObjects.GoodLoginAccountCommand = new LoginAccountCommand(
                vObjects.DocumentStore,
                vObjects.HashProvider.Object,
                vLogin);
            return vObjects;
        }
        public void ExecuteUsesHashProviderForHashWithSalt(string tName, string tPassword, string tEmail)
        {
            var vHashProvider = new Mock<IHashProvider>();
            var vDocumentStore = GetEmbeddedDatabase;
            var vAccountCommandFactory = new Mock<IAccountCommandFactory>();
            var vSendConfirmationCommand = new Mock<ISendConfirmationCommand>();
            vAccountCommandFactory
                .Setup(t => t.CreateSendConfirmationCommand(It.IsAny<Account>()))
                .Returns(vSendConfirmationCommand.Object);

            var vCreateAccount = new CreateAccount
                                     {
                                         Name = tName,
                                         Password = tPassword,
                                         Email = tEmail
                                     };
            var vRandomProvider = new Mock<IRandomProvider>();

            var vCreateAccountCommand = new CreateAccountCommand(vDocumentStore, vHashProvider.Object,
                                                                 vAccountCommandFactory.Object, vRandomProvider.Object,
                                                                 vCreateAccount);

            vCreateAccountCommand.Execute();
            vHashProvider.Verify(t => t.Hash(tPassword));
        }
        public void NewAccountIsAdminWhenMatchesConfigForAdmin(string tName, string tPassword, string tEmail)
        {
            var vHashProvider = new Mock<IHashProvider>();
            var vDocumentStore = GetEmbeddedDatabase;
            var vAccountCommandFactory = new Mock<IAccountCommandFactory>();
            var vSendConfirmationCommand = new Mock<ISendConfirmationCommand>();
            vAccountCommandFactory
                .Setup(t => t.CreateSendConfirmationCommand(It.IsAny<Account>()))
                .Returns(vSendConfirmationCommand.Object);

            var vCreateAccount = new CreateAccount
                                     {
                                         Name = tName,
                                         Password = tPassword,
                                         Email = tEmail
                                     };
            var vRandomProvider = new Mock<IRandomProvider>();

            var vCreateAccountCommand = new CreateAccountCommand(vDocumentStore, vHashProvider.Object,
                                                                 vAccountCommandFactory.Object, vRandomProvider.Object,
                                                                 vCreateAccount);
            vCreateAccountCommand.Execute();

            using (var vSession = vDocumentStore.OpenSession())
            {
                var vAccount = vSession.Load<Account>("Accounts/"+tName);

                Assert.IsTrue(vAccount.Roles.Any(t => t == eRoles.Admin));
            }
        }