@@ -23,6 +23,7 @@ package internal
23
23
24
24
import (
25
25
"context"
26
+ "github.com/stretchr/testify/suite"
26
27
"strings"
27
28
"testing"
28
29
"time"
@@ -127,3 +128,73 @@ func TestWorkflowReturnNil(t *testing.T) {
127
128
err := env .GetWorkflowResult (& r )
128
129
require .NoError (t , err )
129
130
}
131
+
132
+ type InterceptorTestSuite struct {
133
+ suite.Suite
134
+ WorkflowTestSuite
135
+
136
+ env * TestWorkflowEnvironment
137
+ testFactory InterceptorFactory
138
+ }
139
+
140
+ type InterceptorFactory struct {
141
+ workflowInterceptorInvocationCounter int
142
+ childWorkflowInterceptorInvocationCounter int
143
+ }
144
+
145
+ type Interceptor struct {
146
+ WorkflowInterceptorBase
147
+ workflowInterceptorInvocationCounter * int
148
+ childWorkflowInterceptorInvocationCounter * int
149
+ }
150
+
151
+ func (i * Interceptor ) ExecuteWorkflow (ctx Context , workflowType string , args ... interface {}) []interface {} {
152
+ * i .workflowInterceptorInvocationCounter += 1
153
+ return i .Next .ExecuteWorkflow (ctx , workflowType , args ... )
154
+ }
155
+ func (i * Interceptor ) ExecuteChildWorkflow (ctx Context , workflowType string , args ... interface {}) ChildWorkflowFuture {
156
+ * i .childWorkflowInterceptorInvocationCounter += 1
157
+ return i .Next .ExecuteChildWorkflow (ctx , workflowType , args ... )
158
+ }
159
+
160
+ func (f * InterceptorFactory ) NewInterceptor (_ * WorkflowInfo , next WorkflowInterceptor ) WorkflowInterceptor {
161
+ return & Interceptor {
162
+ WorkflowInterceptorBase : WorkflowInterceptorBase {
163
+ Next : next ,
164
+ },
165
+ workflowInterceptorInvocationCounter : & f .workflowInterceptorInvocationCounter ,
166
+ childWorkflowInterceptorInvocationCounter : & f .childWorkflowInterceptorInvocationCounter ,
167
+ }
168
+ }
169
+
170
+ func (s * InterceptorTestSuite ) SetupTest () {
171
+ // Create a test workflow environment with the trace interceptor configured.
172
+ s .env = s .NewTestWorkflowEnvironment ()
173
+ s .testFactory = InterceptorFactory {}
174
+ s .env .SetWorkerOptions (WorkerOptions {
175
+ WorkflowInterceptorChainFactories : []WorkflowInterceptorFactory {
176
+ & s .testFactory ,
177
+ },
178
+ })
179
+ }
180
+
181
+ func TestInterceptorTestSuite (t * testing.T ) {
182
+ suite .Run (t , new (InterceptorTestSuite ))
183
+ }
184
+
185
+ func (s * InterceptorTestSuite ) Test_GeneralInterceptor_IsExecutedOnChildren () {
186
+ r := s .Require ()
187
+ childWf := func (ctx Context ) error {
188
+ return nil
189
+ }
190
+ s .env .RegisterWorkflowWithOptions (childWf , RegisterWorkflowOptions {Name : "child" })
191
+ wf := func (ctx Context ) error {
192
+ return ExecuteChildWorkflow (ctx , childWf ).Get (ctx , nil )
193
+ }
194
+ s .env .RegisterWorkflowWithOptions (wf , RegisterWorkflowOptions {Name : "parent" })
195
+ s .env .ExecuteWorkflow (wf )
196
+ r .True (s .env .IsWorkflowCompleted ())
197
+ r .NoError (s .env .GetWorkflowError ())
198
+ r .Equal (s .testFactory .workflowInterceptorInvocationCounter , 2 )
199
+ r .Equal (s .testFactory .childWorkflowInterceptorInvocationCounter , 1 )
200
+ }
0 commit comments