Haken vip_only am Incentive: aktives Incentive erscheint dann nur fuer VIP-Konten in Sidenav, Dashboard, Teaser, Rangliste und Details, andere Berater bekommen 404; das Tracking laeuft fuer alle weiter. Seeder setzt den Haken fuer die Abstimmung der Recruiting Challenge. Ranglisten-Seite: solange die Teilnahme nicht bestaetigt ist, steht der Teilnahme-Block mit Praemien-Chips, Checkbox, Button und aufklappbaren Bedingungen ganz oben, darunter Trennlinie, Titel, Untertitel, Bild, Beschreibung und die Info-Kacheln. Ueberschriften vergroessert, Abo-Bloecke nur wenn Abos zaehlen. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
47 lines
2.3 KiB
PHP
47 lines
2.3 KiB
PHP
<?php
|
||
|
||
use App\Models\Incentive;
|
||
use Database\Seeders\RecruitingChallenge2026Seeder;
|
||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||
|
||
uses(RefreshDatabase::class);
|
||
|
||
/**
|
||
* E1: Der Seeder legt die Recruiting Challenge mit den abgestimmten Texten als Entwurf an
|
||
* und ueberschreibt bei einem zweiten Lauf nur die Texte, nicht die Admin-Werte.
|
||
*/
|
||
it('legt die Challenge als Entwurf mit Praemie und Wertung nach Neupartnern an', function () {
|
||
$this->seed(RecruitingChallenge2026Seeder::class);
|
||
|
||
$incentive = Incentive::where('slug', RecruitingChallenge2026Seeder::SLUG)->firstOrFail();
|
||
|
||
expect($incentive->isDraft())->toBeTrue()
|
||
->and($incentive->vip_only)->toBeTrue()
|
||
->and($incentive->name)->toBe('Recruiting Challenge 2026/27')
|
||
->and($incentive->qualification_start->toDateString())->toBe('2026-10-01')
|
||
->and($incentive->qualification_end->toDateString())->toBe('2027-01-31')
|
||
->and((float) $incentive->amount_per_partner)->toBe(50.0)
|
||
->and($incentive->rankBonuses())->toBe([1 => 500.0, 2 => 300.0, 3 => 200.0])
|
||
->and($incentive->max_winners)->toBe(3)
|
||
->and($incentive->ranksByPartnerCount())->toBeTrue()
|
||
->and($incentive->hasMinimumRequirements())->toBeFalse()
|
||
->and($incentive->description)->toContain('50 €')
|
||
->and($incentive->terms)->toContain('6. Gleichstand')
|
||
->and($incentive->description.$incentive->subtitle.$incentive->terms)->not->toContain('–')
|
||
->and($incentive->description.$incentive->subtitle.$incentive->terms)->not->toContain('—');
|
||
});
|
||
|
||
it('aktualisiert beim zweiten Lauf nur die Texte und laesst Admin-Werte stehen', function () {
|
||
$this->seed(RecruitingChallenge2026Seeder::class);
|
||
$incentive = Incentive::where('slug', RecruitingChallenge2026Seeder::SLUG)->firstOrFail();
|
||
$incentive->update(['status' => 1, 'image' => 'challenge.jpg', 'bonus_rank_1' => 999, 'description' => 'alt']);
|
||
|
||
$this->seed(RecruitingChallenge2026Seeder::class);
|
||
|
||
$incentive->refresh();
|
||
expect(Incentive::where('slug', RecruitingChallenge2026Seeder::SLUG)->count())->toBe(1)
|
||
->and($incentive->status)->toBe(1)
|
||
->and($incentive->image)->toBe('challenge.jpg')
|
||
->and((float) $incentive->bonus_rank_1)->toBe(999.0)
|
||
->and($incentive->description)->toContain('50 €');
|
||
});
|