@@ -1042,18 +1042,15 @@ func TestSerializer(t *testing.T) {
10421042 isJSON := isJSONSerializer (dbosCtx .serializer )
10431043
10441044 if isJSON {
1045- // JSON serializer returns map[string]any
1046- inputMap , ok := workflow .Input .(map [string ]any )
1047- require .True (t , ok , "Input should be map[string]any for JSON" )
1048- assert .Equal (t , input .Message , inputMap ["Message" ], "Message should match in input" )
1049- assert .Equal (t , float64 (input .Value ), inputMap ["Value" ], "Value should match in input" )
1050-
1051- outputMap , ok := workflow .Output .(map [string ]any )
1052- require .True (t , ok , "Output should be map[string]any for JSON" )
1053- assert .Equal (t , input .Message , outputMap ["Message" ], "Message should match in output" )
1054- assert .Equal (t , float64 (input .Value ), outputMap ["Value" ], "Value should match in output" )
1045+ // JSON serializer returns map[string]any. We need to convert it to a _concrete_ type
1046+ inputConcrete , err := convertJSONToType [ConcreteDataProvider ](workflow .Input )
1047+ require .NoError (t , err , "Failed to convert workflow input to ConcreteDataProvider" )
1048+ assert .Equal (t , input , inputConcrete , "Workflow input should match input" )
1049+
1050+ outputConcrete , err := convertJSONToType [ConcreteDataProvider ](workflow .Output )
1051+ require .NoError (t , err , "Failed to convert workflow output to ConcreteDataProvider" )
1052+ assert .Equal (t , input , outputConcrete , "Workflow output should match input" )
10551053 } else {
1056- // Gob serializer preserves the concrete type
10571054 inputConcrete , ok := workflow .Input .(ConcreteDataProvider )
10581055 require .True (t , ok , "Input should be ConcreteDataProvider for Gob" )
10591056 assert .Equal (t , input , inputConcrete , "Input should match" )
@@ -1062,6 +1059,46 @@ func TestSerializer(t *testing.T) {
10621059 require .True (t , ok , "Output should be ConcreteDataProvider for Gob" )
10631060 assert .Equal (t , input , outputConcrete , "Output should match" )
10641061 }
1062+
1063+ // Test GetWorkflowSteps for interface types
1064+ t .Run ("GetWorkflowSteps" , func (t * testing.T ) {
1065+ steps , err := GetWorkflowSteps (executor , handle .GetWorkflowID ())
1066+ require .NoError (t , err , "Failed to get workflow steps" )
1067+ require .Len (t , steps , 1 , "Expected 1 step" )
1068+
1069+ step := steps [0 ]
1070+ require .NotNil (t , step .Output , "Step output should not be nil" )
1071+ assert .Nil (t , step .Error , "Step should not have error" )
1072+
1073+ if isJSON {
1074+ // JSON serializer returns map[string]any, convert to ConcreteDataProvider
1075+ outputConcrete , err := convertJSONToType [ConcreteDataProvider ](step .Output )
1076+ require .NoError (t , err , "Failed to convert step output to ConcreteDataProvider" )
1077+ assert .Equal (t , input , outputConcrete , "Step output should match input" )
1078+ } else {
1079+ outputConcrete , ok := step .Output .(ConcreteDataProvider )
1080+ require .True (t , ok , "Output should be ConcreteDataProvider for Gob" )
1081+ assert .Equal (t , input , outputConcrete , "Step output should match input" )
1082+ }
1083+ })
1084+
1085+ // Test RetrieveWorkflow for interface types
1086+ // TODO: not supported for interface types w/o storing the type information in the DB
1087+ /*
1088+ t.Run("RetrieveWorkflow", func(t *testing.T) {
1089+ h2, err := RetrieveWorkflow[DataProvider](executor, handle.GetWorkflowID())
1090+ require.NoError(t, err, "Failed to retrieve workflow")
1091+
1092+ retrievedResult, err := h2.GetResult()
1093+ require.NoError(t, err, "Failed to get retrieved workflow result")
1094+
1095+ // For interface types, we need to check the concrete type
1096+ concreteRetrievedResult, ok := retrievedResult.(ConcreteDataProvider)
1097+ require.True(t, ok, "Retrieved result should be ConcreteDataProvider type")
1098+ assert.Equal(t, input.Message, concreteRetrievedResult.Message, "Message should match")
1099+ assert.Equal(t, input.Value, concreteRetrievedResult.Value, "Value should match")
1100+ })
1101+ */
10651102 })
10661103
10671104 // Test nil values with pointer type workflow
0 commit comments