public void The_simple_resolver_cannot_resolve_operations_with_unregistered_sub_dependencies(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();
            sut.RegisterOperationDependency<ComplexDependency, ComplexDependency>();

            Assert.Throws<InvalidOperationException>(() => sut.Resolve<OperationWithComplexDependencies>(configuration));
        }
        public void The_simple_resolver_can_resolve_operations_without_any_dependencies(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            var result = sut.Resolve<SimpleTestOperation>(configuration);

            Assert.NotNull(result);
        }
        public void Operations_having_more_than_one_constructor_cannot_be_resolved(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            sut.RegisterOperationDependency <SimpleDependency, SimpleDependency>();

            Assert.Throws <InvalidOperationException>(() => sut.Resolve <OperationWithTwoConstructors>(configuration));
        }
        public void The_simple_resolver_cannot_resolve_operations_with_unregistered_sub_dependencies(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            sut.RegisterOperationDependency <ComplexDependency, ComplexDependency>();

            Assert.Throws <InvalidOperationException>(() => sut.Resolve <OperationWithComplexDependencies>(configuration));
        }
        public void The_simple_resolver_can_resolve_operations_without_any_dependencies(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            var result = sut.Resolve <SimpleTestOperation>(configuration);

            Assert.NotNull(result);
        }
        public void The_simple_resolver_can_resolve_operations_with_registered_dependencies(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();
            sut.RegisterOperationDependency<SimpleDependency, SimpleDependency>();

            var result = sut.Resolve<OperationWithDependencies>(configuration);

            Assert.NotNull(result);
        }
        public void Dependencies_can_be_registered_as_implementations(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            sut.RegisterOperationDependency <IDependency, SimpleDependency>();

            var result = sut.Resolve <OperationWithInterfaceDependency>(configuration);

            Assert.NotNull(result);
        }
        public void The_simple_resolver_can_resolve_operations_with_registered_instance_dependencies(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            sut.RegisterOperationDependencyInstance(new SimpleDependency());

            var result = sut.Resolve <OperationWithDependencies>(configuration);

            Assert.NotNull(result);
        }
        public void You_can_register_the_same_dependency_more_than_once(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();
            sut.RegisterOperationDependency<SimpleDependency, SimpleDependency>();
            sut.RegisterOperationDependency<SimpleDependency, SimpleDependency>();

            var result = sut.Resolve<OperationWithDependencies>(configuration);

            Assert.NotNull(result);
        }
        public void You_can_create_a_behavior_with_compensated_exception_types(WorkflowConfiguration configuration, SimpleOperationResolver resolver)
        {
            var sut = new CompensatingOperationAttribute(typeof(TestOperation), typeof(Exception));
            configuration.WithResolver(resolver);

            var result = sut.CreateBehavior(configuration);

            Assert.NotNull(result);
            Assert.IsType<CompensatingOperationBehavior>(result);
        }
        public void Resolving_the_same_operation_twice_returns_two_different_instances(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();
            sut.RegisterOperationDependency<SimpleDependency, SimpleDependency>();

            var result1 = sut.Resolve<SimpleTestOperation>(configuration);
            var result2 = sut.Resolve<SimpleTestOperation>(configuration);

            Assert.NotSame(result1, result2);
        }
        public void You_can_register_the_same_instance_dependency_more_than_once(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            sut.RegisterOperationDependencyInstance(new SimpleDependency());
            sut.RegisterOperationDependencyInstance(new SimpleDependency());

            var result = sut.Resolve <OperationWithDependencies>(configuration);

            Assert.NotNull(result);
        }
        public void Resolving_the_same_operation_twice_returns_two_different_instances(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            sut.RegisterOperationDependency <SimpleDependency, SimpleDependency>();

            var result1 = sut.Resolve <SimpleTestOperation>(configuration);
            var result2 = sut.Resolve <SimpleTestOperation>(configuration);

            Assert.NotSame(result1, result2);
        }
        public void Dependencies_are_resolved_as_new_instances_every_time(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            sut.RegisterOperationDependency <SimpleDependency, SimpleDependency>();

            var result1 = sut.Resolve <OperationWithDependencies>(configuration) as OperationWithDependencies;
            var result2 = sut.Resolve <OperationWithDependencies>(configuration) as OperationWithDependencies;

            Assert.NotSame(result1.Dependency, result2.Dependency);
        }
        public void You_can_create_a_behavior(WorkflowConfiguration configuration, SimpleOperationResolver resolver)
        {
            var sut = new CompensatingOperationAttribute(typeof(TestOperation));

            configuration.WithResolver(resolver);

            var result = sut.CreateBehavior(configuration);

            Assert.NotNull(result);
            Assert.IsType <CompensatingOperationBehavior>(result);
        }
        public void The_simple_resolver_can_resolve_operations_with_nested_dependencies(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            sut.RegisterOperationDependency <SimpleDependency, SimpleDependency>();
            sut.RegisterOperationDependency <ComplexDependency, ComplexDependency>();

            var result = sut.Resolve <OperationWithComplexDependencies>(configuration);

            Assert.NotNull(result);
        }
        public void Dependencies_registered_as_instances_are_preferred_over_instances_registered_as_types(WorkflowConfiguration configuration, SimpleDependency instance)
        {
            var sut = new SimpleOperationResolver();

            sut.RegisterOperationDependency <SimpleDependency, SimpleDependency>();
            sut.RegisterOperationDependencyInstance(instance);

            var result = (OperationWithDependencies)sut.Resolve <OperationWithDependencies>(configuration);

            Assert.Equal(instance, result.Dependency);
        }
        public void The_last_registered_dependency_of_a_given_type_wins(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();

            sut.RegisterOperationDependency <SimpleDependency, SimpleDependency>();
            sut.RegisterOperationDependency <IDependency, SimpleDependency>();
            sut.RegisterOperationDependency <IDependency, ComplexDependency>();

            var result = sut.Resolve <OperationWithInterfaceDependency>(configuration) as OperationWithInterfaceDependency;

            Assert.IsType <ComplexDependency>(result.Dependency);
        }
Ejemplo n.º 19
0
        public void You_can_create_a_new_operation_from_an_initialized_operation_instance()
        {
            var resolver             = new SimpleOperationResolver();
            var correctConfiguration = new FakeWorkflowConfiguration {
                Resolver = resolver
            };
            var sut = new FakeOperation();

            sut.Initialize(correctConfiguration);

            var result = sut.PublicCreate <TestOperation>() as TestOperation;

            Assert.NotNull(result);
        }
        public void Resolving_operations_creates_and_applies_behaviors_to_the_created_operations(WorkflowConfiguration configuration)
        {
            var sut     = new SimpleOperationResolver();
            var factory = new FakeOperationBehaviorFactory();

            factory.OperationBehaviors.Add(new FakeOperationBehavior {
                SetPrecedence = BehaviorPrecedence.StateRecovery
            });
            var workflow = configuration.WithBehaviorFactory(factory);

            var result = sut.Resolve <SimpleTestOperation>(workflow);

            Assert.IsType <FakeOperationBehavior>(result);
            Assert.IsType <SimpleTestOperation>((result as OperationBehavior).InnerOperation);
        }
Ejemplo n.º 21
0
        public void Created_input_operations_are_provided_with_one_property_input_value(object input)
        {
            var resolver             = new SimpleOperationResolver();
            var correctConfiguration = new FakeWorkflowConfiguration {
                Resolver = resolver
            };
            var sut = new FakeOperation();

            sut.Initialize(correctConfiguration);

            var result = sut.PublicCreate <SimpleTestPropertyInputOperation, object>(input) as SimpleTestPropertyInputOperation;

            Assert.NotNull(result.Input);
            Assert.Equal(input, result.Input);
        }
Ejemplo n.º 22
0
        public void You_cannot_create_an_operation_with_an_input_value_without_specifying_an_input_property_with_the_proper_type(IEnumerable <string> input)
        {
            var resolver = new SimpleOperationResolver();
            var factory  = new FakeOperationBehaviorFactory();

            factory.OperationBehaviors.Add(new FakeOperationBehavior());
            var correctConfiguration = new FakeWorkflowConfiguration {
                Resolver = resolver
            }.WithBehaviorFactory(factory);
            var sut = new FakeOperation();

            sut.Initialize(correctConfiguration);

            Assert.Throws <ArgumentException>(() => sut.PublicCreate <SimpleTestPropertyInputOperation, IEnumerable <string> >(input));
        }
Ejemplo n.º 23
0
        static void Main(string[] args)
        {
            var resolver = new SimpleOperationResolver();
            resolver.RegisterOperationDependency<TaskRepository, TaskRepository>();
            resolver.RegisterOperationDependency<EmailService, EmailService>();

            var sendTaskNotifications = Workflow.Configure<SendTaskNotificationsWorkflow>().
                WithLogger(new TextWriterWorkflowLogger(Console.Out)).
                WithResolver(resolver).
                CreateOperation();

            sendTaskNotifications.Execute();

            Console.WriteLine();
            Console.WriteLine("Press eny key to exit");
            Console.ReadLine();
        }
Ejemplo n.º 24
0
        static void Main(string[] args)
        {
            var resolver = new SimpleOperationResolver();

            resolver.RegisterOperationDependency <TaskRepository, TaskRepository>();
            resolver.RegisterOperationDependency <EmailService, EmailService>();

            var sendTaskNotifications = Workflow.Configure <SendTaskNotificationsWorkflow>().
                                        WithLogger(new TextWriterWorkflowLogger(Console.Out)).
                                        WithResolver(resolver).
                                        CreateOperation();

            sendTaskNotifications.Execute();

            Console.WriteLine();
            Console.WriteLine("Press eny key to exit");
            Console.ReadLine();
        }
Ejemplo n.º 25
0
        public void Created_input_operations_are_provided_with_two_input_values(Tuple <object> input1, Tuple <object, object> input2)
        {
            var resolver             = new SimpleOperationResolver();
            var correctConfiguration = new FakeWorkflowConfiguration {
                Resolver = resolver
            };
            var sut = new FakeOperation();

            sut.Initialize(correctConfiguration);

            var result = sut.PublicCreate <SimpleTestPropertyInputOperation <Tuple <object>, Tuple <object, object>, object>, Tuple <object>, Tuple <object, object> >(input1, input2) as SimpleTestPropertyInputOperation <Tuple <object>, Tuple <object, object>, object>;

            Assert.NotNull(result.Input1);
            Assert.Equal(input1, result.Input1);
            Assert.NotNull(result.Input2);
            Assert.Equal(input2, result.Input2);
            Assert.Null(result.Input3);
        }
Ejemplo n.º 26
0
        public void Created_input_operations_are_provided_with_input_values_when_having_behaviors(object input)
        {
            var resolver = new SimpleOperationResolver();
            var factory  = new FakeOperationBehaviorFactory();

            factory.OperationBehaviors.Add(new FakeOperationBehavior());
            var correctConfiguration = new FakeWorkflowConfiguration {
                Resolver = resolver
            }.WithBehaviorFactory(factory);
            var sut = new FakeOperation();

            sut.Initialize(correctConfiguration);

            var result = sut.PublicCreate <SimpleTestPropertyInputOperation, object>(input).GetInnermostOperation() as SimpleTestPropertyInputOperation;

            Assert.NotNull(result.Input);
            Assert.Equal(input, result.Input);
        }
Ejemplo n.º 27
0
        static void Main(string[] args)
        {
            var resolver = new SimpleOperationResolver();

            resolver.RegisterOperationDependencyInstance <Func <string, IExternalDatabase> >(connectionString => new ExternalDatabase());
            resolver.RegisterOperationDependency <IDatabase, Database>();
            resolver.RegisterOperationDependency <IEmailService, EmailService>();
            resolver.RegisterOperationDependency <ISmsService, SmsService>();

            var importUsers = Workflow.Configure <ImportUsersWorkflow>()
                              .WithLogger(new TextWriterWorkflowLogger(Console.Out))
                              .WithResolver(resolver)
                              .CreateOperation();

            importUsers.Execute();

            Console.WriteLine();
            Console.WriteLine("Press eny key to exit");
            Console.ReadLine();
        }
        public void The_last_registered_dependency_of_a_given_type_wins(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();
            sut.RegisterOperationDependency<SimpleDependency, SimpleDependency>();
            sut.RegisterOperationDependency<IDependency, SimpleDependency>();
            sut.RegisterOperationDependency<IDependency, ComplexDependency>();

            var result = sut.Resolve<OperationWithInterfaceDependency>(configuration) as OperationWithInterfaceDependency;

            Assert.IsType<ComplexDependency>(result.Dependency);
        }
        public void Dependencies_can_be_registered_as_implementations(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();
            sut.RegisterOperationDependency<IDependency, SimpleDependency>();

            var result = sut.Resolve<OperationWithInterfaceDependency>(configuration);

            Assert.NotNull(result);
        }
        public void Dependencies_are_resolved_as_new_instances_every_time(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();
            sut.RegisterOperationDependency<SimpleDependency, SimpleDependency>();

            var result1 = sut.Resolve<OperationWithDependencies>(configuration) as OperationWithDependencies;
            var result2 = sut.Resolve<OperationWithDependencies>(configuration) as OperationWithDependencies;

            Assert.NotSame(result1.Dependency, result2.Dependency);
        }
        public void Resolving_operations_creates_and_applies_behaviors_to_the_created_operations(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();
            var factory = new FakeOperationBehaviorFactory();
            factory.OperationBehaviors.Add(new FakeOperationBehavior { SetPrecedence = BehaviorPrecedence.StateRecovery });
            var workflow = configuration.WithBehaviorFactory(factory);

            var result = sut.Resolve<SimpleTestOperation>(workflow);

            Assert.IsType<FakeOperationBehavior>(result);
            Assert.IsType<SimpleTestOperation>((result as OperationBehavior).InnerOperation);
        }
        public void Operations_having_more_than_one_constructor_cannot_be_resolved(WorkflowConfiguration configuration)
        {
            var sut = new SimpleOperationResolver();
            sut.RegisterOperationDependency<SimpleDependency, SimpleDependency>();

            Assert.Throws<InvalidOperationException>(() => sut.Resolve<OperationWithTwoConstructors>(configuration));
        }