Skip to content

Commit 47a2f78

Browse files
authored
Allow unstubed methods for non-strict triggers (#1178)
1 parent 2b5a517 commit 47a2f78

File tree

2 files changed

+85
-1
lines changed

2 files changed

+85
-1
lines changed

pkg/workflows/sdk/v2/testutils/runner.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package testutils
22

33
import (
4+
"errors"
45
"io"
56
"log/slog"
67
"testing"
@@ -119,7 +120,9 @@ func (r *runner[T]) Run(args *sdk.WorkflowArgs[T]) {
119120
}
120121

121122
response, err := trigger.InvokeTrigger(r.tb.Context(), request)
122-
if err != nil {
123+
124+
var nostub ErrNoTriggerStub
125+
if err != nil && (r.strictTriggers || !errors.As(err, &nostub)) {
123126
r.err = err
124127
return
125128
}

pkg/workflows/sdk/v2/testutils/runner_test.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,46 @@ func TestRunner_MissingTriggersAreNotRequired(t *testing.T) {
168168
require.NoError(t, err)
169169
}
170170

171+
func TestRunner_MissingTriggerStubsAreNotRequired(t *testing.T) {
172+
anyConfig := &basictrigger.Config{Name: "name", Number: 123}
173+
anyConfig2 := &actionandtrigger.Config{Name: "b"}
174+
anyTrigger := &basictrigger.Outputs{CoolOutput: "cool"}
175+
176+
trigger, err := basictriggermock.NewBasicCapability(t)
177+
require.NoError(t, err)
178+
trigger.Trigger = func(_ context.Context, config *basictrigger.Config) (*basictrigger.Outputs, error) {
179+
return anyTrigger, nil
180+
}
181+
182+
_, err = actionandtriggermock.NewBasicCapability(t)
183+
require.NoError(t, err)
184+
185+
runner := testutils.NewDonRunner(t, nil)
186+
require.NoError(t, err)
187+
188+
anyResult := "ok"
189+
runner.Run(&sdk.WorkflowArgs[sdk.DonRuntime]{
190+
Handlers: []sdk.Handler[sdk.DonRuntime]{
191+
sdk.NewDonHandler(
192+
basictrigger.Basic{}.Trigger(anyConfig),
193+
func(rt sdk.DonRuntime, input *basictrigger.Outputs) (string, error) {
194+
return anyResult, nil
195+
},
196+
),
197+
sdk.NewDonHandler(
198+
actionandtrigger.Basic{}.Trigger(anyConfig2),
199+
func(rt sdk.DonRuntime, in *actionandtrigger.TriggerEvent) (*string, error) {
200+
assert.Fail(t, "This trigger shouldn'tb fire")
201+
return nil, nil
202+
},
203+
),
204+
},
205+
})
206+
207+
_, _, err = runner.Result()
208+
require.NoError(t, err)
209+
}
210+
171211
func TestRunner_FiringTwoTriggersReturnsAnError(t *testing.T) {
172212
anyConfig1 := &basictrigger.Config{Name: "a", Number: 1}
173213
anyConfig2 := &actionandtrigger.Config{Name: "b"}
@@ -254,6 +294,47 @@ func TestRunner_StrictTriggers_FailsIfTriggerIsNotRegistered(t *testing.T) {
254294
assert.Error(t, err)
255295
}
256296

297+
func TestRunner_StrictTriggers_FailsIfTriggerIsNotStubbed(t *testing.T) {
298+
anyConfig := &basictrigger.Config{Name: "name", Number: 123}
299+
anyConfig2 := &actionandtrigger.Config{Name: "b"}
300+
anyTrigger := &basictrigger.Outputs{CoolOutput: "cool"}
301+
302+
trigger, err := basictriggermock.NewBasicCapability(t)
303+
require.NoError(t, err)
304+
trigger.Trigger = func(_ context.Context, config *basictrigger.Config) (*basictrigger.Outputs, error) {
305+
return anyTrigger, nil
306+
}
307+
308+
_, err = actionandtriggermock.NewBasicCapability(t)
309+
require.NoError(t, err)
310+
311+
runner := testutils.NewDonRunner(t, nil)
312+
require.NoError(t, err)
313+
runner.SetStrictTriggers(true)
314+
315+
anyResult := "ok"
316+
runner.Run(&sdk.WorkflowArgs[sdk.DonRuntime]{
317+
Handlers: []sdk.Handler[sdk.DonRuntime]{
318+
sdk.NewDonHandler(
319+
basictrigger.Basic{}.Trigger(anyConfig),
320+
func(rt sdk.DonRuntime, input *basictrigger.Outputs) (string, error) {
321+
return anyResult, nil
322+
},
323+
),
324+
sdk.NewDonHandler(
325+
actionandtrigger.Basic{}.Trigger(anyConfig2),
326+
func(rt sdk.DonRuntime, in *actionandtrigger.TriggerEvent) (*string, error) {
327+
assert.Fail(t, "This trigger shouldn'tb fire")
328+
return nil, nil
329+
},
330+
),
331+
},
332+
})
333+
334+
_, _, err = runner.Result()
335+
assert.Error(t, err)
336+
}
337+
257338
func TestRunner_CanStartInNodeMode(t *testing.T) {
258339
anyConfig := &nodetrigger.Config{Name: "name", Number: 123}
259340
anyTrigger := &nodetrigger.Outputs{CoolOutput: "cool"}

0 commit comments

Comments
 (0)