@@ -179,3 +179,102 @@ func TestConstructError_TimeoutError(t *testing.T) {
179179 require .Equal (t , s .TimeoutTypeHeartbeat , timeoutErr .TimeoutType ())
180180 require .False (t , timeoutErr .HasDetails ())
181181}
182+
183+ func TestFeatureFlagsHeader (t * testing.T ) {
184+ t .Parallel ()
185+
186+ tests := []struct {
187+ name string
188+ flags FeatureFlags
189+ expected string
190+ }{
191+ {
192+ name : "all flags disabled" ,
193+ flags : FeatureFlags {},
194+ expected : `{}` ,
195+ },
196+ {
197+ name : "WorkflowExecutionAlreadyCompletedErrorEnabled only" ,
198+ flags : FeatureFlags {
199+ WorkflowExecutionAlreadyCompletedErrorEnabled : true ,
200+ },
201+ expected : `{"WorkflowExecutionAlreadyCompletedErrorEnabled":true}` ,
202+ },
203+ {
204+ name : "AutoforwardingEnabled only" ,
205+ flags : FeatureFlags {
206+ AutoforwardingEnabled : true ,
207+ },
208+ expected : `{"autoforwardingEnabled":true}` ,
209+ },
210+ {
211+ name : "multiple flags enabled" ,
212+ flags : FeatureFlags {
213+ WorkflowExecutionAlreadyCompletedErrorEnabled : true ,
214+ AutoforwardingEnabled : true ,
215+ },
216+ expected : `{"WorkflowExecutionAlreadyCompletedErrorEnabled":true,"autoforwardingEnabled":true}` ,
217+ },
218+ {
219+ name : "client-side-only flags are excluded" ,
220+ flags : FeatureFlags {
221+ PollerAutoScalerEnabled : true ,
222+ EphemeralTaskListsEnabled : true ,
223+ },
224+ expected : `{}` ,
225+ },
226+ {
227+ name : "mixed flags - only server-side flags included" ,
228+ flags : FeatureFlags {
229+ WorkflowExecutionAlreadyCompletedErrorEnabled : true ,
230+ AutoforwardingEnabled : true ,
231+ PollerAutoScalerEnabled : true ,
232+ EphemeralTaskListsEnabled : true ,
233+ },
234+ expected : `{"WorkflowExecutionAlreadyCompletedErrorEnabled":true,"autoforwardingEnabled":true}` ,
235+ },
236+ }
237+
238+ for _ , tt := range tests {
239+ tt := tt
240+ t .Run (tt .name , func (t * testing.T ) {
241+ t .Parallel ()
242+ result := featureFlagsHeader (tt .flags )
243+ assert .Equal (t , tt .expected , result )
244+ })
245+ }
246+ }
247+
248+ func TestFromInternalFeatureFlags (t * testing.T ) {
249+ t .Parallel ()
250+
251+ tests := []struct {
252+ name string
253+ input FeatureFlags
254+ }{
255+ {
256+ name : "empty flags" ,
257+ input : FeatureFlags {},
258+ },
259+ {
260+ name : "all flags set" ,
261+ input : FeatureFlags {
262+ WorkflowExecutionAlreadyCompletedErrorEnabled : true ,
263+ AutoforwardingEnabled : true ,
264+ PollerAutoScalerEnabled : true ,
265+ EphemeralTaskListsEnabled : true ,
266+ },
267+ },
268+ }
269+
270+ for _ , tt := range tests {
271+ tt := tt
272+ t .Run (tt .name , func (t * testing.T ) {
273+ t .Parallel ()
274+ result := fromInternalFeatureFlags (tt .input )
275+
276+ assert .Equal (t , tt .input .WorkflowExecutionAlreadyCompletedErrorEnabled , result .WorkflowExecutionAlreadyCompletedErrorEnabled )
277+ assert .Equal (t , tt .input .AutoforwardingEnabled , result .AutoforwardingEnabled )
278+ })
279+ }
280+ }
0 commit comments