Sha256: 574cec5919f3e079f6886a7285e15c4ea632c42906e355ca7cc4c83065863571

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

module RSpec
  module RSpecOscalFormatter
    # Tiny helper class to provide easy access to the metadata attributes in the spec.
    class SpecMetaDataParser
      STATUS_MAP = {
        passed: 'pass',
        failed: 'fail',
        pending: 'other',
      }

      attr_reader(
        *(METADATA = %i[assessment_plan_uuid control_id description statement_id ssp_url reason
                        state].freeze),
      )

      def validate_contents(metadata)
        # Make sure required attributes are present
        METADATA.each do |attribute|
          raise IndexError if attribute.nil?
        end
      end

      def initialize(example)
        validate_contents(example.metadata) # TODO: - figure out a way to dump out if metadata isn't complete
        @output_directory = example.metadata[:output_directory]
        @assessment_plan_uuid = example.metadata[:assessment_plan_uuid]
        @control_id = example.metadata[:control_id]
        @description = example.metadata[:description]
        @statement_id = example.metadata[:statement_id]
        @reason = STATUS_MAP[example.execution_result.status]
        @state = @reason == 'pass' ? 'satisfied' : 'not-satisfied'
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rspec_oscal_formatter-0.1.1 lib/rspec_oscal_formatter/parse_spec_metadata.rb