public void Given_TwoDifferentEncAlgos_When_NotRequestedToBeEncrypted_Then_ExceptionNotThrown()
        {
            // Arrange
            Mock <IDatLoader <DatFromFileLoaderOptions> > datLoaderMock;

            var plainTextEntryWorkflowBuilderMock = new Mock <IDecryptPlainTextEntryWorkflowBuilder>(MockBehavior.Strict);
            var rsaEntryWorkflowBuilderMock       = new Mock <IDecryptRsaEntryWorkflowBuilder>(MockBehavior.Strict);

            var aesEntryWorkflowBuilderMock = new Mock <IDecryptAesEntryWorkflowBuilder>(MockBehavior.Strict);

            aesEntryWorkflowBuilderMock.Setup(
                b => b.WithDatLoader(It.IsAny <IDatLoader <DatFromFileLoaderOptions> >()))
            .Returns(aesEntryWorkflowBuilderMock.Object);
            aesEntryWorkflowBuilderMock.Setup(
                b => b.Run(It.IsAny <DecryptEntryWorkflowOptions>()))
            .Returns(new List <EntriesDecrypterResult <AesKey> >());

            var options = TwoDifferentAlgosExceptionTestSetup(out datLoaderMock);

            options.CategoryEntryPair.RemoveAt(0);

            // Act
            var    workflow = new DecryptGenericWorkflow(datLoaderMock.Object, plainTextEntryWorkflowBuilderMock.Object, rsaEntryWorkflowBuilderMock.Object, aesEntryWorkflowBuilderMock.Object);
            Action act      = () => workflow.Run(options);

            // Assert
            act.ShouldNotThrow <EnvCryptException>();
        }
        public void Given_PlainTextDecryptionRequest_When_Run_Then_PlainTextWorkflowCalled()
        {
            // Arrange
            Mock <IDatLoader <DatFromFileLoaderOptions> > datLoaderMock;

            var rsaEntryWorkflowBuilderMock = new Mock <IDecryptRsaEntryWorkflowBuilder>(MockBehavior.Strict);
            var aesEntryWorkflowBuilderMock = new Mock <IDecryptAesEntryWorkflowBuilder>(MockBehavior.Strict);

            var plainTextEntryWorkflowBuilderMock = new Mock <IDecryptPlainTextEntryWorkflowBuilder>(MockBehavior.Strict);

            plainTextEntryWorkflowBuilderMock.Setup(
                b => b.WithDatLoader(It.IsAny <IDatLoader <DatFromFileLoaderOptions> >()))
            .Returns(plainTextEntryWorkflowBuilderMock.Object);
            plainTextEntryWorkflowBuilderMock.Setup(
                b => b.Build())
            .Returns(plainTextEntryWorkflowBuilderMock.Object);
            plainTextEntryWorkflowBuilderMock.Setup(
                b => b.Run(It.IsAny <DecryptPlainTextEntryWorkflowOptions>()))
            .Returns(new List <EntriesDecrypterResult <PlainTextKey> >());

            var options = TwoDifferentAlgosExceptionTestSetup(out datLoaderMock);

            options.CategoryEntryPair = options.CategoryEntryPair.Where(p => p.Category == "dev").ToList();

            // Act
            var workflow = new DecryptGenericWorkflow(datLoaderMock.Object, plainTextEntryWorkflowBuilderMock.Object, rsaEntryWorkflowBuilderMock.Object, aesEntryWorkflowBuilderMock.Object);
            var res      = workflow.Run(options);

            // Assert
            plainTextEntryWorkflowBuilderMock.Verify(
                b => b.Run(It.IsAny <DecryptPlainTextEntryWorkflowOptions>()),
                Times.Once);
        }
        public void Given_TwoDifferentEncAlgosRequestedToBeDecrypted_When_Run_Then_ExceptionThrown()
        {
            // Arrange
            Mock <IDatLoader <DatFromFileLoaderOptions> > datLoaderMock;
            var plainTextEntryWorkflowBuilderMock = new Mock <IDecryptPlainTextEntryWorkflowBuilder>(MockBehavior.Strict);
            var rsaEntryWorkflowBuilderMock       = new Mock <IDecryptRsaEntryWorkflowBuilder>(MockBehavior.Strict);
            var aesEntryWorkflowBuilderMock       = new Mock <IDecryptAesEntryWorkflowBuilder>(MockBehavior.Strict);
            var options = TwoDifferentAlgosExceptionTestSetup(out datLoaderMock);

            // Act
            var    workflow = new DecryptGenericWorkflow(datLoaderMock.Object, plainTextEntryWorkflowBuilderMock.Object, rsaEntryWorkflowBuilderMock.Object, aesEntryWorkflowBuilderMock.Object);
            Action act      = () => workflow.Run(options);

            // Assert
            act.ShouldThrow <EnvCryptException>();
        }