From 8c95c73606fdd1b17876e33c8bb5240e2a028f62 Mon Sep 17 00:00:00 2001 From: Al Snow <43523+jasnow@users.noreply.github.com> Date: Tue, 2 Jun 2026 11:17:29 -0400 Subject: [PATCH] Extracted 1st commit (1 file) from PR#1086 --- spec/schema_validation_spec.rb | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/spec/schema_validation_spec.rb b/spec/schema_validation_spec.rb index 102467881d..6ba619c789 100644 --- a/spec/schema_validation_spec.rb +++ b/spec/schema_validation_spec.rb @@ -25,6 +25,31 @@ def normalize_for_json(value) end end +def raw_yaml_field_checks(data) + errors = [] + + if data.key?('date') && !data['date'].is_a?(Date) + errors << { + 'data_pointer' => '/date', + 'error' => 'value must be a YAML date' + } + end + + %w[cvss_v2 cvss_v3 cvss_v4].each do |field| + next unless data.key?(field) + + value = data[field] + next if value.is_a?(Float) + + errors << { + 'data_pointer' => "/#{field}", + 'error' => 'value must be a float' + } + end + + errors +end + def format_errors(errors) errors.map do |e| pointer = e['data_pointer'].to_s.empty? ? '' : e['data_pointer'] @@ -41,8 +66,9 @@ def format_errors(errors) filename = path.split('/')[-2..].join('/') it "#{filename} conforms to schema" do - data = normalize_for_json(YAML.safe_load_file(path, permitted_classes: [Date])) - errors = schemer.validate(data).to_a + raw_data = YAML.safe_load_file(path, permitted_classes: [Date]) + data = normalize_for_json(raw_data) + errors = raw_yaml_field_checks(raw_data) + schemer.validate(data).to_a expect(errors).to be_empty, lambda { "#{filename}\n#{format_errors(errors)}"