public void CanConfigureAWorkflowWithTwoVersions()
        {
            var workflowConfigurationBuilder = new WorkflowConfigurationBuilder();

            workflowConfigurationBuilder
            .ConfigureWorkflow("LoginWorkflow")
            .WithVersion(1)
            .ImplementedBy(typeof(TwoFactorLoginWorkflow))
            .WithVersion(2)
            .ImplementedBy(typeof(ThreeFactorLoginWorkflow));

            var discoverer = new WorkflowDiscoverer(workflowConfigurationBuilder.BuildConfiguration());

            IEnumerable <WorkflowDescriptor> workflowDescriptors = discoverer.GetConfiguredWorkflows();

            Assert.That(workflowDescriptors.Count(), Is.EqualTo(2));

            var firstWorkflowDescriptor = workflowDescriptors.First();

            Assert.That(firstWorkflowDescriptor.Name, Is.EqualTo("LoginWorkflow"));
            Assert.That(firstWorkflowDescriptor.Version, Is.EqualTo(1));

            var lastWorkflowDescriptor = workflowDescriptors.Last();

            Assert.That(lastWorkflowDescriptor.Name, Is.EqualTo("LoginWorkflow"));
            Assert.That(lastWorkflowDescriptor.Version, Is.EqualTo(2));
        }
 public ConfigurationBuilder()
 {
     Welcome   = new WelcomeConfigurationBuilder(this);
     Security  = new SecurityConfigurationBuilder(this);
     Mapping   = new MappingConfiguration(this);
     Query     = new QueryConfigurationBuilder(this);
     Workflows = new WorkflowConfigurationBuilder(this);
 }
        public void WhenAWorkflowIsConfiguredItStartingActionsAreAvailable()
        {
            var workflowConfigurationBuilder = new WorkflowConfigurationBuilder();

            workflowConfigurationBuilder
            .ConfigureWorkflow("LoginWorkflow")
            .WithVersion(1)
            .ImplementedBy(typeof(TwoFactorLoginWorkflow));

            var actionLoader = new WorkflowActionLoader();

            var descriptor = new WorkflowDescriptor("LoginWorkflow", 1);

            IEnumerable <Type> startingActions = actionLoader.GetWorkflowStartingActions(descriptor);

            Assert.That(startingActions.Count(), Is.EqualTo(1));
            var firstActionType = startingActions.First();

            Assert.That(firstActionType, Is.EqualTo(typeof(LoginAction)));
        }