mirror of
https://github.com/we-promise/sure.git
synced 2026-04-07 14:31:25 +00:00
* 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
76 lines
2.7 KiB
Ruby
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
|