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

            Assert.NotNull(sut.Passwords);
            Assert.Empty(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 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 Add_BadString_ThrowsExceptionAndDoesNotAdd()
        {
            var passwordString = "asdf";
            var sut            = new sut.Database();

            Assert.Empty(sut.Passwords);

            Assert.Throws <ArgumentException>(() => { sut.Add(passwordString); });

            Assert.Empty(sut.Passwords);
        }
        public void Add_Password_AddsPassword()
        {
            var password = new Password("4-5 d: lkjlkddddoiuoiuou");
            var sut      = new sut.Database();

            Assert.Empty(sut.Passwords);

            sut.Add(password);

            Assert.Contains(password, sut.Passwords);
        }
        public void Add_GoodString_AddsPassword()
        {
            var passwordString = "4-5 d: lkjlkddddoiuoiuou";
            var password       = new Password(passwordString);
            var sut            = new sut.Database();

            Assert.Empty(sut.Passwords);

            sut.Add(passwordString);

            Assert.Contains(password, sut.Passwords);
        }
        public void Database_SpecificConstructor_ContainsProvidedList()
        {
            var passwordList = new List <IPassword>();

            passwordList.Add(new Password("1-2 a: aabuiyoiuy"));

            var sut = new sut.Database(
                passwordList,
                new FileReader(),
                new CharacterFrequencyPasswordPolicyFactory()
                );

            foreach (var password in passwordList)
            {
                Assert.Contains(password, sut.Passwords);
            }

            foreach (var password in sut.Passwords)
            {
                Assert.Contains(password, passwordList);
            }
        }
        public void ImportStrings_BadStrings_AddsNoPasswords()
        {
            var sut = new sut.Database();

            Assert.Empty(sut.Passwords);

            Assert.Throws <ArgumentException>(
                () => {
                sut.Import(
                    new string[]
                {
                    "1-3 a: abcde",
                    "1-3 b: cdefg",
                    "2-9 c: ccccccccc",
                    "asdasfgasfasdfas"
                }
                    );
            }
                );

            Assert.Empty(sut.Passwords);
        }
        public void ImportFile_BadStrings_AddsNoPasswords()
        {
            var list    = new List <IPassword>();
            var reader  = new Mock <IFileReader>();
            var factory = new CharacterFrequencyPasswordPolicyFactory();

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

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

            Assert.Empty(sut.Passwords);

            Assert.Throws <ArgumentException>(() => { sut.Import(string.Empty); });

            Assert.Empty(sut.Passwords);
        }