support/runfile/schema.runfile
summary 'Run json-schema checks on all examples'
help 'Generate the bashly.json schema from the bashly.yml template'
action :generate do
cmd = 'yq -p yaml -o json support/schema/bashly.yml > schemas/bashly.json'
say "gb`$` #{cmd}"
success = system cmd
abort 'Failed' unless success
end
help 'Run all the test actions in this runfile'
action :all do
check_examples
check_settings
check_strings
check_arbitrary
check_invalid
end
help 'Test any file against any schema'
usage 'file [--anti] PATH [SCHEMA]'
option '-a, --anti', 'Run anticheck instead (expect failure)'
param 'PATH', 'The path to the tested YAML file'
param 'SCHEMA', 'The name of the schema (bashly, settings of strings) [default: bashly]'
example 'run schema file -a spec/fixtures/schemas_invalid/bashly/1.yml'
example 'run schema file -a spec/fixtures/schemas_invalid/settings/2.yml settings'
action(:file) do |args|
schema = args['SCHEMA'] || 'bashly'
if args['--anti']
schema_anticheck args['PATH'], schema
else
schema_check args['PATH'], schema
end
say "\ngub`PASS`"
end
help 'Test the bashly schema against a single example'
usage 'example EXAMPLE'
action(:example) { |args| schema_check "examples/#{args['EXAMPLE']}/src/bashly.yml" }
help 'Test the bashly schema against all examples'
action(:examples) { check_examples }
help 'Test the settings schema against the default settings template'
action(:settings) { check_settings }
help 'Test the strings schema against the default strings template'
action(:strings) { check_strings }
help 'Test the bashly schema against a bashly configuration that includes arbitrary (x-) keys'
action(:arbitrary) { check_arbitrary }
help 'Verify that all the invalid schemas in spec/fixtures/schemas_invalid fail as expected'
action(:invalid) { check_invalid }
helpers do
def check_examples
say "\ngub`Examples`"
Example.examples.each do |example|
file = example.yaml_path
schema_check file
end
say "\ngub`Examples PASS`"
end
def check_settings
say "\ngub`Settings schema`"
file = 'lib/bashly/libraries/settings/settings.yml'
schema_check file, :settings
say "\ngub`Settings schema PASS`"
end
def check_strings
say "\ngub`Strings schema`"
file = 'lib/bashly/libraries/strings/strings.yml'
schema_check file, :strings
say "\ngub`Strings schema PASS`"
end
def check_arbitrary
say "\ngub`Arbitrary arguments`"
file = 'spec/fixtures/script/x_arbitrary.yml'
schema_check file
say "\ngub`Arbitrary arguments PASS`"
end
def check_invalid
say "\ngub`Invalid files`"
basedir = 'spec/fixtures/schemas_invalid'
files = Dir.chdir(basedir) { Dir['**/*.yml'] }
files.each do |file|
schema = File.dirname file
path = "#{basedir}/#{file}"
schema_anticheck path, schema
end
say "\ngub`Invalid files PASS`"
end
def schema_check(file, schema = 'bashly')
command = "check-jsonschema --schemafile schemas/#{schema}.json #{file}"
say "\nnb`$ check-jsonschema` [m`#{schema}`] bb`#{file}`"
success = system command
abort 'Failed' unless success
end
def schema_anticheck(file, schema = 'bashly')
command = "check-jsonschema --schemafile schemas/#{schema}.json #{file}"
say "\nnb`$ check-jsonschema` [m`#{schema}`] bb`#{file}`"
success = system "#{command}"
abort 'Failed' if success
end
end