diff --git a/Gemfile b/Gemfile index b547f12aa6..cc11e8934a 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,6 @@ source 'https://rubygems.org' gem 'rake' gem 'faraday', '~> 2.0' -gem 'kwalify', '~> 0.1' gem 'json_schemer', '~> 2.0' gem 'rspec', '~> 3.0' diff --git a/spec/gem_advisory_example.rb b/spec/gem_advisory_example.rb index 5d40a5b250..69e5fc4116 100644 --- a/spec/gem_advisory_example.rb +++ b/spec/gem_advisory_example.rb @@ -51,14 +51,5 @@ end end - let(:schema_file) { File.join(__dir__, 'schemas/gem.yml') } - - it "should have valid schema" do - schema = YAML.safe_load_file(schema_file) - validator = Kwalify::Validator.new(schema) - errors = validator.validate(advisory) - - expect(errors).to be_empty - end end end diff --git a/spec/ruby_advisory_example.rb b/spec/ruby_advisory_example.rb index 2c580f59ba..de5c125935 100644 --- a/spec/ruby_advisory_example.rb +++ b/spec/ruby_advisory_example.rb @@ -19,14 +19,5 @@ end end - let(:schema_file) { File.join(__dir__, 'schemas/ruby.yml') } - - it "should have valid schema" do - schema = YAML.safe_load_file(schema_file) - validator = Kwalify::Validator.new(schema) - errors = validator.validate(advisory) - - expect(errors).to be_empty - end end end 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)}" diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 885d3fff1c..7dc07a4ae0 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,13 +1,4 @@ -require 'strscan' - -class StringScanner - def peep(len) - peek(len) - end -end - require 'date' -require 'kwalify' require 'rspec' ROOT = File.expand_path(File.join(__dir__,'..'))