Class: Sidekiq::Sorbet::RSpec::Matchers::HaveArgs

Inherits:
Object
  • Object
show all
Defined in:
lib/sidekiq/sorbet/rspec/matchers.rb

Overview

Matcher for validating multiple arguments at once

Examples:

expect(MyWorker).to have_args(user_id: Integer, name: String)
expect(MyWorker).to have_args(:user_id, Integer).and_arg(:name, String)

Instance Method Summary collapse

Constructor Details

#initialize(args_hash_or_field = nil, expected_type = nil) ⇒ HaveArgs

Returns a new instance of HaveArgs.



125
126
127
128
129
130
131
132
133
134
135
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 125

def initialize(args_hash_or_field = nil, expected_type = nil)
  @args_to_check = []

  if args_hash_or_field.is_a?(Hash)
    args_hash_or_field.each do |field_name, type|
      @args_to_check << [field_name, type]
    end
  elsif args_hash_or_field.is_a?(Symbol)
    @args_to_check << [args_hash_or_field, expected_type]
  end
end

Instance Method Details

#and_arg(field_name, expected_type) ⇒ HaveArgs

Chain to add additional argument checks

Parameters:

  • field_name (Symbol)

    The argument name

  • expected_type (Class)

    The expected type

Returns:



142
143
144
145
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 142

def and_arg(field_name, expected_type)
  @args_to_check << [field_name, expected_type]
  self
end

#descriptionObject



169
170
171
172
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 169

def description
  args_desc = @args_to_check.map { |name, type| "#{name}: #{type}" }.join(", ")
  "have arguments: #{args_desc}"
end

#failure_messageObject



161
162
163
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 161

def failure_message
  @failure_message || "expected #{@actual} to have the specified arguments"
end

#failure_message_when_negatedObject



165
166
167
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 165

def failure_message_when_negated
  "expected #{@actual}::Args not to have the specified arguments"
end

#matches?(worker_class) ⇒ Boolean

Returns:

  • (Boolean)


147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 147

def matches?(worker_class)
  @actual = worker_class

  @args_to_check.each do |field_name, expected_type|
    matcher = HaveArg.new(field_name, expected_type)
    unless matcher.matches?(worker_class)
      @failure_message = matcher.failure_message
      return false
    end
  end

  true
end