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

class ResourceLimitsTest < MiniTest::Test
  def setup
    @orig_limits = MojoMagick.get_default_limits
  end

  def test_set_limits
    # set area to 32mb limit
    MojoMagick.set_limits(area: '32mb')
    new_limits = MojoMagick.get_current_limits
    assert_equal '32mb', new_limits[:area].downcase
  end

  def test_get_limits
    assert(@orig_limits.size >= 7)
  end

  def test_resource_limits
    orig_limits_test = @orig_limits.dup
    orig_limits_test.delete_if do |resource, _value|
      assert %i[throttle area map disk memory file thread time].include?(resource), "Found unexpected resource #{resource}"
      true
    end
    assert_equal 0, orig_limits_test.size
  end

  def test_get_current_limits
    # remove limits on area
    MojoMagick.remove_limits(:area)
    new_limits = MojoMagick.get_current_limits
    assert_equal @orig_limits[:area], new_limits[:area]
  end

  def test_set_limits_again
    # set memory to 64 mb, disk to 0 and
    MojoMagick.set_limits(memory: '64mb', disk: '0b')
    new_limits = MojoMagick.get_current_limits(show_actual_values: true)
    assert_equal 61, new_limits[:memory]
    assert_equal 0, new_limits[:disk]
  end

  def test_unset_limits
    # return to original/default limit values
    MojoMagick.unset_limits
    new_limits = MojoMagick.get_current_limits
    assert_equal @orig_limits, new_limits
  end
end