Submit social housing lettings and sales data (CORE)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

57 lines
1.6 KiB

require "json"
require "json-schema"
# rubocop:disable Lint/ShadowingOuterLocalVariable
def get_all_form_paths(directories)
form_paths = []
directories.each do |directory|
Dir.glob("#{directory}/*.json").each do |form_path|
form_paths.push(form_path)
end
end
form_paths
end
namespace :form_definition do
desc "Validate all JSON against Generic Form Schema"
task validate_all: :environment do
directories = ["config/forms", "spec/fixtures/forms"]
paths = get_all_form_paths(directories)
paths.each do |path|
Rake::Task["form_definition:validate"].reenable
Rake::Task["form_definition:validate"].invoke(path)
end
end
desc "Validate Single JSON against Generic Form Schema"
task :validate, %i[path] => :environment do |_task, args|
path = Rails.root.join("config/forms/schema/generic.json")
file = File.open(path)
schema = JSON.parse(file.read)
meta_schema = JSON::Validator.validator_for_name("draft4").metaschema
puts path unless Rails.env.test?
if JSON::Validator.validate(meta_schema, schema)
puts "Schema Definition is Valid" unless Rails.env.test?
else
puts "Schema Definition in #{path} is not valid against draft4 json schema." unless Rails.env.test?
next
end
path = Rails.root.join(args.path)
file = File.open(path)
form_definition = JSON.parse(file.read)
puts path unless Rails.env.test?
puts JSON::Validator.fully_validate(schema, form_definition, strict: true) unless Rails.env.test?
begin
JSON::Validator.validate!(schema, form_definition)
rescue JSON::Schema::ValidationError => e
e.message
end
end
end