Module: Inferno::DSL::Runnable

Included in:
Entities::TestGroup, Entities::TestSuite
Defined in:
lib/inferno/dsl/runnable.rb

Overview

This module contains the DSL for defining child entities in the test definition framework.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#parentObject

Returns the value of attribute parent.



11
12
13
# File 'lib/inferno/dsl/runnable.rb', line 11

def parent
  @parent
end

#suite_option_requirementsObject (readonly)

Returns the value of attribute suite_option_requirements.



12
13
14
# File 'lib/inferno/dsl/runnable.rb', line 12

def suite_option_requirements
  @suite_option_requirements
end

Instance Method Details

#description(new_description = nil) ⇒ String

Set/Get a runnable’s description

Parameters:

  • new_description (String) (defaults to: nil)

Returns:

  • (String)

    the description



241
242
243
244
245
# File 'lib/inferno/dsl/runnable.rb', line 241

def description(new_description = nil)
  return @description if new_description.nil?

  @description = format_markdown(new_description)
end

#id(new_id = nil) ⇒ String, Symbol

Set/Get a runnable’s id

Parameters:

  • new_id (String, Symbol) (defaults to: nil)

Returns:

  • (String, Symbol)

    the id



202
203
204
205
206
207
208
209
210
211
212
213
214
215
# File 'lib/inferno/dsl/runnable.rb', line 202

def id(new_id = nil)
  return @id if new_id.nil? && @id.present?

  prefix =
    if parent
      "#{parent.id}-"
    else
      ''
    end

  @base_id = new_id || @base_id || default_id

  @id = "#{prefix}#{@base_id}"
end

#input_instructions(new_input_instructions = nil) ⇒ String

Set/Get a runnable’s input instructions

Parameters:

  • new_input_instructions (String) (defaults to: nil)

Returns:

  • (String)

    the input instructions



261
262
263
264
265
# File 'lib/inferno/dsl/runnable.rb', line 261

def input_instructions(new_input_instructions = nil)
  return @input_instructions if new_input_instructions.nil?

  @input_instructions = format_markdown(new_input_instructions)
end

#inspectObject



439
440
441
442
443
444
445
446
447
# File 'lib/inferno/dsl/runnable.rb', line 439

def inspect
  non_dynamic_ancestor = ancestors.find { |ancestor| !ancestor.to_s.start_with? '#' }
  "#<#{non_dynamic_ancestor}".tap do |inspect_string|
    inspect_string.concat(" @id=#{id.inspect},")
    inspect_string.concat(" @short_id=#{short_id.inspect},") if respond_to? :short_id
    inspect_string.concat(" @title=#{title.inspect}")
    inspect_string.concat('>')
  end
end

#optional(optional = true) ⇒ void

This method returns an undefined value.

Mark as optional. Tests are required by default.

Parameters:

  • optional (Boolean) (defaults to: true)


272
273
274
# File 'lib/inferno/dsl/runnable.rb', line 272

def optional(optional = true) # rubocop:disable Style/OptionalBooleanParameter
  @optional = optional
end

#optional?Boolean

The test or group is optional if true

Returns:

  • (Boolean)


290
291
292
# File 'lib/inferno/dsl/runnable.rb', line 290

def optional?
  !!@optional
end

#required(required = true) ⇒ void

This method returns an undefined value.

Mark as required

Tests are required by default. This method is provided to make an existing optional test required.

Parameters:

  • required (Boolean) (defaults to: true)


283
284
285
# File 'lib/inferno/dsl/runnable.rb', line 283

def required(required = true) # rubocop:disable Style/OptionalBooleanParameter
  @optional = !required
end

#required?Boolean

The test or group is required if true

Returns:

  • (Boolean)


297
298
299
# File 'lib/inferno/dsl/runnable.rb', line 297

def required?
  !optional?
end

#required_suite_options(suite_option_requirements) ⇒ Object

Set/get suite options required for this runnable to be executed.

Examples:

suite_option :ig_version,
            list_options: [
              {
                label: 'IG v1',
                value: 'ig_v1'
              },
              {
                label: 'IG v2',
                value: 'ig_v2'
              }
            ]

group from: :ig_v1_group,
      required_suite_options: { ig_version: 'ig_v1' }

group from: :ig_v2_group do
  required_suite_options ig_version: 'ig_v2'
end

Parameters:

  • suite_option_requirements (Hash)


417
418
419
420
421
422
# File 'lib/inferno/dsl/runnable.rb', line 417

def required_suite_options(suite_option_requirements)
  @suite_option_requirements =
    suite_option_requirements.map do |key, value|
      DSL::SuiteOption.new(id: key, value:)
    end
end

#resume_test_route(method, path) { ... } ⇒ Object

Create a route which will resume a test run when a request is received

Examples:

resume_test_route :get, '/launch' do
  request.query_parameters['iss']
end

test do
  input :issuer
  receives_request :launch

  run do
    wait(
      identifier: issuer,
      message: "Wating to receive a request with an issuer of #{issuer}"
    )
  end
end

Parameters:

  • method (Symbol)

    the HTTP request type (:get, :post, etc.) for the incoming request

  • path (String)

    the path for this request. The route will be served with a prefix of /custom/TEST_SUITE_ID to prevent path conflicts. Any of the path options available in Hanami Router can be used here.

Yields:

  • This method takes a block which must return the identifier defined when a test was set to wait for the test run that hit this route. The block has access to the request method which returns a Entities::Request object with the information for the incoming request.

See Also:



350
351
352
353
354
355
356
# File 'lib/inferno/dsl/runnable.rb', line 350

def resume_test_route(method, path, &block)
  route_class = Class.new(ResumeTestRoute) do |klass|
    klass.singleton_class.instance_variable_set(:@test_run_identifier_block, block)
  end

  route(method, path, route_class)
end

#route(method, path, handler) ⇒ Object

Create a route to handle a request

Parameters:

  • method (Symbol)

    the HTTP request type (:get, :post, etc.) for the incoming request. :all will accept all HTTP request types.

  • path (String)

    the path for this request. The route will be served with a prefix of /custom/TEST_SUITE_ID to prevent path conflicts. Any of the path options available in Hanami Router can be used here.

  • handler (#call)

    the route handler. This can be any Rack compatible object (e.g. a Proc object, a Sinatra app) as described in the Hanami Router documentation.



371
372
373
# File 'lib/inferno/dsl/runnable.rb', line 371

def route(method, path, handler)
  Inferno.routes << { method:, path:, handler:, suite: }
end

#short_description(new_short_description = nil) ⇒ String

Set/Get a runnable’s short one-sentence description

Parameters:

  • new_short_description (String) (defaults to: nil)

Returns:

  • (String)

    the one-sentence description



251
252
253
254
255
# File 'lib/inferno/dsl/runnable.rb', line 251

def short_description(new_short_description = nil)
  return @short_description if new_short_description.nil?

  @short_description = format_markdown(new_short_description)
end

#short_title(new_short_title = nil) ⇒ String

Set/Get a runnable’s short title

Parameters:

  • new_short_title (String) (defaults to: nil)

Returns:

  • (String)

    the short title



231
232
233
234
235
# File 'lib/inferno/dsl/runnable.rb', line 231

def short_title(new_short_title = nil)
  return @short_title if new_short_title.nil?

  @short_title = new_short_title
end

#title(new_title = nil) ⇒ String

Set/Get a runnable’s title

Parameters:

  • new_title (String) (defaults to: nil)

Returns:

  • (String)

    the title



221
222
223
224
225
# File 'lib/inferno/dsl/runnable.rb', line 221

def title(new_title = nil)
  return @title if new_title.nil?

  @title = new_title
end