CluPilotCloud/tests/Feature/Admin/DunningFeesInEurosTest.php

78 lines
2.6 KiB
PHP

<?php
use App\Livewire\Admin\PaymentProblems;
use App\Services\Billing\DunningSchedule;
use Livewire\Livewire;
// admin() helper defined in HostManagementTest.
/**
* Im Feld Euro, in der Datenbank Cent.
*
* Das Feld hiess „Gebühr 2. Mahnung (Cent)" und enthielt 500. Wer eine
* Mahngebühr einträgt, denkt in Euro und tippt „5" — aus fünf Euro wurden fünf
* Cent, und nichts hat widersprochen. Gespeichert wird weiter in Cent, wie
* ueberall sonst im Produkt; nur die Eingabe spricht die Sprache des Menschen.
*/
it('zeigt hinterlegte Gebuehren in Euro an', function () {
DunningSchedule::class; // Autoload
app(\App\Support\Settings::class);
\App\Support\Settings::set(DunningSchedule::FEES, [2 => 500, 3 => 1000]);
$fees = Livewire::actingAs(admin(), 'operator')->test(PaymentProblems::class)->get('fees');
expect($fees[2])->toBe('5')
->and($fees[3])->toBe('10');
});
it('speichert eine Eingabe in Euro als Cent', function () {
Livewire::actingAs(admin(), 'operator')->test(PaymentProblems::class)
->set('days', [0, 3, 10, 17, 24])
->set('feeFromLevel', 2)
->set('fees.2', '7,50')
->set('fees.3', '12')
->call('saveSchedule')
->assertHasNoErrors();
expect(DunningSchedule::feeCents(2))->toBe(750)
->and(DunningSchedule::feeCents(3))->toBe(1200);
});
it('rundet statt abzuschneiden', function () {
// (int) (19.99 * 100) ist in PHP 1998 — die Gleitkommazahl liegt knapp
// darunter. Ein Cent, der bei jedem Speichern verschwindet, faellt erst nach
// Monaten auf.
Livewire::actingAs(admin(), 'operator')->test(PaymentProblems::class)
->set('days', [0, 3, 10, 17, 24])
->set('feeFromLevel', 2)
->set('fees.2', '19,99')
->set('fees.3', '0')
->call('saveSchedule')
->assertHasNoErrors();
expect(DunningSchedule::feeCents(2))->toBe(1999);
});
it('nimmt auch einen Punkt als Dezimaltrenner', function () {
Livewire::actingAs(admin(), 'operator')->test(PaymentProblems::class)
->set('days', [0, 3, 10, 17, 24])
->set('feeFromLevel', 2)
->set('fees.2', '5.25')
->set('fees.3', '0')
->call('saveSchedule')
->assertHasNoErrors();
expect(DunningSchedule::feeCents(2))->toBe(525);
});
it('weist Unfug zurueck, statt ihn auf null zu runden', function () {
Livewire::actingAs(admin(), 'operator')->test(PaymentProblems::class)
->set('days', [0, 3, 10, 17, 24])
->set('feeFromLevel', 2)
->set('fees.2', 'fuenf')
->set('fees.3', '0')
->call('saveSchedule')
->assertHasErrors('fees.2');
});