Module: Pgbus::Testing

Defined in:
lib/pgbus/testing.rb,
lib/pgbus/testing/minitest.rb,
lib/pgbus/testing/assertions.rb

Overview

Test helpers for Pgbus EventBus. Opt-in via explicit require — never autoloaded by Zeitwerk so this code never leaks into production.

require "pgbus/testing"          # core only
require "pgbus/testing/rspec"    # RSpec matchers + auto-config
require "pgbus/testing/minitest" # Minitest assertions

Three modes:

:fake     — capture published events in an in-memory store (default for tests)
:inline   — capture AND immediately dispatch to matching handlers
:disabled — pass through to the real publisher (production behavior)

Defined Under Namespace

Modules: Assertions, MinitestHelpers Classes: EventStore

Constant Summary collapse

MODES =
%i[fake inline disabled].freeze
MODE_KEY =
:__pgbus_test_mode

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.storeObject (readonly)

Returns the value of attribute store.



101
102
103
# File 'lib/pgbus/testing.rb', line 101

def store
  @store
end

Class Method Details

.disabled!Object



95
# File 'lib/pgbus/testing.rb', line 95

def disabled!(&) = mode!(:disabled, &)

.disabled?Boolean

Returns:

  • (Boolean)


99
# File 'lib/pgbus/testing.rb', line 99

def disabled? = mode == :disabled

.fake!Object



93
# File 'lib/pgbus/testing.rb', line 93

def fake!(&) = mode!(:fake, &)

.fake?Boolean

Returns:

  • (Boolean)


97
# File 'lib/pgbus/testing.rb', line 97

def fake?     = mode == :fake

.inline!Object



94
# File 'lib/pgbus/testing.rb', line 94

def inline!(&) = mode!(:inline, &)

.inline?Boolean

Returns:

  • (Boolean)


98
# File 'lib/pgbus/testing.rb', line 98

def inline?   = mode == :inline

.modeObject



89
90
91
# File 'lib/pgbus/testing.rb', line 89

def mode
  Thread.current[MODE_KEY] || Thread.main[MODE_KEY] || :disabled
end

.mode!(mode, &block) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/pgbus/testing.rb', line 69

def mode!(mode, &block)
  raise ArgumentError, "Unknown mode: #{mode}. Valid modes: #{MODES.join(", ")}" unless MODES.include?(mode)

  sync_streams_test_mode!(mode)

  unless block
    Thread.main[MODE_KEY] = mode
    return
  end

  old = Thread.current[MODE_KEY]
  Thread.current[MODE_KEY] = mode
  yield
ensure
  if block
    Thread.current[MODE_KEY] = old
    sync_streams_test_mode!(old || :disabled)
  end
end