public void SetUpModel( )
        {
            _engine = new PasswordDerivationEngine( PasswordGenerators.Generators );
            _passwordData = new InMemoryPasswordData( );
            _passwordRepository = new PasswordRepository( _passwordData );

            var digest = _engine.Derive( new PasswordRequest( "abij", "1234".ToSecureString( ), 3, PasswordGenerators.LegacyFull ) );

            _original = new PasswordDigestDocumentBuilder
                            {
                                Digest = digest.Digest,
                                CreatedOn = new DateTime( 2011, 11, 1 ),
                                ModifiedOn = new DateTime( 2011, 11, 3 ),
                                MasterPasswordId = Guid.NewGuid( ),
                                Note = "AB IJ"
                            };

            _passwordRepository.SavePassword( _original );

            _timeProvider = new StubTimeProvider { Now = new DateTime( 2011, 11, 16 ) };

            IMasterPasswordMatcher masterPasswordMatcher = new MasterPasswordMatcher( _engine, _passwordRepository );

            _model = new PasswordEditorModel( _passwordRepository, _engine, masterPasswordMatcher, _timeProvider,
                                              new BaselinePasswordDocument( _original ) );
        }
        public void SetupPasswordCollection( )
        {
            _inMemoryPasswordData = new InMemoryPasswordData( );
            _allPasswords = new[ ] { TestPasswords.Abcd, TestPasswords.Efgh, TestPasswords.Ijkl }.ToList( );
            _inMemoryPasswordData.SavePasswords( _allPasswords );

            _passwordRepository = new PasswordRepository( _inMemoryPasswordData );
        }
        public void MergeRecognizesIdenticalMasterPasswords( )
        {
            // Set up
            Guid sourceMasterPasswordId = Guid.NewGuid( );
            var sourceAbcd = WithMasterPasswordId( TestPasswords.Abcd, sourceMasterPasswordId );
            var sourceEfgh = WithMasterPasswordId( TestPasswords.Efgh, sourceMasterPasswordId );

            var sourcePasswords = new List<PasswordDigestDocument> { sourceAbcd, sourceEfgh };

            Guid targetMasterPasswordId = Guid.NewGuid( );
            var targetAbcd = WithMasterPasswordId( TestPasswords.Abcd, targetMasterPasswordId );
            var targetIjkl = WithMasterPasswordId( TestPasswords.Ijkl, targetMasterPasswordId );

            var targetData = new InMemoryPasswordData( );
            targetData.SavePasswords( new List<PasswordDigestDocument> { targetAbcd, targetIjkl } );
            IPasswordRepository targetRepository = new PasswordRepository( targetData );

            // Exercise
            targetRepository.Merge( sourcePasswords );

            // Verify
            Assert.That( targetData.LoadPasswords( ),
                         Is.EquivalentTo( new[ ] { targetAbcd, targetIjkl, WithMasterPasswordId( sourceEfgh, targetMasterPasswordId ) } ) );
        }
        public void MergeSkipsOurLessRecentPasswordsToTarget( )
        {
            // Set up
            PasswordDigestDocument abcdUpdated = Update( TestPasswords.Abcd, new DateTime( 2011, 11, 9 ) );

            var sourcePasswords = new List<PasswordDigestDocument> { TestPasswords.Abcd, TestPasswords.Ijkl };

            var targetData = new InMemoryPasswordData( );
            targetData.SavePasswords( new List<PasswordDigestDocument> { abcdUpdated, TestPasswords.Efgh } );
            IPasswordRepository targetRepository = new PasswordRepository( targetData );

            // Exercise
            targetRepository.Merge( sourcePasswords );
            // Verify
            Assert.That( targetData.LoadPasswords( ),
                         Is.EquivalentTo( new[ ] { abcdUpdated, TestPasswords.Efgh, TestPasswords.Ijkl } ) );
        }
        public void MergeAddsOurDeletedPasswordsToTarget( )
        {
            // Set up
            var sourcePasswords = new List<PasswordDigestDocument> { TestPasswords.Abcd, TestPasswords.Ijkl };

            var targetData = new InMemoryPasswordData( );
            targetData.SavePasswords( new List<PasswordDigestDocument> { TestPasswords.Efgh } );
            IPasswordRepository targetRepository = new PasswordRepository( targetData );

            // Exercise
            targetRepository.Merge( sourcePasswords );
            // Verify
            Assert.That( targetData.LoadPasswords( ),
                         Is.EquivalentTo( new[ ] { TestPasswords.Abcd, TestPasswords.Efgh, TestPasswords.Ijkl } ) );
        }