# This calls the main test_helper in Foreman-core
require 'test_helper'

# Add plugin to FactoryBot's paths
FactoryBot.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
FactoryBot.reload

module ScapClientPuppetclass
  def skip_scap_callback
    Host::Managed.any_instance.stubs(:update_scap_client).returns(nil)
    Host::Managed.any_instance.stubs(:scap_client_class_present).returns(nil)
    Hostgroup.any_instance.stubs(:update_scap_client).returns(nil)
  end
end

module ScapTestProxy
  private

  def add_smart_proxy
    FactoryBot.create(:smart_proxy, :url => 'http://localhost:8443', :features => [FactoryBot.create(:feature, :name => 'Openscap')])
    ProxyAPI::Features.any_instance.stubs(:features).returns(%w[puppet openscap])
    versions = { "version" => "1.11.0", "modules" => { "openscap" => "0.5.3" } }
    ProxyAPI::Version.any_instance.stubs(:proxy_versions).returns(versions)
    ProxyAPI::Openscap.any_instance.stubs(:validate_scap_file).returns({ 'errors' => [] })
    ProxyAPI::Openscap.any_instance.stubs(:fetch_policies_for_scap_content)
                      .returns({ 'xccdf_org.ssgproject.content_profile_common' => 'Common Profile for General-Purpose Fedora Systems' })
    ProxyAPI::Openscap.any_instance.stubs(:fetch_profiles_for_tailoring_file)
                      .returns({ 'xccdf_org.ssgproject.test_profile_common' => 'Stubbed test profile' })
  end
end

module ScapTestCommon
  private

  def create_report_with_rules(host, rule_names, rule_results)
    raise "rule_names and rule_results should have the same length!" if rule_names.size != rule_results.size
    report = FactoryBot.create(:arf_report, :host_id => host.id)
    rule_names.each_with_index do |item, index|
      source = FactoryBot.create(:compliance_source, :value => rule_names[index])
      log = FactoryBot.create(:compliance_log, :source => source, :report => report, :result => rule_results[index])
    end
    report
  end
end

class ActionMailer::TestCase
  include ScapClientPuppetclass
  setup :skip_scap_callback
end

class ActionController::TestCase
  include ScapClientPuppetclass
  include ScapTestProxy
  include ScapTestCommon

  setup :add_smart_proxy, :skip_scap_callback
end

class ActiveSupport::TestCase
  include ScapClientPuppetclass
  include ScapTestProxy
  include ScapTestCommon

  setup :add_smart_proxy, :skip_scap_callback
end