mivita/tests/Feature/Incentive/RecruitingChallengeSeederTest.php
Kevin 3341c929eb Incentive (E1): "Nur fuer VIP sichtbar" und Ranglisten-Seite mit Teilnahme-Block oben
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>
2026-09-22 11:11:33 +00:00

47 lines
2.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 €');
});