- /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>
66 lines
1.9 KiB
PHP
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);
|
|
});
|