require File.join(File.dirname(__FILE__), 'helper')

class RPMHeaderTests < Minitest::Test
  def test_create
    pkg = RPM::Package.create('foo', RPM::Version.new('1.0'))
    assert_equal 'foo', pkg.name
    assert_equal '(none)', pkg.signature
  end

  def test_open
    pkg = RPM::Package.open(fixture('simple-1.0-0.i586.rpm'))

    req = RPM::Require.new('simple', RPM::Version.new('1.0', '0'), RPM::SENSE_GREATER | RPM::SENSE_EQUAL, nil)
    assert req.satisfy?(pkg)

    assert_equal 'simple-1.0-0-i586', pkg.to_s

    assert_equal '3b5f9d468c877166532c662e29f43bc3', pkg.signature

    assert_kind_of RPM::Package, pkg
    assert_equal 'simple', pkg[:name]
    assert_equal 'i586', pkg[:arch]
    assert_kind_of RPM::Version, pkg.version
    assert_equal '1.0-0', pkg.version.to_s

    backup_lang = ENV['LC_ALL']

    ENV['LC_ALL'] = 'C'
    assert_equal 'Simple dummy package', pkg[:summary]
    assert_equal 'Dummy package', pkg[:description]

    ENV['LC_ALL'] = 'es_ES.UTF-8'
    assert_equal 'Paquete simple de muestra', pkg[:summary]
    assert_equal 'Paquete de muestra', pkg[:description]

    ENV['LC_ALL'] = backup_lang

    # Arrays
    assert_equal %w[root root], pkg[:fileusername]
    assert_equal [6, 5], pkg[:filesizes]

    assert pkg.provides.map(&:name).include?('simple(x86-32)')
    assert pkg.provides.map(&:name).include?('simple')

    assert pkg.files.map(&:path).include?('/usr/share/simple/README')
    assert pkg.files.map(&:path).include?('/usr/share/simple/README.es')

    assert pkg.conflicts.empty?
    assert pkg.requires.map(&:name).include?('rpmlib(PayloadIsLzma)')
    assert pkg.obsoletes.empty?

    file = pkg.files.select { |x| x.path == '/usr/share/simple/README' }.first
    assert_nil file.link_to
    assert !file.symlink?

    assert_equal ['- Fix something', '- Fix something else'], pkg.changelog.map(&:text)
  end

  def test_dependencies
    pkg = RPM::Package.open(fixture('simple_with_deps-1.0-0.i586.rpm'))
    assert_equal 'simple_with_deps', pkg.name

    assert pkg.provides.map(&:name).include?('simple_with_deps(x86-32)')
    assert pkg.provides.map(&:name).include?('simple_with_deps')

    assert pkg.requires.map(&:name).include?('a')
    b = pkg.requires.find { |x| x.name == 'b' }
    assert b
    assert_equal '1.0', b.version.to_s

    assert pkg.conflicts.map(&:name).include?('c')
    assert pkg.conflicts.map(&:name).include?('d')

    assert pkg.obsoletes.map(&:name).include?('f')
  end
end