Files
temporal/chasm/test_library_test.go
Alan Wu 4bc671865a Add singleton registrable task option (#10832)
## What changed?
Add singleton registrable task option

## Why?
Add task registration option to specify as singleton. For singleton
tasks, there are two conflict resolution options if task already exists:
Replace or Ignore. Replace is used for cases where the task info has
updated fields such as something like scheduled_time, or for use cases
like visibility, where only the last task is required, since all
information for execution is in the visibility component. This can
replace any validation logic that checks the "stamp" of the task to
check if it's stale.

## How did you test it?
- [X] built
- [X] run locally and tested manually
- [X] covered by existing tests
- [X] added new unit test(s)
- [ ] added new functional test(s)
2026-07-07 15:49:16 -04:00

98 lines
3.9 KiB
Go

// TODO: move this to chasm_test package
package chasm
import (
"go.uber.org/mock/gomock"
)
type TestLibrary struct {
UnimplementedLibrary
controller *gomock.Controller
mockSideEffectTaskHandler *MockSideEffectTaskHandler[any, *TestSideEffectTask]
mockDiscardableSideEffectHandler *MockSideEffectTaskHandler[any, *TestDiscardableSideEffectTask]
mockOutboundSideEffectTaskHandler *MockSideEffectTaskHandler[any, TestOutboundSideEffectTask]
mockPureTaskHandler *MockPureTaskHandler[any, *TestPureTask]
mockSingletonReplaceSideEffectTaskHandler *MockSideEffectTaskHandler[any, *TestSingletonReplaceSideEffectTask]
mockSingletonIgnoreSideEffectTaskHandler *MockSideEffectTaskHandler[any, *TestSingletonIgnoreSideEffectTask]
mockSingletonReplacePureTaskHandler *MockPureTaskHandler[any, *TestSingletonReplacePureTask]
mockSingletonIgnorePureTaskHandler *MockPureTaskHandler[any, *TestSingletonIgnorePureTask]
}
func newTestLibrary(
controller *gomock.Controller,
) *TestLibrary {
return &TestLibrary{
controller: controller,
mockSideEffectTaskHandler: NewMockSideEffectTaskHandler[any, *TestSideEffectTask](controller),
mockDiscardableSideEffectHandler: NewMockSideEffectTaskHandler[any, *TestDiscardableSideEffectTask](controller),
mockOutboundSideEffectTaskHandler: NewMockSideEffectTaskHandler[any, TestOutboundSideEffectTask](controller),
mockPureTaskHandler: NewMockPureTaskHandler[any, *TestPureTask](controller),
mockSingletonReplaceSideEffectTaskHandler: NewMockSideEffectTaskHandler[any, *TestSingletonReplaceSideEffectTask](controller),
mockSingletonIgnoreSideEffectTaskHandler: NewMockSideEffectTaskHandler[any, *TestSingletonIgnoreSideEffectTask](controller),
mockSingletonReplacePureTaskHandler: NewMockPureTaskHandler[any, *TestSingletonReplacePureTask](controller),
mockSingletonIgnorePureTaskHandler: NewMockPureTaskHandler[any, *TestSingletonIgnorePureTask](controller),
}
}
func (l *TestLibrary) Name() string {
return testLibraryName
}
func (l *TestLibrary) Components() []*RegistrableComponent {
return []*RegistrableComponent{
NewRegistrableComponent[*TestComponent](
testComponentName,
WithBusinessIDAlias("TestBusinessId"),
WithSearchAttributes(TestComponentStartTimeSearchAttribute),
),
NewRegistrableComponent[*TestSubComponent1](testSubComponent1Name),
NewRegistrableComponent[*TestSubComponent11](testSubComponent11Name),
NewRegistrableComponent[*TestSubComponent2](testSubComponent2Name),
}
}
func (l *TestLibrary) Tasks() []*RegistrableTask {
return []*RegistrableTask{
NewRegistrableSideEffectTask(
testSideEffectTaskName,
l.mockSideEffectTaskHandler,
),
NewRegistrableSideEffectTask(
testDiscardableSideEffectTaskName,
l.mockDiscardableSideEffectHandler,
),
NewRegistrableSideEffectTask(
// NOTE this task is registered as a struct, instead of pointer to struct.
testOutboundSideEffectTaskName,
l.mockOutboundSideEffectTaskHandler,
),
NewRegistrablePureTask(
testPureTaskName,
l.mockPureTaskHandler,
),
NewRegistrableSideEffectTask[any, *TestSingletonReplaceSideEffectTask](
testSingletonReplaceSideEffectTaskName,
l.mockSingletonReplaceSideEffectTaskHandler,
WithSingletonTask(SingletonTaskModeReplace),
),
NewRegistrableSideEffectTask[any, *TestSingletonIgnoreSideEffectTask](
testSingletonIgnoreSideEffectTaskName,
l.mockSingletonIgnoreSideEffectTaskHandler,
WithSingletonTask(SingletonTaskModeIgnore),
),
NewRegistrablePureTask[any, *TestSingletonReplacePureTask](
testSingletonReplacePureTaskName,
l.mockSingletonReplacePureTaskHandler,
WithSingletonTask(SingletonTaskModeReplace),
),
NewRegistrablePureTask[any, *TestSingletonIgnorePureTask](
testSingletonIgnorePureTaskName,
l.mockSingletonIgnorePureTaskHandler,
WithSingletonTask(SingletonTaskModeIgnore),
),
}
}