Zahlungsparser
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use App\EventPaymentModules\Modules\AccountTransferPaymentModule;
|
||||
use App\Models\PaymentMethod;
|
||||
use App\ValueObjects\BankStatementRuleset;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Wie sich der app-weite Standard aus config/bankStatement.php und ein Tenant-Override zueinander
|
||||
* verhalten -- und dass das Ruleset nicht in den Event-Snapshot rutscht.
|
||||
*
|
||||
* Braucht den Framework-Kontext (config()), aber keine Datenbank.
|
||||
*/
|
||||
class BankStatementRulesetTest extends TestCase
|
||||
{
|
||||
public function test_empty_configuration_falls_back_to_the_app_default(): void
|
||||
{
|
||||
$ruleset = new AccountTransferPaymentModule()->statementRuleset([]);
|
||||
|
||||
$this->assertSame(';', $ruleset->delimiter);
|
||||
$this->assertSame('', $ruleset->enclosure);
|
||||
$this->assertSame('Windows-1252', $ruleset->charset);
|
||||
$this->assertSame('Buchungstag', $ruleset->column('payment_date'));
|
||||
$this->assertSame([], $ruleset->missingRequiredColumns());
|
||||
}
|
||||
|
||||
/**
|
||||
* Der Override gilt ganz oder gar nicht: Wer die Spalten seiner Bank einträgt, bekommt nicht
|
||||
* daneben noch die Spaltennamen der GLS untergeschoben und sucht den Fehler an der falschen Stelle.
|
||||
*/
|
||||
public function test_a_tenant_override_replaces_the_column_mapping_entirely(): void
|
||||
{
|
||||
$ruleset = new AccountTransferPaymentModule()->statementRuleset([
|
||||
AccountTransferPaymentModule::OPTION_STATEMENT_RULESET => [
|
||||
'delimiter' => ',',
|
||||
'enclosure' => '"',
|
||||
'columns' => [
|
||||
'payment_date' => 'Datum',
|
||||
'purpose' => 'Zweck',
|
||||
'amount' => 'Summe',
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
$this->assertSame(',', $ruleset->delimiter);
|
||||
$this->assertSame('"', $ruleset->enclosure);
|
||||
$this->assertSame('Datum', $ruleset->column('payment_date'));
|
||||
// Nicht aus dem App-Standard ergänzt:
|
||||
$this->assertNull($ruleset->column('payer_iban'));
|
||||
}
|
||||
|
||||
/** Das Frontend schickt das Ruleset als JSON-String durch das generische Options-Formular. */
|
||||
public function test_accepts_the_override_as_json_string(): void
|
||||
{
|
||||
$ruleset = new AccountTransferPaymentModule()->statementRuleset([
|
||||
AccountTransferPaymentModule::OPTION_STATEMENT_RULESET => json_encode([
|
||||
'delimiter' => "\t",
|
||||
'columns' => ['payment_date' => 'Datum', 'purpose' => 'Zweck', 'amount' => 'Summe'],
|
||||
]),
|
||||
]);
|
||||
|
||||
$this->assertSame("\t", $ruleset->delimiter);
|
||||
$this->assertSame('Datum', $ruleset->column('payment_date'));
|
||||
}
|
||||
|
||||
public function test_reports_a_missing_required_column(): void
|
||||
{
|
||||
$ruleset = BankStatementRuleset::fromConfiguration([
|
||||
'columns' => ['payment_date' => 'Datum', 'purpose' => 'Zweck'],
|
||||
]);
|
||||
|
||||
$this->assertSame(['amount'], $ruleset->missingRequiredColumns());
|
||||
}
|
||||
|
||||
/**
|
||||
* Das Kontoauszug-Format beschreibt die Bank, nicht die Zusage an die Teilnehmenden. Im
|
||||
* Event-Snapshot eingefroren ließe sich nach einem Bankwechsel für laufende Aktionen nichts mehr
|
||||
* importieren -- IBAN und Kontoinhaber frieren dagegen weiterhin pro Aktion ein.
|
||||
*/
|
||||
public function test_the_ruleset_is_stripped_from_the_event_snapshot(): void
|
||||
{
|
||||
$configuration = [
|
||||
'account_owner' => 'Kasse',
|
||||
'iban' => 'DE02120300000000202051',
|
||||
AccountTransferPaymentModule::OPTION_STATEMENT_RULESET => ['delimiter' => ','],
|
||||
];
|
||||
|
||||
$snapshot = PaymentMethod::stripTenantScopedOptions(
|
||||
PaymentMethod::PAYMENT_ACCOUNT_TRANSACTION,
|
||||
$configuration,
|
||||
);
|
||||
|
||||
$this->assertArrayNotHasKey(AccountTransferPaymentModule::OPTION_STATEMENT_RULESET, $snapshot);
|
||||
$this->assertSame('Kasse', $snapshot['account_owner']);
|
||||
$this->assertSame('DE02120300000000202051', $snapshot['iban']);
|
||||
}
|
||||
|
||||
public function test_the_ruleset_option_is_the_only_tenant_scoped_one(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
[AccountTransferPaymentModule::OPTION_STATEMENT_RULESET],
|
||||
new AccountTransferPaymentModule()->tenantScopedOptionKeys(),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user