@@ -62,8 +62,8 @@ func TestConstruct_SingleStage_NoDLQ(t *testing.T) {
6262 Key : "start" ,
6363 Name : "start" ,
6464 ConsumerGroup : "orchestrator-start" ,
65- New : func (d testDeps ) (consumer.Controller , error ) {
66- return & fakeController {key : "start" , group : "orchestrator-start" }, nil
65+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
66+ return & fakeController {key : sc . TopicKey , group : sc . ConsumerGroup }, nil
6767 },
6868 },
6969 }
@@ -85,11 +85,11 @@ func TestConstruct_WithDLQ(t *testing.T) {
8585 Key : "start" ,
8686 Name : "start" ,
8787 ConsumerGroup : "orchestrator-start" ,
88- New : func (d testDeps ) (consumer.Controller , error ) {
89- return & fakeController {key : "start" , group : "orchestrator-start" }, nil
88+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
89+ return & fakeController {key : sc . TopicKey , group : sc . ConsumerGroup }, nil
9090 },
91- DLQ : func (d testDeps ) (consumer.Controller , error ) {
92- return & fakeController {key : "start_dlq" , group : "orchestrator-start-dlq" }, nil
91+ DLQ : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
92+ return & fakeController {key : sc . TopicKey , group : sc . ConsumerGroup }, nil
9393 },
9494 },
9595 }
@@ -111,19 +111,19 @@ func TestConstruct_MultipleStages(t *testing.T) {
111111 Key : "start" ,
112112 Name : "start" ,
113113 ConsumerGroup : "orchestrator-start" ,
114- New : func (d testDeps ) (consumer.Controller , error ) {
115- return & fakeController {key : "start" , group : "orchestrator-start" }, nil
114+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
115+ return & fakeController {key : sc . TopicKey , group : sc . ConsumerGroup }, nil
116116 },
117117 },
118118 {
119119 Key : "validate" ,
120120 Name : "validate" ,
121121 ConsumerGroup : "orchestrator-validate" ,
122- New : func (d testDeps ) (consumer.Controller , error ) {
123- return & fakeController {key : "validate" , group : "orchestrator-validate" }, nil
122+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
123+ return & fakeController {key : sc . TopicKey , group : sc . ConsumerGroup }, nil
124124 },
125- DLQ : func (d testDeps ) (consumer.Controller , error ) {
126- return & fakeController {key : "validate_dlq" , group : "orchestrator-validate-dlq" }, nil
125+ DLQ : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
126+ return & fakeController {key : sc . TopicKey , group : sc . ConsumerGroup }, nil
127127 },
128128 },
129129 }
@@ -155,7 +155,7 @@ func TestConstruct_ControllerCreationFailure(t *testing.T) {
155155 Key : "start" ,
156156 Name : "start" ,
157157 ConsumerGroup : "orchestrator-start" ,
158- New : func (d testDeps ) (consumer.Controller , error ) {
158+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
159159 return nil , fmt .Errorf ("missing dependency" )
160160 },
161161 },
@@ -179,10 +179,10 @@ func TestConstruct_DLQControllerCreationFailure(t *testing.T) {
179179 Key : "start" ,
180180 Name : "start" ,
181181 ConsumerGroup : "orchestrator-start" ,
182- New : func (d testDeps ) (consumer.Controller , error ) {
183- return & fakeController {key : "start" , group : "orchestrator-start" }, nil
182+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
183+ return & fakeController {key : sc . TopicKey , group : sc . ConsumerGroup }, nil
184184 },
185- DLQ : func (d testDeps ) (consumer.Controller , error ) {
185+ DLQ : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
186186 return nil , fmt .Errorf ("dlq dependency missing" )
187187 },
188188 },
@@ -206,8 +206,8 @@ func TestConstruct_WithPublishOnly(t *testing.T) {
206206 Key : "start" ,
207207 Name : "start" ,
208208 ConsumerGroup : "orchestrator-start" ,
209- New : func (d testDeps ) (consumer.Controller , error ) {
210- return & fakeController {key : "start" , group : "orchestrator-start" }, nil
209+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
210+ return & fakeController {key : sc . TopicKey , group : sc . ConsumerGroup }, nil
211211 },
212212 },
213213 }
@@ -234,8 +234,8 @@ func TestConstruct_WithTopicNameOverrides(t *testing.T) {
234234 Key : "start" ,
235235 Name : "start" ,
236236 ConsumerGroup : "orchestrator-start" ,
237- New : func (d testDeps ) (consumer.Controller , error ) {
238- return & fakeController {key : "start" , group : "orchestrator-start" }, nil
237+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
238+ return & fakeController {key : sc . TopicKey , group : sc . ConsumerGroup }, nil
239239 },
240240 },
241241 }
@@ -249,6 +249,46 @@ func TestConstruct_WithTopicNameOverrides(t *testing.T) {
249249 assert .NotNil (t , comp )
250250}
251251
252+ func TestConstruct_StageContext_Populated (t * testing.T ) {
253+ ctrl := gomock .NewController (t )
254+ q := mqmock .NewMockQueue (ctrl )
255+ q .EXPECT ().Subscriber ().Return (mqmock .NewMockSubscriber (ctrl )).AnyTimes ()
256+ q .EXPECT ().Publisher ().Return (mqmock .NewMockPublisher (ctrl )).AnyTimes ()
257+
258+ deps := testDeps {logger : newTestLogger ()}
259+
260+ var primarySC , dlqSC StageContext
261+ stages := []Stage [testDeps ]{
262+ {
263+ Key : "start" ,
264+ Name : "start" ,
265+ ConsumerGroup : "orchestrator-start" ,
266+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
267+ primarySC = sc
268+ return & fakeController {key : sc .TopicKey , group : sc .ConsumerGroup }, nil
269+ },
270+ DLQ : func (d testDeps , sc StageContext ) (consumer.Controller , error ) {
271+ dlqSC = sc
272+ return & fakeController {key : sc .TopicKey , group : sc .ConsumerGroup }, nil
273+ },
274+ },
275+ }
276+
277+ _ , err := Construct (deps .logger , tally .NoopScope , q , "test-sub" , deps , stages )
278+ require .NoError (t , err )
279+
280+ // Primary StageContext should have the stage's own key and group.
281+ assert .Equal (t , consumer .TopicKey ("start" ), primarySC .TopicKey )
282+ assert .Equal (t , "orchestrator-start" , primarySC .ConsumerGroup )
283+
284+ // DLQ StageContext should have the derived DLQ key and group.
285+ assert .Equal (t , consumer .TopicKey ("start_dlq" ), dlqSC .TopicKey )
286+ assert .Equal (t , "orchestrator-start-dlq" , dlqSC .ConsumerGroup )
287+
288+ // Both should share the same registry.
289+ assert .Equal (t , primarySC .Registry , dlqSC .Registry )
290+ }
291+
252292func TestResolveTopicName (t * testing.T ) {
253293 tests := []struct {
254294 name string
@@ -308,14 +348,14 @@ func TestBuildTopicConfigs(t *testing.T) {
308348 Key : "start" ,
309349 Name : "start" ,
310350 ConsumerGroup : "orchestrator-start" ,
311- New : func (d testDeps ) (consumer.Controller , error ) { return nil , nil },
312- DLQ : func (d testDeps ) (consumer.Controller , error ) { return nil , nil },
351+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) { return nil , nil },
352+ DLQ : func (d testDeps , sc StageContext ) (consumer.Controller , error ) { return nil , nil },
313353 },
314354 {
315355 Key : "validate" ,
316356 Name : "validate" ,
317357 ConsumerGroup : "orchestrator-validate" ,
318- New : func (d testDeps ) (consumer.Controller , error ) { return nil , nil },
358+ New : func (d testDeps , sc StageContext ) (consumer.Controller , error ) { return nil , nil },
319359 // No DLQ for this stage.
320360 },
321361 }
0 commit comments