mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-25 08:09:38 +02:00
Refactor: Allow other import files (#1099)
* Rename stimulus controller * feature: rename raw_csv_str to raw_file_str
This commit is contained in:
parent
e6528bafec
commit
0c1ff00c1e
16 changed files with 71 additions and 57 deletions
|
@ -8,7 +8,7 @@ class ImportsControllerTest < ActionDispatch::IntegrationTest
|
|||
@empty_import = imports(:empty_import)
|
||||
|
||||
@loaded_import = @empty_import.dup
|
||||
@loaded_import.update! raw_csv_str: valid_csv_str
|
||||
@loaded_import.update! raw_file_str: valid_csv_str
|
||||
|
||||
@completed_import = imports(:completed_import)
|
||||
end
|
||||
|
@ -59,7 +59,7 @@ class ImportsControllerTest < ActionDispatch::IntegrationTest
|
|||
end
|
||||
|
||||
test "should save raw CSV if valid" do
|
||||
patch load_import_url(@empty_import), params: { import: { raw_csv_str: valid_csv_str } }
|
||||
patch load_import_url(@empty_import), params: { import: { raw_file_str: valid_csv_str } }
|
||||
|
||||
assert_redirected_to configure_import_path(@empty_import)
|
||||
assert_equal "Import CSV loaded", flash[:notice]
|
||||
|
@ -71,17 +71,17 @@ class ImportsControllerTest < ActionDispatch::IntegrationTest
|
|||
valid_csv_str.split("\n").each { |row| csv << row.split(",") }
|
||||
end
|
||||
|
||||
patch upload_import_url(@empty_import), params: { import: { raw_csv_str: Rack::Test::UploadedFile.new(temp, ".csv") } }
|
||||
patch upload_import_url(@empty_import), params: { import: { raw_file_str: Rack::Test::UploadedFile.new(temp, ".csv") } }
|
||||
assert_redirected_to configure_import_path(@empty_import)
|
||||
assert_equal "CSV File loaded", flash[:notice]
|
||||
end
|
||||
end
|
||||
|
||||
test "should flash error message if invalid CSV input" do
|
||||
patch load_import_url(@empty_import), params: { import: { raw_csv_str: malformed_csv_str } }
|
||||
patch load_import_url(@empty_import), params: { import: { raw_file_str: malformed_csv_str } }
|
||||
|
||||
assert_response :unprocessable_entity
|
||||
assert_equal "Raw csv str is not a valid CSV format", flash[:alert]
|
||||
assert_equal "Raw file str is not a valid CSV format", flash[:alert]
|
||||
end
|
||||
|
||||
test "should flash error message if invalid CSV file upload" do
|
||||
|
@ -89,14 +89,14 @@ class ImportsControllerTest < ActionDispatch::IntegrationTest
|
|||
temp.write(malformed_csv_str)
|
||||
temp.rewind
|
||||
|
||||
patch upload_import_url(@empty_import), params: { import: { raw_csv_str: Rack::Test::UploadedFile.new(temp, ".csv") } }
|
||||
patch upload_import_url(@empty_import), params: { import: { raw_file_str: Rack::Test::UploadedFile.new(temp, ".csv") } }
|
||||
assert_response :unprocessable_entity
|
||||
assert_equal "Raw csv str is not a valid CSV format", flash[:alert]
|
||||
assert_equal "Raw file str is not a valid CSV format", flash[:alert]
|
||||
end
|
||||
end
|
||||
|
||||
test "should flash error message if no fileprovided for upload" do
|
||||
patch upload_import_url(@empty_import), params: { import: { raw_csv_str: nil } }
|
||||
patch upload_import_url(@empty_import), params: { import: { raw_file_str: nil } }
|
||||
assert_response :unprocessable_entity
|
||||
assert_equal "Please select a file to upload", flash[:alert]
|
||||
end
|
||||
|
@ -158,7 +158,7 @@ class ImportsControllerTest < ActionDispatch::IntegrationTest
|
|||
end
|
||||
|
||||
test "should redirect back to clean if data is invalid" do
|
||||
@empty_import.update! raw_csv_str: valid_csv_with_invalid_values
|
||||
@empty_import.update! raw_file_str: valid_csv_with_invalid_values
|
||||
|
||||
get confirm_import_url(@empty_import)
|
||||
assert_equal "You have invalid data, please fix before continuing", flash[:alert]
|
||||
|
|
2
test/fixtures/imports.yml
vendored
2
test/fixtures/imports.yml
vendored
|
@ -9,7 +9,7 @@ completed_import:
|
|||
name: name
|
||||
category: category
|
||||
amount: amount
|
||||
raw_csv_str: |
|
||||
raw_file_str: |
|
||||
date,name,category,tags,amount
|
||||
2024-01-01,Starbucks drink,Food & Drink,Test Tag,-20
|
||||
normalized_csv_str: |
|
||||
|
|
|
@ -5,7 +5,7 @@ class ImportJobTest < ActiveJob::TestCase
|
|||
|
||||
test "import is published" do
|
||||
import = imports(:empty_import)
|
||||
import.update! raw_csv_str: valid_csv_str
|
||||
import.update! raw_file_str: valid_csv_str
|
||||
|
||||
assert import.pending?
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ class Import::CsvTest < ActiveSupport::TestCase
|
|||
|
||||
fields = [ date_field, name_field ]
|
||||
|
||||
raw_csv_str = <<-ROWS
|
||||
raw_file_str = <<-ROWS
|
||||
date,Custom Field Header,extra_field
|
||||
invalid_date_value,Starbucks drink,Food
|
||||
2024-01-02,Amazon stuff,Shopping
|
||||
|
@ -82,7 +82,7 @@ class Import::CsvTest < ActiveSupport::TestCase
|
|||
"name" => "Custom Field Header"
|
||||
}
|
||||
|
||||
csv = Import::Csv.create_with_field_mappings(raw_csv_str, fields, mappings)
|
||||
csv = Import::Csv.create_with_field_mappings(raw_file_str, fields, mappings)
|
||||
|
||||
assert_equal %w[ date name ], csv.table.headers
|
||||
assert_equal 2, csv.table.size
|
||||
|
@ -101,7 +101,7 @@ class Import::CsvTest < ActiveSupport::TestCase
|
|||
|
||||
fields = [ date_field, name_field ]
|
||||
|
||||
raw_csv_str = <<-ROWS
|
||||
raw_file_str = <<-ROWS
|
||||
date;Custom Field Header;extra_field
|
||||
invalid_date_value;Starbucks drink;Food
|
||||
2024-01-02;Amazon stuff;Shopping
|
||||
|
@ -111,7 +111,7 @@ class Import::CsvTest < ActiveSupport::TestCase
|
|||
"name" => "Custom Field Header"
|
||||
}
|
||||
|
||||
csv = Import::Csv.create_with_field_mappings(raw_csv_str, fields, mappings, ";")
|
||||
csv = Import::Csv.create_with_field_mappings(raw_file_str, fields, mappings, ";")
|
||||
|
||||
assert_equal %w[ date name ], csv.table.headers
|
||||
assert_equal 2, csv.table.size
|
||||
|
|
|
@ -7,7 +7,7 @@ class ImportTest < ActiveSupport::TestCase
|
|||
@empty_import = imports(:empty_import)
|
||||
|
||||
@loaded_import = @empty_import.dup
|
||||
@loaded_import.update! raw_csv_str: valid_csv_str
|
||||
@loaded_import.update! raw_file_str: valid_csv_str
|
||||
end
|
||||
|
||||
test "validates the correct col_sep" do
|
||||
|
@ -26,17 +26,17 @@ class ImportTest < ActiveSupport::TestCase
|
|||
end
|
||||
|
||||
test "raw csv input must conform to csv spec" do
|
||||
@empty_import.raw_csv_str = malformed_csv_str
|
||||
@empty_import.raw_file_str = malformed_csv_str
|
||||
assert_not @empty_import.valid?
|
||||
|
||||
@empty_import.raw_csv_str = valid_csv_str
|
||||
@empty_import.raw_file_str = valid_csv_str
|
||||
assert @empty_import.valid?
|
||||
end
|
||||
|
||||
test "can update csv value without affecting raw input" do
|
||||
assert_equal "Starbucks drink", @loaded_import.csv.table[0][1]
|
||||
|
||||
prior_raw_csv_str_value = @loaded_import.raw_csv_str
|
||||
prior_raw_file_str_value = @loaded_import.raw_file_str
|
||||
prior_normalized_csv_str_value = @loaded_import.normalized_csv_str
|
||||
|
||||
@loaded_import.update_csv! \
|
||||
|
@ -45,7 +45,7 @@ class ImportTest < ActiveSupport::TestCase
|
|||
value: "new_category"
|
||||
|
||||
assert_equal "new_category", @loaded_import.csv.table[0][1]
|
||||
assert_equal prior_raw_csv_str_value, @loaded_import.raw_csv_str
|
||||
assert_equal prior_raw_file_str_value, @loaded_import.raw_file_str
|
||||
assert_not_equal prior_normalized_csv_str_value, @loaded_import.normalized_csv_str
|
||||
end
|
||||
|
||||
|
@ -74,7 +74,7 @@ class ImportTest < ActiveSupport::TestCase
|
|||
end
|
||||
|
||||
test "publishes a valid import with missing data" do
|
||||
@empty_import.update! raw_csv_str: valid_csv_with_missing_data
|
||||
@empty_import.update! raw_file_str: valid_csv_with_missing_data
|
||||
assert_difference -> { Category.count } => 1,
|
||||
-> { Account::Transaction.count } => 2,
|
||||
-> { Account::Entry.count } => 2 do
|
||||
|
@ -89,7 +89,7 @@ class ImportTest < ActiveSupport::TestCase
|
|||
end
|
||||
|
||||
test "failed publish results in error status" do
|
||||
@empty_import.update! raw_csv_str: valid_csv_with_invalid_values
|
||||
@empty_import.update! raw_file_str: valid_csv_with_invalid_values
|
||||
|
||||
assert_difference "Account::Transaction.count", 0 do
|
||||
@empty_import.publish
|
||||
|
@ -102,7 +102,7 @@ class ImportTest < ActiveSupport::TestCase
|
|||
test "can create transactions from csv with custom column separator" do
|
||||
loaded_import = @empty_import.dup
|
||||
|
||||
loaded_import.update! raw_csv_str: valid_csv_str_with_semicolon_separator, col_sep: ";"
|
||||
loaded_import.update! raw_file_str: valid_csv_str_with_semicolon_separator, col_sep: ";"
|
||||
transactions = loaded_import.dry_run
|
||||
|
||||
assert_equal 4, transactions.count
|
||||
|
|
|
@ -57,7 +57,7 @@ class ImportsTest < ApplicationSystemTestCase
|
|||
assert_selector "h1", text: "Load import"
|
||||
|
||||
within "form" do
|
||||
fill_in "import_raw_csv_str", with: <<-ROWS
|
||||
fill_in "import_raw_file_str", with: <<-ROWS
|
||||
date,Custom Name Column,category,amount
|
||||
invalid_date,Starbucks drink,Food,-20.50
|
||||
2024-01-01,Amazon purchase,Shopping,-89.50
|
||||
|
@ -115,7 +115,7 @@ class ImportsTest < ApplicationSystemTestCase
|
|||
|
||||
click_button "Upload CSV"
|
||||
|
||||
find(".csv-drop-box").drop File.join(file_fixture_path, "transactions.csv")
|
||||
find(".raw-file-drop-box").drop File.join(file_fixture_path, "transactions.csv")
|
||||
assert_selector "div.csv-preview", text: "transactions.csv"
|
||||
|
||||
click_button "Next"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue