public void unable_to_determine_a_saga_repository_blows_up()
 {
     Exception<SagaRepositoryUnresolvableException>.ShouldBeThrownBy(() => {
         StatefulSagaConvention.DetermineSagaRepositoryInstance(new TransportSettings(), new SagaTypes
         {
             MessageType = GetType(),
             StateType = GetType()
         });
     });
 }
        public void no_registered_storage_and_matches_the_idiom_so_use_in_memory_cache()
        {
            var types = new SagaTypes
            {
                MessageType = typeof (SagaMessageOne),
                StateType = typeof (MySagaState)
            };

            StatefulSagaConvention.DetermineSagaRepositoryInstance(new TransportSettings(), types)
                                  .ReturnedType.ShouldBe(typeof (InMemorySagaRepository<MySagaState, SagaMessageOne>));
        }
        public void use_matching_storage_to_build_the_repository()
        {
            var types = new SagaTypes
            {
                MessageType = GetType(),
                StateType = typeof (MySagaState)
            };

            var storage1 = MockRepository.GenerateMock<ISagaStorage>();
            var storage2 = MockRepository.GenerateMock<ISagaStorage>();
            var storage3 = MockRepository.GenerateMock<ISagaStorage>();

            var settings = new TransportSettings();
            settings.SagaStorageProviders.Add(storage1);
            settings.SagaStorageProviders.Add(storage2);
            settings.SagaStorageProviders.Add(storage3);

            var def = new ConfiguredInstance(GetType());
            storage3.Stub(x => x.RepositoryFor(types))
                    .Return(def);

            StatefulSagaConvention.DetermineSagaRepositoryInstance(settings, types)
                                  .ShouldBeTheSameAs(def);
        }