Module: BrainzLab::Testing::Helpers

Defined in:
lib/brainzlab/testing/helpers.rb

Overview

Test helpers for RSpec and Minitest

Include this module in your test helper to gain access to BrainzLab testing utilities.

Examples:

RSpec configuration

RSpec.configure do |config|
  config.include BrainzLab::Testing::Helpers

  config.before(:each) do
    stub_brainzlab!
  end

  config.after(:each) do
    clear_brainzlab_events!
  end
end

Minitest configuration

class ActiveSupport::TestCase
  include BrainzLab::Testing::Helpers

  setup do
    stub_brainzlab!
  end

  teardown do
    clear_brainzlab_events!
  end
end

Instance Method Summary collapse

Instance Method Details

#brainzlab_alert_sent?(name, message: nil, severity: nil) ⇒ Boolean

Check if a specific alert was sent

Parameters:

  • name (String, Symbol)

    Alert name

  • message (String, nil) (defaults to: nil)

    Optional message to match

  • severity (Symbol, nil) (defaults to: nil)

    Optional severity to match

Returns:

  • (Boolean)


232
233
234
# File 'lib/brainzlab/testing/helpers.rb', line 232

def brainzlab_alert_sent?(name, message: nil, severity: nil)
  BrainzLab::Testing.event_store.alert_sent?(name, message: message, severity: severity)
end

#brainzlab_alertsArray<Hash>

Access all captured Signal alerts

Returns:

  • (Array<Hash>)

    Array of captured alerts



155
156
157
# File 'lib/brainzlab/testing/helpers.rb', line 155

def brainzlab_alerts
  BrainzLab::Testing.event_store.alerts
end

#brainzlab_error_captured?(error_class = nil, message: nil, context: nil) ⇒ Boolean

Check if a specific error was captured

Parameters:

  • error_class (Class, String, nil) (defaults to: nil)

    Error class to match

  • message (String, Regexp, nil) (defaults to: nil)

    Optional message to match

  • context (Hash, nil) (defaults to: nil)

    Optional context to match

Returns:

  • (Boolean)


211
212
213
# File 'lib/brainzlab/testing/helpers.rb', line 211

def brainzlab_error_captured?(error_class = nil, message: nil, context: nil)
  BrainzLab::Testing.event_store.error_captured?(error_class, message: message, context: context)
end

#brainzlab_errorsArray<Hash>

Access all captured Reflex errors

Examples:

brainzlab_errors
# => [{ exception: #<RuntimeError>, error_class: 'RuntimeError', message: 'Oops' }]

Returns:

  • (Array<Hash>)

    Array of captured errors



139
140
141
# File 'lib/brainzlab/testing/helpers.rb', line 139

def brainzlab_errors
  BrainzLab::Testing.event_store.errors
end

#brainzlab_event_tracked?(name, properties = nil) ⇒ Boolean

Check if a specific event was tracked

Examples:

brainzlab_event_tracked?('user.signup')
brainzlab_event_tracked?('user.signup', user_id: 1)

Parameters:

  • name (String, Symbol)

    Event name

  • properties (Hash, nil) (defaults to: nil)

    Optional properties to match

Returns:

  • (Boolean)


177
178
179
# File 'lib/brainzlab/testing/helpers.rb', line 177

def brainzlab_event_tracked?(name, properties = nil)
  BrainzLab::Testing.event_store.event_tracked?(name, properties)
end

#brainzlab_eventsArray<Hash>

Access all captured Flux events

Examples:

brainzlab_events
# => [{ name: 'user.signup', properties: { user_id: 1 }, timestamp: ... }]

Returns:

  • (Array<Hash>)

    Array of captured events



81
82
83
# File 'lib/brainzlab/testing/helpers.rb', line 81

def brainzlab_events
  BrainzLab::Testing.event_store.events
end

#brainzlab_events_named(name) ⇒ Array<Hash>

Access events filtered by name

Examples:

brainzlab_events_named('user.signup')
# => [{ name: 'user.signup', properties: { user_id: 1 }, timestamp: ... }]

Parameters:

  • name (String, Symbol)

    Event name to filter by

Returns:

  • (Array<Hash>)

    Matching events



94
95
96
# File 'lib/brainzlab/testing/helpers.rb', line 94

def brainzlab_events_named(name)
  BrainzLab::Testing.event_store.events_named(name)
end

#brainzlab_logged?(level, message = nil, data = nil) ⇒ Boolean

Check if a specific log message was recorded

Parameters:

  • level (Symbol)

    Log level

  • message (String, Regexp, nil) (defaults to: nil)

    Optional message to match

  • data (Hash, nil) (defaults to: nil)

    Optional data to match

Returns:

  • (Boolean)


200
201
202
# File 'lib/brainzlab/testing/helpers.rb', line 200

def brainzlab_logged?(level, message = nil, data = nil)
  BrainzLab::Testing.event_store.logged?(level, message, data)
end

#brainzlab_logsArray<Hash>

Access all captured Recall logs

Examples:

brainzlab_logs
# => [{ level: :info, message: 'User created', data: { user_id: 1 } }]

Returns:

  • (Array<Hash>)

    Array of captured log entries



118
119
120
# File 'lib/brainzlab/testing/helpers.rb', line 118

def brainzlab_logs
  BrainzLab::Testing.event_store.logs
end

#brainzlab_logs_at_level(level) ⇒ Array<Hash>

Access logs filtered by level

Parameters:

  • level (Symbol)

    Log level (:debug, :info, :warn, :error, :fatal)

Returns:

  • (Array<Hash>)

    Matching log entries



127
128
129
# File 'lib/brainzlab/testing/helpers.rb', line 127

def brainzlab_logs_at_level(level)
  BrainzLab::Testing.event_store.logs_at_level(level)
end

#brainzlab_metric_recorded?(type, name, value: nil, tags: nil) ⇒ Boolean

Check if a specific metric was recorded

Parameters:

  • type (Symbol)

    Metric type (:gauge, :increment, :distribution, etc.)

  • name (String, Symbol)

    Metric name

  • value (Numeric, nil) (defaults to: nil)

    Optional value to match

  • tags (Hash, nil) (defaults to: nil)

    Optional tags to match

Returns:

  • (Boolean)


189
190
191
# File 'lib/brainzlab/testing/helpers.rb', line 189

def brainzlab_metric_recorded?(type, name, value: nil, tags: nil)
  BrainzLab::Testing.event_store.metric_recorded?(type, name, value: value, tags: tags)
end

#brainzlab_metricsArray<Hash>

Access all captured Flux metrics

Examples:

brainzlab_metrics
# => [{ type: :increment, name: 'orders.count', value: 1, tags: {} }]

Returns:

  • (Array<Hash>)

    Array of captured metrics



106
107
108
# File 'lib/brainzlab/testing/helpers.rb', line 106

def brainzlab_metrics
  BrainzLab::Testing.event_store.metrics
end

#brainzlab_notificationsArray<Hash>

Access all captured Signal notifications

Returns:

  • (Array<Hash>)

    Array of captured notifications



163
164
165
# File 'lib/brainzlab/testing/helpers.rb', line 163

def brainzlab_notifications
  BrainzLab::Testing.event_store.notifications
end

#brainzlab_trace_recorded?(name, opts = nil) ⇒ Boolean

Check if a specific trace was recorded

Parameters:

  • name (String, Symbol)

    Trace name

  • opts (Hash, nil) (defaults to: nil)

    Optional options to match

Returns:

  • (Boolean)


221
222
223
# File 'lib/brainzlab/testing/helpers.rb', line 221

def brainzlab_trace_recorded?(name, opts = nil)
  BrainzLab::Testing.event_store.trace_recorded?(name, opts)
end

#brainzlab_tracesArray<Hash>

Access all captured Pulse traces

Returns:

  • (Array<Hash>)

    Array of captured traces



147
148
149
# File 'lib/brainzlab/testing/helpers.rb', line 147

def brainzlab_traces
  BrainzLab::Testing.event_store.traces
end

#clear_brainzlab_events!Object

Clear all captured events, logs, errors, and metrics

Call this in your test teardown or between test scenarios to ensure a clean slate.

Examples:

after(:each) do
  clear_brainzlab_events!
end


69
70
71
# File 'lib/brainzlab/testing/helpers.rb', line 69

def clear_brainzlab_events!
  BrainzLab::Testing.event_store.clear!
end

#expect_brainzlab_alert(name) ⇒ AlertExpectation

Create an alert expectation builder for fluent assertions

Examples:

RSpec usage

expect_brainzlab_alert('high_error_rate').with_severity(:critical)

Parameters:

  • name (String, Symbol)

    Alert name to expect

Returns:



322
323
324
# File 'lib/brainzlab/testing/helpers.rb', line 322

def expect_brainzlab_alert(name)
  AlertExpectation.new(name, BrainzLab::Testing.event_store)
end

#expect_brainzlab_error(error_class) ⇒ ErrorExpectation

Create an error expectation builder for fluent assertions

Examples:

RSpec usage

expect_brainzlab_error(RuntimeError).with_message(/something went wrong/i)

Parameters:

  • error_class (Class, String)

    Error class to expect

Returns:



273
274
275
# File 'lib/brainzlab/testing/helpers.rb', line 273

def expect_brainzlab_error(error_class)
  ErrorExpectation.new(error_class, BrainzLab::Testing.event_store)
end

#expect_brainzlab_event(name) ⇒ EventExpectation

Create an event expectation builder for fluent assertions

Examples:

RSpec usage

expect_brainzlab_event('user.signup').with(user_id: 1)
expect_brainzlab_event('order.completed').with(order_id: 42, total: 99.99)

Parameters:

  • name (String, Symbol)

    Event name to expect

Returns:



261
262
263
# File 'lib/brainzlab/testing/helpers.rb', line 261

def expect_brainzlab_event(name)
  EventExpectation.new(name, BrainzLab::Testing.event_store)
end

#expect_brainzlab_log(level) ⇒ LogExpectation

Create a log expectation builder for fluent assertions

Examples:

RSpec usage

expect_brainzlab_log(:info).with_message('User created')

Parameters:

  • level (Symbol)

    Log level to expect

Returns:



285
286
287
# File 'lib/brainzlab/testing/helpers.rb', line 285

def expect_brainzlab_log(level)
  LogExpectation.new(level, BrainzLab::Testing.event_store)
end

#expect_brainzlab_metric(type, name) ⇒ MetricExpectation

Create a metric expectation builder for fluent assertions

Examples:

RSpec usage

expect_brainzlab_metric(:increment, 'orders.count').with_value(1)

Parameters:

  • type (Symbol)

    Metric type (:gauge, :increment, :distribution, etc.)

  • name (String, Symbol)

    Metric name

Returns:



298
299
300
# File 'lib/brainzlab/testing/helpers.rb', line 298

def expect_brainzlab_metric(type, name)
  MetricExpectation.new(type, name, BrainzLab::Testing.event_store)
end

#expect_brainzlab_trace(name) ⇒ TraceExpectation

Create a trace expectation builder for fluent assertions

Examples:

RSpec usage

expect_brainzlab_trace('db.query')

Parameters:

  • name (String, Symbol)

    Trace name to expect

Returns:



310
311
312
# File 'lib/brainzlab/testing/helpers.rb', line 310

def expect_brainzlab_trace(name)
  TraceExpectation.new(name, BrainzLab::Testing.event_store)
end

#last_brainzlab_errorHash?

Get the last captured error

Returns:

  • (Hash, nil)

    The last error or nil



248
249
250
# File 'lib/brainzlab/testing/helpers.rb', line 248

def last_brainzlab_error
  BrainzLab::Testing.event_store.last_error
end

#last_brainzlab_eventHash?

Get the last captured event

Returns:

  • (Hash, nil)

    The last event or nil



240
241
242
# File 'lib/brainzlab/testing/helpers.rb', line 240

def last_brainzlab_event
  BrainzLab::Testing.event_store.last_event
end

#stub_brainzlab!Object

Stub all BrainzLab SDK calls to prevent real API requests and enable event capturing for assertions.

Examples:

it 'tracks user signup' do
  stub_brainzlab!
  UserService.new.register(email: 'test@example.com')
  expect(brainzlab_events).to include(hash_including(name: 'user.signup'))
end


47
48
49
# File 'lib/brainzlab/testing/helpers.rb', line 47

def stub_brainzlab!
  BrainzLab::Testing.enable!
end

#unstub_brainzlab!Object

Note:

This is typically called automatically if you’re using clear_brainzlab_events! in your teardown, which also restores state.

Restore original BrainzLab SDK behavior



55
56
57
# File 'lib/brainzlab/testing/helpers.rb', line 55

def unstub_brainzlab!
  BrainzLab::Testing.disable!
end