# frozen_string_literal: true

require "cases/helper"

# Without using prepared statements, it makes no sense to test
# BLOB data with DB2, because the length of a statement
# is limited to 32KB.
unless current_adapter?(:DB2Adapter)
  require "models/binary"

  class BinaryTest < ActiveRecord::TestCase
    FIXTURES = %w(flowers.jpg example.log test.txt)

    def test_mixed_encoding
      str = +"\x80"
      str.force_encoding("ASCII-8BIT")

      binary = Binary.new name: "いただきます！", data: str
      binary.save!
      binary.reload
      assert_equal str, binary.data

      name = binary.name

      assert_equal "いただきます！", name
    end

    def test_load_save
      Binary.delete_all

      FIXTURES.each do |filename|
        data = File.read(ASSETS_ROOT + "/#{filename}")
        data.force_encoding("ASCII-8BIT")
        data.freeze

        bin = Binary.new(data: data)
        assert_equal data, bin.data, "Newly assigned data differs from original"

        bin.save!
        assert_equal data, bin.data, "Data differs from original after save"

        assert_equal data, bin.reload.data, "Reloaded data differs from original"
      end
    end
  end
end
