1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-19 13:19:39 +02:00

Ignore empty categories while importing (#789)

* Ignore empty categories while importing

* Review fixes
This commit is contained in:
Jakub Kottnauer 2024-05-22 14:12:56 +02:00 committed by GitHub
parent ac27a1c87f
commit 77f166a5f8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 23 additions and 8 deletions

View file

@ -11,6 +11,8 @@ class Import < ApplicationRecord
scope :ordered, -> { order(created_at: :desc) }
FALLBACK_TRANSACTION_NAME = "Imported transaction"
def publish_later
ImportJob.perform_later(self)
end
@ -110,9 +112,9 @@ class Import < ApplicationRecord
transactions = []
csv.table.each do |row|
category = account.family.transaction_categories.find_or_initialize_by(name: row["category"])
category = account.family.transaction_categories.find_or_initialize_by(name: row["category"]) if row["category"].present?
txn = account.transactions.build \
name: row["name"].presence || "Imported transaction",
name: row["name"].presence || FALLBACK_TRANSACTION_NAME,
date: Date.iso8601(row["date"]),
category: category,
amount: BigDecimal(row["amount"]) * -1, # User inputs amounts with opposite signage of our internal representation

View file

@ -1,7 +1,7 @@
<%# locals: (category:) %>
<% category ||= null_category %>
<span class="border text-sm font-medium px-2.5 py-1 rounded-full cursor-pointer content-center"
<span class="border text-sm font-medium px-2.5 py-1 rounded-full content-center"
style="
background-color: color-mix(in srgb, <%= category.color %> 5%, white);
border-color: color-mix(in srgb, <%= category.color %> 10%, white);

View file

@ -37,7 +37,7 @@ class Import::CsvTest < ActiveSupport::TestCase
end
test "csv with additional columns and empty values" do
csv = Import::Csv.new valid_csv_with_extra_column
csv = Import::Csv.new valid_csv_with_missing_data
assert csv.valid?
end

View file

@ -39,7 +39,7 @@ class ImportTest < ActiveSupport::TestCase
end
test "publishes a valid import" do
assert_difference "Transaction.count", 2 do
assert_difference -> { Transaction::Category.count } => 2, -> { Transaction.count } => 2 do
@loaded_import.publish
end
@ -48,6 +48,19 @@ class ImportTest < ActiveSupport::TestCase
assert @loaded_import.complete?
end
test "publishes a valid import with missing data" do
@empty_import.update! raw_csv_str: valid_csv_with_missing_data
assert_difference -> { Transaction::Category.count } => 1, -> { Transaction.count } => 2 do
@empty_import.publish
end
assert_not_nil Transaction.find_sole_by(name: Import::FALLBACK_TRANSACTION_NAME)
@empty_import.reload
assert @empty_import.complete?
end
test "failed publish results in error status" do
@empty_import.update! raw_csv_str: valid_csv_with_invalid_values

View file

@ -14,11 +14,11 @@ module ImportTestHelper
ROWS
end
def valid_csv_with_extra_column
def valid_csv_with_missing_data
<<-ROWS
date,name,category,"optional id",amount
2024-01-01,Starbucks drink,Food,1234,20
2024-01-02,Amazon stuff,Shopping,,200
2024-01-01,Drink,Food,1234,200
2024-01-02,,,,100
ROWS
end