mirror of
https://github.com/we-promise/sure.git
synced 2026-07-12 12:55:20 +00:00
Adds YnabImport (mirroring ActualImport) for YNAB "Export budget" register CSVs: - Amount — combines the split Outflow/Inflow columns into a single signed amount (inflow - |outflow|), stripping currency symbols and thousands separators. A single signed Amount column takes precedence when present. - Category — resolves across export shapes: the combined "Category Group/Category" column, the split "Category Group" + "Category", or legacy YNAB 4 "Master Category" + "Sub Category". - Names — falls back from a blank Payee to the Memo, then the default row name. - Validation — requires at least one amount source (Outflow/Inflow or Amount); a file exposing none leaves rows un-clean instead of importing zero-dollar entries. Enables the previously-disabled YNAB option on the imports screen (using the YNAB logo, like Mint) with its configuration partial, and removes the now-dead imports.new.coming_soon locale key. Documents the type in the API import-type enums (rswag request spec + swagger_helper + generated openapi.yaml). Closes #1255.
59 lines
1.7 KiB
Ruby
59 lines
1.7 KiB
Ruby
require "test_helper"
|
|
|
|
class Import::ConfigurationsControllerTest < ActionDispatch::IntegrationTest
|
|
setup do
|
|
sign_in @user = users(:family_admin)
|
|
@import = imports(:transaction)
|
|
end
|
|
|
|
test "show" do
|
|
get import_configuration_url(@import)
|
|
assert_response :success
|
|
end
|
|
|
|
test "show renders the YNAB configuration partial" do
|
|
ynab = @user.family.imports.create!(
|
|
type: "YnabImport",
|
|
raw_file_str: file_fixture("imports/ynab.csv").read,
|
|
col_sep: ","
|
|
)
|
|
|
|
get import_configuration_url(ynab)
|
|
|
|
assert_response :success
|
|
end
|
|
|
|
test "updating a valid configuration regenerates rows" do
|
|
TransactionImport.any_instance.expects(:generate_rows_from_csv).once
|
|
|
|
patch import_configuration_url(@import), params: {
|
|
import: {
|
|
date_col_label: "Date",
|
|
date_format: "%Y-%m-%d",
|
|
name_col_label: "Name",
|
|
category_col_label: "Category",
|
|
tags_col_label: "Tags",
|
|
amount_col_label: "Amount",
|
|
signage_convention: "inflows_positive",
|
|
account_col_label: "Account",
|
|
number_format: "1.234,56"
|
|
}
|
|
}
|
|
|
|
assert_redirected_to import_clean_url(@import)
|
|
assert_equal "Import configured successfully.", flash[:notice]
|
|
|
|
# Verify configurations were saved
|
|
@import.reload
|
|
assert_equal "Date", @import.date_col_label
|
|
assert_equal "%Y-%m-%d", @import.date_format
|
|
assert_equal "Name", @import.name_col_label
|
|
assert_equal "Category", @import.category_col_label
|
|
assert_equal "Tags", @import.tags_col_label
|
|
assert_equal "Amount", @import.amount_col_label
|
|
assert_equal "inflows_positive", @import.signage_convention
|
|
assert_equal "Account", @import.account_col_label
|
|
assert_equal "1.234,56", @import.number_format
|
|
end
|
|
end
|