public void ImportStrings_GoodStrings_AddsPasswords()
        {
            var sut = new sut.Database();

            Assert.Empty(sut.Passwords);

            sut.Import(new string[]
            {
                "1-3 a: abcde",
                "1-3 b: cdefg",
                "2-9 c: ccccccccc"
            });

            Assert.NotEmpty(sut.Passwords);
            Assert.Equal(3, sut.Passwords.Count);
            Assert.Contains(new Password("1-3 a: abcde"), sut.Passwords);
            Assert.Contains(new Password("1-3 b: cdefg"), sut.Passwords);
            Assert.Contains(new Password("2-9 c: ccccccccc"), sut.Passwords);

            var factory = new CharacterPositionPasswordPolicyFactory();

            Assert.DoesNotContain(new Password("1-3 a: abcde", factory), sut.Passwords);
            Assert.DoesNotContain(new Password("1-3 b: cdefg", factory), sut.Passwords);
            Assert.DoesNotContain(new Password("2-9 c: ccccccccc", factory), sut.Passwords);
        }
        public void ImportFile_GoodStrings_AddsPasswords()
        {
            var list    = new List <IPassword>();
            var reader  = new Mock <IFileReader>();
            var factory = new CharacterPositionPasswordPolicyFactory();

            reader.Setup(r => r.ReadFileByLines(It.IsAny <string>())).Returns(new string[]
            {
                "1-3 a: abcde",
                "1-3 b: cdefg",
                "2-9 c: ccccccccc"
            });

            var sut = new sut.Database(list, reader.Object, factory);

            Assert.Empty(sut.Passwords);

            sut.Import(string.Empty);

            Assert.NotEmpty(sut.Passwords);
            Assert.Equal(3, sut.Passwords.Count);
            Assert.Contains(new Password("1-3 a: abcde", factory), sut.Passwords);
            Assert.Contains(new Password("1-3 b: cdefg", factory), sut.Passwords);
            Assert.Contains(new Password("2-9 c: ccccccccc", factory), sut.Passwords);
        }
        public void PasswordMultiStringAndFactoryConstructor_GivenValidItems_SetsAppropriately()
        {
            var policyString = "5-9 b";
            var password     = "******";
            var factory      = new CharacterPositionPasswordPolicyFactory();

            var sut               = new sut.Password(policyString, password, factory);
            var policy            = new sut.CharacterPositionPasswordPolicy(policyString);
            var nonMatchingPolicy = new sut.CharacterFrequencyPasswordPolicy(policyString);

            Assert.Equal(policy, sut.PasswordPolicy);
            Assert.NotEqual(nonMatchingPolicy, sut.PasswordPolicy);
            Assert.Equal(password, sut.PasswordCandidate);
        }