Module: Trailblazer::Core::Utils::Assertions

Defined in:
lib/trailblazer/core/utils/assertions.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.render_task(proc) ⇒ Object

Use this in #Cct.



64
65
66
# File 'lib/trailblazer/core/utils/assertions.rb', line 64

def render_task(proc)
  Activity::Introspect.render_task(proc)
end

Instance Method Details

#assert_call(activity, terminus: :success, seq: "[]", expected_ctx_variables: {}, **ctx_variables) ⇒ Object

‘:seq` is always passed into ctx.

Parameters:

  • :seq

    String What the :seq variable in the result ctx looks like. (expected seq)

  • :expected_ctx_variables

    Variables that are added during the call by the asserted activity.



7
8
9
10
11
12
# File 'lib/trailblazer/core/utils/assertions.rb', line 7

def assert_call(activity, terminus: :success, seq: "[]", expected_ctx_variables: {}, **ctx_variables)
  # Call without taskWrap!
  signal, (ctx, _) = activity.([{seq: [], **ctx_variables}, _flow_options = {}]) # simply call the activity with the input you want to assert.

  assert_call_for(signal, ctx, terminus: terminus, seq: seq, **expected_ctx_variables, **ctx_variables)
end

#assert_call_for(signal, ctx, terminus: :success, seq: "[]", **ctx_variables) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/trailblazer/core/utils/assertions.rb', line 30

def assert_call_for(signal, ctx, terminus: :success, seq: "[]", **ctx_variables)
  assert_equal signal.to_h[:semantic], terminus, "assert_call expected #{terminus} terminus, not #{signal}. Use assert_call(activity, terminus: #{signal.to_h[:semantic].inspect})"

  assert_equal ctx.inspect, {seq: "%%%"}.merge(ctx_variables).inspect.sub('"%%%"', seq)

  return ctx
end

#assert_circuit(schema, circuit) ⇒ Object



51
52
53
54
55
56
# File 'lib/trailblazer/core/utils/assertions.rb', line 51

def assert_circuit(schema, circuit)
  cct = Cct(schema)

  cct = cct.gsub("#<Trailblazer::Activity::TaskBuilder::Task user_proc=", "<*")
  assert_equal circuit.to_s, cct
end

#assert_invoke(activity, terminus: :success, seq: "[]", circuit_options: {}, flow_options: {}, expected_ctx_variables: {}, **ctx_variables) ⇒ Object

Use TaskWrap.invoke to call the activity.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/trailblazer/core/utils/assertions.rb', line 15

def assert_invoke(activity, terminus: :success, seq: "[]", circuit_options: {}, flow_options: {}, expected_ctx_variables: {}, **ctx_variables)
  signal, (ctx, returned_flow_options) = Activity::TaskWrap.invoke(
    activity,
    [
      {seq: [], **ctx_variables},
      flow_options,
    ],
    **circuit_options
  )

  assert_call_for(signal, ctx, terminus: terminus, seq: seq, **ctx_variables, **expected_ctx_variables) # DISCUSS: ordering of variables?

  return signal, [ctx, returned_flow_options]
end

#assert_process_for(process, *args) ⇒ Object Also known as: assert_process

Tests :circuit and :outputs fields so far.



39
40
41
42
43
44
45
46
47
# File 'lib/trailblazer/core/utils/assertions.rb', line 39

def assert_process_for(process, *args)
  semantics, circuit = args[0..-2], args[-1]

  assert_equal semantics.sort, process.to_h[:outputs].collect { |output| output[:semantic] }.sort

  assert_circuit(process, circuit)

  process
end

#Cct(activity) ⇒ Object



58
59
60
# File 'lib/trailblazer/core/utils/assertions.rb', line 58

def Cct(activity)
  Activity::Introspect::Render.(activity, inspect_task: method(:render_task))
end