class SchemaTest::TestHelper

Public Instance Methods

assert_api_schema(name, version:, structure: nil) click to toggle source
# File lib/schema_test/test_helper.rb, line 3
def assert_api_schema(name, version:, structure: nil)
  install_asset_api_expansion_hook

  definition = ApiSchema::Definition.find(name, version)
  raise "Unknown definition #{name}, version: #{version}" unless definition.present?

  expected_structure = definition.as_structure

  if structure != expected_structure
    if ENV['CI']
      flunk "Outdated API schema assertion at #{caller[0]}"
    else
      queue_write_expanded_assert_api_call(caller[0], __method__, name, version, expected_structure)
    end
  end

  assert_json_response_structure(*expected_structure)
end

Private Instance Methods

expand_assert_api_calls() click to toggle source
# File lib/schema_test/test_helper.rb, line 41
def expand_assert_api_calls
  @@__api_schema_calls_for_expansion.each do |file, line_indexes_with_structures|
    rewriter = SchemaTest::Rewriter.new(File.read(file), line_indexes_with_structures)
    File.open(file, 'w') { f.puts rewriter.output }
  end
end
install_asset_api_expansion_hook() click to toggle source
# File lib/schema_test/test_helper.rb, line 35
def install_asset_api_expansion_hook
  return if @@__api_schema_expansion_hook_installed
  at_exit { expand_assert_api_calls }
  @@__api_schema_expansion_hook_installed = true
end
queue_write_expanded_assert_api_call(call_site, method, name, version, expected_structure) click to toggle source
# File lib/schema_test/test_helper.rb, line 27
def queue_write_expanded_assert_api_call(call_site, method, name, version, expected_structure)
  file, line = call_site.split(':')
  line_index = line.to_i.pred

  @@__api_schema_calls_for_expansion[file] ||= []
  @@__api_schema_calls_for_expansion[file] << [line_index, method, name, version, expected_structure]
end