require 'digest'

FactoryBot.define do
  sequence :project_fingerprint do |n|
    Digest::SHA1.hexdigest n.to_s
  end

  factory :vulnerability_feedback, class: Vulnerabilities::Feedback do
    project
    author
    issue nil
    merge_request nil
    association :pipeline, factory: :ci_pipeline
    feedback_type 'dismissal'
    category 'sast'
    project_fingerprint { generate(:project_fingerprint) }
    vulnerability_data { { category: 'sast' } }

    trait :dismissal do
      feedback_type 'dismissal'
    end

    trait :comment do
      comment 'a dismissal comment'
      comment_timestamp { Time.zone.now }
      comment_author { author }
    end

    trait :issue do
      feedback_type 'issue'
      issue { create(:issue, project: project) }
    end

    trait :merge_request do
      feedback_type 'merge_request'
      merge_request { create(:merge_request, source_project: project) }
    end

    trait :sast do
      category 'sast'
    end

    trait :dependency_scanning do
      category 'dependency_scanning'
    end

    trait :container_scanning do
      category 'container_scanning'
    end

    trait :dast do
      category 'dast'
    end
  end
end