Files
sure/test/models/import_encoding_test.rb
soky srm 25ac822308 Reports print functionality (#622)
* Print initial impl

* Try to keep the bigger section together

* /* Tufte-inspired Print Report Styles */

* styling

* I8n

* Move print styling out.

* FIX unrelated test ordering

on line 53 - import.rows.first doesn't guarantee ordering. Without an explicit ORDER BY, the database may return rows in any order.

* Update print-report.css

* Update print.html.erb

* pass data to view

* Update index.html.erb

* Fix ERB helpers

* Update reports_helper.rb
2026-01-12 14:40:30 +01:00

76 lines
2.7 KiB
Ruby

require "test_helper"
class ImportEncodingTest < ActiveSupport::TestCase
setup do
@family = families(:dylan_family)
@account = accounts(:depository)
end
test "successfully imports Windows-1250 encoded CSV" do
# Test that Windows-1250 encoded files are properly converted to UTF-8
file_path = Rails.root.join("test/fixtures/files/imports/windows1250.csv")
csv_content = File.binread(file_path)
# Verify the file is not UTF-8
assert_equal Encoding::ASCII_8BIT, csv_content.encoding
refute csv_content.force_encoding("UTF-8").valid_encoding?, "Test file should not be valid UTF-8"
import = @family.imports.create!(
type: "TransactionImport",
account: @account,
date_format: "%Y-%m-%d",
date_col_label: "Date",
amount_col_label: "Amount",
name_col_label: "Name",
category_col_label: "Category",
tags_col_label: "Tags",
account_col_label: "Account",
notes_col_label: "Notes",
signage_convention: "inflows_negative",
amount_type_strategy: "signed_amount"
)
# With encoding detection, the import should succeed
assert_nothing_raised do
import.update!(raw_file_str: csv_content)
end
# Verify the raw_file_str was converted to UTF-8
assert_equal Encoding::UTF_8, import.raw_file_str.encoding
assert import.raw_file_str.valid_encoding?, "Converted string should be valid UTF-8"
# Verify we can generate rows from the CSV
assert_nothing_raised do
import.generate_rows_from_csv
end
# Verify that rows were created
import.reload
assert import.rows_count > 0, "Expected rows to be created from Windows-1250 CSV"
assert_equal 3, import.rows_count, "Expected 3 data rows"
# Verify Polish characters were preserved correctly
# Check that any row contains the Polish characters (test is about encoding, not ordering)
assert import.rows.any? { |row| row.name&.include?("spożywczy") }, "Polish characters should be preserved"
# Also verify other Polish characters from different rows
assert import.rows.any? { |row| row.name&.include?("Café") }, "Extended Latin characters should be preserved"
end
test "handles UTF-8 files without modification" do
# Test that valid UTF-8 files are not modified
file_path = Rails.root.join("test/fixtures/files/imports/transactions.csv")
csv_content = File.read(file_path, encoding: "UTF-8")
import = @family.imports.create!(
type: "TransactionImport",
account: @account,
date_format: "%Y-%m-%d",
raw_file_str: csv_content
)
# UTF-8 content should remain unchanged
assert_equal Encoding::UTF_8, import.raw_file_str.encoding
assert import.raw_file_str.valid_encoding?
end
end