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, StreamerLeakError

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.



109
110
111
# File 'lib/pgbus/testing.rb', line 109

def store
  @store
end

Class Method Details

.disabled!Object



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

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

.disabled?Boolean

Returns:

  • (Boolean)


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

def disabled? = mode == :disabled

.fake!Object



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

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

.fake?Boolean

Returns:

  • (Boolean)


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

def fake?     = mode == :fake

.inline!Object



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

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

.inline?Boolean

Returns:

  • (Boolean)


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

def inline?   = mode == :inline

.modeObject



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

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

.mode!(mode, &block) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/pgbus/testing.rb', line 75

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

  # Record the mode BEFORE syncing streams: a StreamerLeakError raised
  # by the teardown must still leave the process in the requested mode.
  unless block
    Thread.main[MODE_KEY] = mode
    sync_streams_test_mode!(mode)
    return
  end

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