@@ -46,6 +46,39 @@ public class Context : ScenarioContext
46
46
public bool IsEventSubscriptionReceived { get ; set ; }
47
47
}
48
48
49
+
50
+ [ Test ]
51
+ public void Should_start_the_saga_when_set_up_to_start_for_the_base_event ( )
52
+ {
53
+ Scenario . Define < SagaContext > ( )
54
+ . WithEndpoint < SagaThatPublishesAnEvent > ( b =>
55
+ b . Given (
56
+ ( bus , context ) =>
57
+ Subscriptions . OnEndpointSubscribed ( s =>
58
+ {
59
+ if ( s . SubscriberReturnAddress . Queue . Contains ( "SagaThatIsStartedByABaseEvent" ) )
60
+ {
61
+ context . IsEventSubscriptionReceived = true ;
62
+ }
63
+ } ) )
64
+ . When ( c => c . IsEventSubscriptionReceived ,
65
+ bus =>
66
+ bus . Publish < SomethingHappenedEvent > ( m=> { m . DataId = Guid . NewGuid ( ) ; } ) )
67
+ )
68
+ . WithEndpoint < SagaThatIsStartedByABaseEvent > (
69
+ b => b . Given ( ( bus , context ) => bus . Subscribe < BaseEvent > ( ) ) )
70
+ . Done ( c => c . DidSagaComplete )
71
+ . Repeat ( r => r . For ( Transports . Default ) )
72
+ . Should ( c => Assert . True ( c . DidSagaComplete ) )
73
+ . Run ( ) ;
74
+ }
75
+
76
+ public class SagaContext : ScenarioContext
77
+ {
78
+ public bool IsEventSubscriptionReceived { get ; set ; }
79
+ public bool DidSagaComplete { get ; set ; }
80
+ }
81
+
49
82
public class SagaThatPublishesAnEvent : EndpointConfigurationBuilder
50
83
{
51
84
public SagaThatPublishesAnEvent ( )
@@ -125,13 +158,45 @@ public class Saga2Timeout
125
158
}
126
159
}
127
160
161
+ public class SagaThatIsStartedByABaseEvent : EndpointConfigurationBuilder
162
+ {
163
+ public SagaThatIsStartedByABaseEvent ( )
164
+ {
165
+ EndpointSetup < DefaultServer > ( c => Configure . Features . Disable < AutoSubscribe > ( ) )
166
+ . AddMapping < BaseEvent > ( typeof ( SagaThatPublishesAnEvent ) ) ;
167
+ }
168
+
169
+ public class SagaStartedByBaseEvent : Saga < SagaStartedByBaseEvent . SagaData > , IAmStartedByMessages < BaseEvent >
170
+ {
171
+ public SagaContext Context { get ; set ; }
172
+
173
+ public void Handle ( BaseEvent message )
174
+ {
175
+ Data . DataId = message . DataId ;
176
+ MarkAsComplete ( ) ;
177
+ Context . DidSagaComplete = true ;
178
+ }
179
+
180
+ public class SagaData : ContainSagaData
181
+ {
182
+ [ Unique ]
183
+ public virtual Guid DataId { get ; set ; }
184
+ }
185
+ }
186
+ }
187
+
128
188
[ Serializable ]
129
189
public class StartSaga : ICommand
130
190
{
131
191
public Guid DataId { get ; set ; }
132
192
}
133
193
134
- public interface SomethingHappenedEvent : IEvent
194
+ public interface SomethingHappenedEvent : BaseEvent
195
+ {
196
+
197
+ }
198
+
199
+ public interface BaseEvent : IEvent
135
200
{
136
201
Guid DataId { get ; set ; }
137
202
}
0 commit comments