diff --git a/go-sandbox/activities/basics/workflow.go b/go-sandbox/activities/basics/workflow.go index b5ce4b1..6716155 100644 --- a/go-sandbox/activities/basics/workflow.go +++ b/go-sandbox/activities/basics/workflow.go @@ -68,6 +68,9 @@ func YourWorkflowDefinition(ctx workflow.Context, param YourWorkflowParam) (*You // @@@SNIPEND +// @@@SNIPSTART go-workflows-basics-simple func YourSimpleWorkflowDefinition(ctx workflow.Context) error { + // ... return nil } +// @@@SNIPEND diff --git a/go-sandbox/workflows/basics/workflow.go b/go-sandbox/workflows/basics/workflow.go new file mode 100644 index 0000000..cbb1c17 --- /dev/null +++ b/go-sandbox/workflows/basics/workflow.go @@ -0,0 +1,51 @@ +package basics + +import ( + "time" + + "github.com/google/uuid" + "go.temporal.io/sdk/workflow" +) + +// @@@SNIPSTART go-workflows-basics-logging +func MyWorkflow(ctx workflow.Context, name string) (string, error) { + logger := workflow.GetLogger(ctx) + logger.Info("Starting workflow", "name", name) + // ... + return "Hello " + name, nil +} +// @@@SNIPEND + +type DeterministicValues struct { + ID string + CurrentTime time.Time +} + +// DeterministicValuesWorkflow generates values that stay the same when the +// Workflow replays. +func DeterministicValuesWorkflow(ctx workflow.Context) (*DeterministicValues, error) { + // @@@SNIPSTART go-workflows-basics-side-effect-uuid + var id string + encodedID := workflow.SideEffect(ctx, func(ctx workflow.Context) interface{} { + return uuid.New().String() + }) + if err := encodedID.Get(&id); err != nil { + return nil, err + } + // @@@SNIPEND + + // @@@SNIPSTART go-workflows-basics-now + currentTime := workflow.Now(ctx) + // @@@SNIPEND + + // @@@SNIPSTART go-workflows-basics-is-replaying + if !workflow.IsReplaying(ctx) { + emitMetric("workflow_started", 1) + } + // @@@SNIPEND + + return &DeterministicValues{ID: id, CurrentTime: currentTime}, nil +} + +// emitMetric stands in for a call to an external metrics system. +func emitMetric(name string, value int) {} diff --git a/go-sandbox/workflows/basics/workflow_test.go b/go-sandbox/workflows/basics/workflow_test.go new file mode 100644 index 0000000..07ce685 --- /dev/null +++ b/go-sandbox/workflows/basics/workflow_test.go @@ -0,0 +1,44 @@ +package basics_test + +import ( + "testing" + + "github.com/google/uuid" + "github.com/stretchr/testify/suite" + "go.temporal.io/sdk/testsuite" + + "my-org/quickstart/workflows/basics" +) + +type WorkflowBasicsTestSuite struct { + suite.Suite + testsuite.WorkflowTestSuite +} + +func TestWorkflowBasicsTestSuite(t *testing.T) { + suite.Run(t, new(WorkflowBasicsTestSuite)) +} + +func (s *WorkflowBasicsTestSuite) Test_MyWorkflow() { + env := s.NewTestWorkflowEnvironment() + env.ExecuteWorkflow(basics.MyWorkflow, "Temporal") + s.True(env.IsWorkflowCompleted()) + s.NoError(env.GetWorkflowError()) + + var result string + s.NoError(env.GetWorkflowResult(&result)) + s.Equal("Hello Temporal", result) +} + +func (s *WorkflowBasicsTestSuite) Test_DeterministicValuesWorkflow() { + env := s.NewTestWorkflowEnvironment() + env.ExecuteWorkflow(basics.DeterministicValuesWorkflow) + s.True(env.IsWorkflowCompleted()) + s.NoError(env.GetWorkflowError()) + + var result basics.DeterministicValues + s.NoError(env.GetWorkflowResult(&result)) + _, err := uuid.Parse(result.ID) + s.NoError(err) + s.False(result.CurrentTime.IsZero()) +}