|
| 1 | +# frozen_string_literal: true |
| 2 | + |
| 3 | +require 'test' |
| 4 | +require 'dsl/activities' |
| 5 | +require 'dsl/models' |
| 6 | +require 'dsl/dsl_workflow' |
| 7 | +require 'securerandom' |
| 8 | +require 'temporalio/client' |
| 9 | +require 'temporalio/testing' |
| 10 | +require 'temporalio/worker' |
| 11 | + |
| 12 | +module Dsl |
| 13 | + class DslWorkflowTest < Test |
| 14 | + def test_workflow |
| 15 | + Temporalio::Testing::WorkflowEnvironment.start_local do |env| |
| 16 | + # Load the YAML from workflow2.yaml |
| 17 | + yaml_str = File.read(File.join(File.dirname(__FILE__), '../../dsl/workflow2.yaml')) |
| 18 | + # Run workflow in a worker |
| 19 | + worker = Temporalio::Worker.new( |
| 20 | + client: env.client, |
| 21 | + task_queue: "tq-#{SecureRandom.uuid}", |
| 22 | + activities: [Activities::Activity1, Activities::Activity2, Activities::Activity3, |
| 23 | + Activities::Activity4, Activities::Activity5], |
| 24 | + workflows: [DslWorkflow] |
| 25 | + ) |
| 26 | + handle, result = worker.run do |
| 27 | + handle = env.client.start_workflow( |
| 28 | + DslWorkflow, Models::Input.from_yaml(yaml_str), |
| 29 | + id: "wf-#{SecureRandom.uuid}", task_queue: worker.task_queue |
| 30 | + ) |
| 31 | + [handle, handle.result] |
| 32 | + end |
| 33 | + # Confirm expected variable results |
| 34 | + assert_equal( |
| 35 | + { |
| 36 | + 'arg1' => 'value1', |
| 37 | + 'arg2' => 'value2', |
| 38 | + 'arg3' => 'value3', |
| 39 | + 'result1' => '[result from activity1: value1]', |
| 40 | + 'result2' => '[result from activity2: [result from activity1: value1]]', |
| 41 | + 'result3' => '[result from activity3: value2 [result from activity2: [result from activity1: value1]]]', |
| 42 | + 'result4' => '[result from activity4: [result from activity1: value1]]', |
| 43 | + 'result5' => '[result from activity5: value3 [result from activity4: [result from activity1: value1]]]', |
| 44 | + 'result6' => '[result from activity3: [result from activity3: value2 [result from activity2: ' \ |
| 45 | + '[result from activity1: value1]]] [result from activity5: ' \ |
| 46 | + 'value3 [result from activity4: [result from activity1: value1]]]]' |
| 47 | + }, |
| 48 | + result |
| 49 | + ) |
| 50 | + # Collect all activity events and confirm they are in order expected |
| 51 | + activity_names = handle.fetch_history_events |
| 52 | + .map { |e| e.activity_task_scheduled_event_attributes&.activity_type&.name } |
| 53 | + .compact |
| 54 | + assert_equal 'activity1', activity_names[0] |
| 55 | + assert_equal %w[activity2 activity3 activity4 activity5], activity_names[1, 4].sort |
| 56 | + assert_equal 'activity3', activity_names[5] |
| 57 | + end |
| 58 | + end |
| 59 | + end |
| 60 | +end |
0 commit comments