Class: Crucible::Tests::BaseSuite

Inherits:
BaseTest
  • Object
show all
Defined in:
lib/tests/suites/base_suite.rb

Constant Summary

Constants inherited from BaseTest

Crucible::Tests::BaseTest::BASE_SPEC_LINK, Crucible::Tests::BaseTest::JSON_FIELDS, Crucible::Tests::BaseTest::METADATA_FIELDS, Crucible::Tests::BaseTest::REST_SPEC_LINK, Crucible::Tests::BaseTest::STATUS

Instance Attribute Summary

Attributes inherited from BaseTest

#category, #tags, #tests_subset

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseTest

#author, #description, #details, #execute, #execute_test_method, #execute_test_methods, #id, #initialize, #multiserver, #requires_authorization, #tests, #warning

Methods included from Assertions

#assert, #assert_bundle_entry_count, #assert_bundle_response, #assert_bundle_transactions_okay, #assert_equal, #assert_etag_present, #assert_last_modified_present, #assert_minimum, #assert_navigation_links, #assert_operator, #assert_resource_content_type, #assert_resource_type, #assert_response_bad, #assert_response_code, #assert_response_created, #assert_response_gone, #assert_response_not_found, #assert_response_ok, #assert_valid_content_location_present, #assert_valid_profile, #assert_valid_resource_content_type_present, #assertion_negated, #skip

Constructor Details

This class inherits a constructor from Crucible::Tests::BaseTest

Class Method Details

.test(key, desc, &block) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/tests/suites/base_suite.rb', line 63

def self.test(key, desc, &block)
  test_method = "#{key} #{desc} test".downcase.tr(' ', '_').to_sym
  contents = block
  wrapped = -> () do
    @warnings, @links, @requires, @validates = [],[],[],[]
    description = nil
    if respond_to? :supplement_test_description
      description = supplement_test_description(desc)
    else
      description = desc
    end
    result = TestResult.new(key, description, STATUS[:pass], '','')
    begin
      t = instance_eval &block
      result.update(t.status, t.message, t.data) if !t.nil? && t.is_a?(Crucible::Tests::TestResult)
    rescue AssertionException => e
      result.update(STATUS[:fail], e.message, e.data)
    rescue SkipException => e
      result.update(STATUS[:skip], "Skipped: #{test_method}", '')
    rescue => e
      result.update(STATUS[:error], "Fatal Error: #{e.message}", e.backtrace.join("\n"))
    end
    result.update(STATUS[:skip], "Skipped because setup failed.", "-") if @setup_failed
    result.warnings = @warnings unless @warnings.empty?
    result.requires = @requires unless @requires.empty?
    result.validates = @validates unless @validates.empty?
    result.links = @links unless @links.empty?
    result.id = key
    result.code = contents.source
    result.id = "#{result.id}_#{result_id_suffix}" if respond_to? :result_id_suffix # add the resource to resource based tests to make ids unique

    result
  end
  define_method test_method, wrapped
end

Instance Method Details

#build_messages(operation_outcome) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/tests/suites/base_suite.rb', line 21

def build_messages(operation_outcome)
  messages = []
  if !operation_outcome.nil? and !operation_outcome.issue.nil?
    operation_outcome.issue.each {|issue| messages << "#{issue.severity}: #{issue.code}: #{issue.details.try(:text) || issue.diagnostics}" }
  end
  messages
end

#collect_metadata(methods_only = false) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/tests/suites/base_suite.rb', line 45

def (methods_only=false)
  @metadata_only = true
  if @resource_class
    result = execute(@resource_class)
  else
    result = execute
  end
  result = result.values.first if methods_only
  @metadata_only = false
  result
end

#fhir_resourcesObject



29
30
31
# File 'lib/tests/suites/base_suite.rb', line 29

def fhir_resources
  Mongoid.models.select {|c| c.name.include?('FHIR') && !c.included_modules.find_index(FHIR::Resource).nil?}
end


41
42
43
# File 'lib/tests/suites/base_suite.rb', line 41

def links(url)
  @links << url
end

#metadata(&block) ⇒ Object



57
58
59
60
61
# File 'lib/tests/suites/base_suite.rb', line 57

def (&block)
  yield
  skip if @setup_failed
  skip if @metadata_only
end

#parse_operation_outcome(body) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/tests/suites/base_suite.rb', line 9

def parse_operation_outcome(body)
  # body should be a String
  outcome = nil
  begin
    outcome = FHIR::Resource.from_contents(body)
    outcome = nil if outcome.class!=FHIR::OperationOutcome
  rescue
    outcome = nil
  end
  outcome
end

#requires(hash) ⇒ Object



33
34
35
# File 'lib/tests/suites/base_suite.rb', line 33

def requires(hash)
  @requires << hash
end

#resource_category(resource) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/tests/suites/base_suite.rb', line 99

def resource_category(resource)
  unless @resource_category
    @categories_by_resource = {}
    fhir_structure = Crucible::FHIRStructure.get
    categories = fhir_structure['children'].select {|n| n['name'] == 'RESOURCES'}.first['children']
    pull_children = lambda {|n, chain| n['children'].nil? ? n['name'] : n['children'].map {|child| chain.call(child, chain)}}
    categories.each do |category|
      pull_children.call(category, pull_children).flatten.each do |resource_name|
        @categories_by_resource[resource_name] = category['name']
      end
    end
  end
  @categories_by_resource[resource.underscore.humanize.downcase] || 'Uncategorized'
end

#titleObject



5
6
7
# File 'lib/tests/suites/base_suite.rb', line 5

def title
  self.class.name.demodulize
end

#validates(hash) ⇒ Object



37
38
39
# File 'lib/tests/suites/base_suite.rb', line 37

def validates(hash)
  @validates << hash
end