Module: SolidObjects::TestHelper

Defined in:
lib/solid_objects/test_helper.rb,
sig/generated/lib/solid_objects/test_helper.rbs

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(test_case) ⇒ void

This method returns an undefined value.

RBS:

  • (Class) -> void

Parameters:

  • (Class)


9
10
11
12
13
# File 'lib/solid_objects/test_helper.rb', line 9

def included(test_case)
  test_case.use_transactional_tests = false if test_case.respond_to?(:use_transactional_tests=)
  test_case.setup { reset_actors! }
  test_case.teardown { reset_actors! }
end

.reset_actors!void

This method returns an undefined value.

RBS:

  • () -> void



16
17
18
19
20
# File 'lib/solid_objects/test_helper.rb', line 16

def reset_actors!
  SolidObjects.reset_caller_process!
  Instance.delete_all
  Process.delete_all
end

Instance Method Details

#build_solid_objects_runners(roles) ⇒ Array[Worker | EffectExecutor | ReminderScheduler | BroadcastExecutor]

RBS:

  • (Array[Symbol]) -> Array[Worker | EffectExecutor | ReminderScheduler | BroadcastExecutor]

Parameters:

  • (Array[Symbol])

Returns:



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/solid_objects/test_helper.rb', line 51

def build_solid_objects_runners(roles)
  unknown_roles = roles - [ :actors, :effects, :reminders, :broadcasts ]
  raise ArgumentError, "unknown Solid Objects test roles: #{unknown_roles.join(", ")}" if unknown_roles.any?

  runners = {}
  runners[:actors] = Worker.new if roles.include?(:actors)
  runners[:effects] = EffectExecutor.new if roles.include?(:effects)
  runners[:reminders] = ReminderScheduler.new if roles.include?(:reminders)
  runners[:broadcasts] = BroadcastExecutor.new if roles.include?(:broadcasts)

  [
    runners[:reminders],
    runners[:actors],
    runners[:effects],
    runners[:actors],
    runners[:broadcasts]
  ].compact
end

#drain_solid_objects(roles: [ :reminders, :actors, :effects, :broadcasts ], max_passes: 1_000) ⇒ Integer

RBS:

  • (?roles: Array[Symbol], ?max_passes: Integer) -> Integer

Parameters:

  • roles: (Array[Symbol]) (defaults to: [ :reminders, :actors, :effects, :broadcasts ])
  • max_passes: (Integer) (defaults to: 1_000)

Returns:

  • (Integer)


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/solid_objects/test_helper.rb', line 29

def drain_solid_objects(
  roles: [ :reminders, :actors, :effects, :broadcasts ],
  max_passes: 1_000
)
  runners = build_solid_objects_runners(roles)
  total = 0

  max_passes.times do
    processed = runners.sum { |runner| solid_objects_runner_result(runner) }
    break if processed.zero?

    total += processed
  end

  total
ensure
  runners&.uniq&.each(&:stop)
end

#reset_actors!void

This method returns an undefined value.

RBS:

  • () -> void



24
25
26
# File 'lib/solid_objects/test_helper.rb', line 24

def reset_actors!
  TestHelper.reset_actors!
end

#solid_objects_runner_result(runner) ⇒ Integer

RBS:

  • (Worker | EffectExecutor | ReminderScheduler | BroadcastExecutor) -> Integer

Parameters:

Returns:

  • (Integer)


71
72
73
74
75
76
# File 'lib/solid_objects/test_helper.rb', line 71

def solid_objects_runner_result(runner)
  result = runner.run_once
  return result if result.is_a?(Integer)

  result ? 1 : 0
end