Top Level Namespace

Defined Under Namespace

Modules: Datum

Instance Method Summary collapse

Instance Method Details

#__clone(resource, override_hash = nil) ⇒ Hash

From a scenario file, clones the attributes of an existing instance and overrides as specified.

Examples:

Using __clone

# test/datum/scenarios/simpsons_scenario.rb
# any code included in this file gets loaded when calling process_scenario
@homer = Person.create(first_name: "Homer", last_name: "Simpson")
@marge = Person.create(__clone(@homer, {first_name: "Marge"}))

Parameters:

  • resource (ActiveRecord::Base)

    An ActiveRecord Model instance

  • override_hash (Hash) (defaults to: nil)

    Hash of attributes / values to override from

Returns:

  • (Hash)

    Hash of attributes from provided resource



40
41
42
# File 'lib/support/scenario.rb', line 40

def __clone resource, override_hash = nil
  ::Datum::Helpers.clone_resource resource, override_hash
end

#__import(scenario_name) ⇒ void

This method returns an undefined value.

From a scenario file, imports an existing scenario’s code into the current Binding context of the current scenario.

Examples:

Using __import

# test/datum/scenarios/springfield_police_scenario.rb
@clancy = Person.create(first_name: "Clancy", last_name: "Wiggum")
@eddie = Person.create(first_name: "Eddie", last_name: "Police-Officer")

# test/datum/scenarios/extended_simpsons_scenario.rb
@homer = Person.create(first_name: "Homer", last_name: "Simpson")
@marge = Person.create(__clone(@homer, {first_name: "Marge"}))
@bart = Person.create(__clone(@homer, {first_name: "Marge"}))

__import :springfield_police_scenario # will give us clancy, eddie

# Using @eddie from imported :springfield_police_scenario to
# define @lou's last_name
@lou = Person.create first_name: "Lou", last_name: @eddie.last_name

Parameters:

  • scenario_name (Symbol, String)

    The name of a scenario file



23
24
25
# File 'lib/support/scenario.rb', line 23

def __import scenario_name
  ::Datum::Helpers.import_file scenario_name, ::Datum.scenario_path, binding
end

#data_test(name, &block) ⇒ void

This method returns an undefined value.

Defines a test to work in conjuction with Datum struct extensions found in a file with the same name in the test/datum/data directory

Examples:

Defining a data_test

# test/datum/data/simple_person_data.rb

# first, define a sub-class of Datum to use in your test
PersonData = Datum.new(:first_name, :last_name, :name, :short_name)

# next, use your sub-class to create datasets which will be accessible to
# your data_test as @datum
#
# your data can be generated, etc... here, we're keeping it simple
homer = PersonData.new("Homer", "Simpson", "Homer Simpson", "Homer S.")
marge = PersonData.new("Marge", homer.last_name,
  "Marge #{homer.last_name}", "Marge S.")

# test/datum/scenarios/simpsons_scenario.rb

@homer = Person.create(first_name: "Homer", last_name: "Simpson")
@marge = Person.create(__clone(@homer, {first_name: "Marge"}))

# test/models/person_test.rb
require 'test_helper'
class PersonTest < ActiveSupport::TestCase

  # this data method will be called once for each Datum defined in
  # test/datum/data/simple_person_data.rb
  #
  # each time this method is called @datum will reference the current
  # dataset
  data_test "simple_person_data" do
    process_scenario :simpsons_scenario
    person = self.instance_variable_get("@#{@datum.first_name.downcase}")
    assert_equal @datum.first_name, person.first_name
    assert_equal @datum.last_name, person.last_name
    assert_equal @datum.name, person.name
    assert_equal @datum.short_name, person.short_name
  end
end

Parameters:

  • name (String)

    Name of the file in the datum/data directory

  • block (Block)

    A block of Ruby code



76
77
78
79
80
# File 'lib/support/test.rb', line 76

def data_test name, &block
  ::Datum::Container.new(name, self)
  self.send(:define_method, name, &block)
  self.class_eval(::Datum::Helpers.read_file(name, ::Datum.data_path))
end