mivita/tests/Feature/AboOtMonthFilterTest.php
Kevin 4135726772 Abo-Uebersichten: Team-Ansicht konsolidiert, Monatsfilter, Wachstum & Dashboard-KPIs
- /user/abos/ot: Filter nach Eingangsmonat (start_date) ueber neuen UserAbo-Scope
- Konsolidierte Team-Abo-Ansicht nach Ebenen/Linien (Bestand, neue Abos im Monat,
  Eigen-/Kundenabos, Punkte je Ebene + Summen) via TeamAboOverviewService
- team/customers leitet auf konsolidierte Ansicht um; Navigation bereinigt
- Mitglieder-Detail-Modal mit Abo-Zusammenfassung (Eigen-Abo, Kundenabos,
  Punkte, Beginn, naechste Ausfuehrung, Ausfuehrungen)
- Wachstums-Tabelle (Jahr x Monate) + Liniendiagramm (neue Eigen-/Kundenabos)
- Dashboard-KPI-Kachel (Gesamtabos, Kundenabos, 1000-Punkte-Shops)
- i18n de/en/es/fr, Tests (Filter, Overview, Wachstum, Modal, Redirect)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 14:07:29 +00:00

66 lines
1.9 KiB
PHP

<?php
use App\Models\UserAbo;
use App\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
uses(TestCase::class, RefreshDatabase::class);
function createOtAbo(User $member, string $startDate): UserAbo
{
return UserAbo::create([
'user_id' => $member->id,
'member_id' => $member->id,
'shopping_user_id' => 0,
'email' => 'cust-'.uniqid('', true).'@example.com',
'is_for' => 'ot',
'payone_userid' => 0,
'clearingtype' => 'cc',
'amount' => 5000,
'status' => 2,
'abo_interval' => 5,
'start_date' => $startDate,
'last_date' => $startDate,
'next_date' => '2026-12-10',
]);
}
it('filtert Abos nach Eingangsmonat (start_date)', function (): void {
$member = User::forceCreate([
'email' => 'member-'.uniqid('', true).'@example.com',
'password' => bcrypt('secret'),
'lang' => 'de',
]);
$june = createOtAbo($member, '2026-06-15');
$july = createOtAbo($member, '2026-07-03');
$juneOtherYear = createOtAbo($member, '2025-06-20');
$filtered = UserAbo::where('member_id', $member->id)
->where('is_for', 'ot')
->addedInMonth(2026, 6)
->pluck('id');
expect($filtered)->toContain($june->id)
->not->toContain($july->id)
->not->toContain($juneOtherYear->id);
});
it('lässt die Abfrage unverändert, wenn kein Monat gewählt ist (month=0)', function (): void {
$member = User::forceCreate([
'email' => 'member-'.uniqid('', true).'@example.com',
'password' => bcrypt('secret'),
'lang' => 'de',
]);
createOtAbo($member, '2026-06-15');
createOtAbo($member, '2026-07-03');
$count = UserAbo::where('member_id', $member->id)
->where('is_for', 'ot')
->addedInMonth(2026, 0)
->count();
expect($count)->toBe(2);
});