public void Given_NewEntryWhenEntryAlreadyExists_When_InsertNewEntryAndOverwriteNotChosen_Then_Exception()
        {
            // Arrange
            const string newEntryName    = "password";
            var          newKey          = new PlainTextKey();
            var          encryptedData   = new List <byte[]>();
            var          categoryToAddTo = new Category()
            {
                Name    = "Dev",
                Entries = new List <Entry>()
                {
                    new Entry()
                    {
                        Name = newEntryName,
                    }
                }
            };
            var dat = new EnvCryptDat()
            {
                Categories = new[] { categoryToAddTo }
            };

            // Act
            Action act = () => dat.AddEntry(categoryToAddTo.Name, newEntryName, newKey, encryptedData, false);

            // Assert
            act.ShouldThrow <EnvCryptException>();
        }
        public void Given_NewEntryInExistingCategory_When_InsertNewEntry_Then_EntryInserted()
        {
            // Arrange
            var categoryToAddTo = new Category()
            {
                Name    = "ProD",
                Entries = new List <Entry>()     // Start off with no entries
            };
            var dat = new EnvCryptDat()
            {
                Categories = new[] { categoryToAddTo }
            };

            const string newEntryName  = "password";
            var          newKey        = new PlainTextKey();
            var          encryptedData = new List <byte[]>();

            // Act
            dat.AddEntry(categoryToAddTo.Name, newEntryName, newKey, encryptedData);

            // Assert
            dat.Categories.Should().HaveCount(1);
            dat.Categories[0].Should().NotBeNull();
            dat.Categories[0].Entries.Should().HaveCount(1);
            dat.Categories[0].Entries[0].Name.Should().Be(newEntryName);
            dat.Categories[0].Entries[0].EncryptedValue.Should().Equal(encryptedData);
            dat.Categories[0].Entries[0].EncryptionAlgorithm.Should().Be(EnvCryptAlgoEnum.PlainText);
        }
        public void Given_NewEntryWhenEntryAlreadyExists_When_InsertNewEntryAndOverwriteChosen_Then_ExistingEntryReplaced()
        {
            // Arrange
            const string newEntryName    = "password";
            var          newKey          = new PlainTextKey();
            var          encryptedData   = new List <byte[]>();
            var          categoryToAddTo = new Category()
            {
                Name    = "Dev",
                Entries = new List <Entry>()
                {
                    new Entry()
                    {
                        Name                = newEntryName,
                        EncryptedValue      = new List <byte[]>(),
                        EncryptionAlgorithm = EnvCryptAlgoEnum.Aes,
                        KeyHash             = 123,
                        KeyName             = "this key's details will be overwritten"
                    }
                }
            };
            var dat = new EnvCryptDat()
            {
                Categories = new List <Category>()
                {
                    categoryToAddTo
                }
            };

            // Act
            dat.AddEntry(categoryToAddTo.Name, newEntryName, newKey, encryptedData, true);

            // Assert
            dat.Categories.Should().HaveCount(1);
            dat.Categories[0].Should().NotBeNull();
            dat.Categories[0].Entries.Should().HaveCount(1);
            dat.Categories[0].Entries[0].Name.Should().Be(newEntryName);
            dat.Categories[0].Entries[0].EncryptedValue.Should().Equal(encryptedData);
            dat.Categories[0].Entries[0].EncryptionAlgorithm.Should().Be(EnvCryptAlgoEnum.PlainText);
        }