Class: Rimless::RSpec::Matchers::HaveSentKafkaMessage

Inherits:
RSpec::Matchers::BuiltIn::BaseMatcher
  • Object
show all
Includes:
RSpec::Mocks::ExampleMethods
Defined in:
lib/rimless/rspec/matchers.rb

Overview

The Apache Kafka message expectation.

rubocop:disable Metrics/ClassLength because its almost RSpec API code

Instance Method Summary collapse

Constructor Details

#initialize(schema) ⇒ HaveSentKafkaMessage

Instantiate a new expectation object.

Parameters:

  • schema (String, Symbol, nil)

    the expected message schema



18
19
20
21
22
23
24
# File 'lib/rimless/rspec/matchers.rb', line 18

def initialize(schema)
  @schema = schema
  @args = {}
  @data = {}
  @messages = []
  set_expected_number(:exactly, 1)
end

Instance Method Details

#at_least(count) ⇒ HaveSentKafkaMessage

Set the expected amount of message (at least).

Parameters:

  • count (Integer)

    the expected amount

Returns:



68
69
70
71
# File 'lib/rimless/rspec/matchers.rb', line 68

def at_least(count)
  set_expected_number(:at_least, count)
  self
end

#at_most(count) ⇒ HaveSentKafkaMessage

Set the expected amount of message (at most).

Parameters:

  • count (Integer)

    the expected amount

Returns:



77
78
79
80
# File 'lib/rimless/rspec/matchers.rb', line 77

def at_most(count)
  set_expected_number(:at_most, count)
  self
end

#capture { ... } ⇒ Array<Hash{Symbol => Mixed}>

Capture all Apache Kafka messages of the given block.

Yields:

  • the given block to capture the messages

Returns:

  • (Array<Hash{Symbol => Mixed}>)

    the captured messages



30
31
32
33
# File 'lib/rimless/rspec/matchers.rb', line 30

def capture(&block)
  matches?(block)
  @messages
end

#does_not_match?(proc) ⇒ Boolean

The actual RSpec API check for the expectation (negative).

Parameters:

  • proc (Proc)

    the block to evaluate

Returns:

  • (Boolean)

    whenever the check was unsuccessful or not



137
138
139
140
141
# File 'lib/rimless/rspec/matchers.rb', line 137

def does_not_match?(proc)
  set_expected_number(:at_least, 1)

  !matches?(proc)
end

#exactly(count) ⇒ HaveSentKafkaMessage

Set the expected amount of message (exactly).

Parameters:

  • count (Integer)

    the expected amount

Returns:



59
60
61
62
# File 'lib/rimless/rspec/matchers.rb', line 59

def exactly(count)
  set_expected_number(:exactly, count)
  self
end

#matches?(proc) ⇒ Boolean

The actual RSpec API check for the expectation.

Parameters:

  • proc (Proc)

    the block to evaluate

Returns:

  • (Boolean)

    whenever the check was successful or not



121
122
123
124
125
126
127
128
129
130
131
# File 'lib/rimless/rspec/matchers.rb', line 121

def matches?(proc)
  unless proc.is_a? Proc
    raise ArgumentError, 'have_sent_kafka_message and ' \
                         'sent_kafka_message only support block ' \
                         'expectations'
  end

  listen_to_messages
  proc.call
  check
end

#onceHaveSentKafkaMessage

Just syntactic sugar for a regular exactly(:once) call.

Returns:



92
93
94
# File 'lib/rimless/rspec/matchers.rb', line 92

def once
  exactly(:once)
end

#supports_block_expectations?Boolean

Serve the RSpec matcher API and signalize we support block evaluation.

Returns:

  • (Boolean)

    the answer



113
114
115
# File 'lib/rimless/rspec/matchers.rb', line 113

def supports_block_expectations?
  true
end

#thriceHaveSentKafkaMessage

Just syntactic sugar for a regular exactly(:thrice) call.

Returns:



106
107
108
# File 'lib/rimless/rspec/matchers.rb', line 106

def thrice
  exactly(:thrice)
end

#timesHaveSentKafkaMessage

Just syntactic sugar.

Returns:



85
86
87
# File 'lib/rimless/rspec/matchers.rb', line 85

def times
  self
end

#twiceHaveSentKafkaMessage

Just syntactic sugar for a regular exactly(:twice) call.

Returns:



99
100
101
# File 'lib/rimless/rspec/matchers.rb', line 99

def twice
  exactly(:twice)
end

#with(**args) ⇒ HaveSentKafkaMessage

Collect the expectation arguments for the Kafka message passing. (eg. topic)

Parameters:

  • args (Hash{Symbol => Mixed})

    the expected arguments

Returns:



40
41
42
43
# File 'lib/rimless/rspec/matchers.rb', line 40

def with(**args)
  @args = args
  self
end

#with_data(**args) ⇒ HaveSentKafkaMessage

Collect the expectations for the encoded message. The passed message will be decoded accordingly for the check.

Parameters:

  • args (Hash{Symbol => Mixed})

    the expected arguments

Returns:



50
51
52
53
# File 'lib/rimless/rspec/matchers.rb', line 50

def with_data(**args)
  @data = args
  self
end