- 50 EUR je Neupartner bleiben; die Top 3 (500/300/200 EUR) ermittelt jetzt der Umsatz der Neupartner (wie Montenegro, ohne Einmalpunkte/Abos) - Gleichstand bei Umsatzwertung: vorn liegt, wessen letzte gezaehlte Umsatzbuchung frueher kam - Challenge-Seite: Praemie und Top-3-Darstellung auch bei Umsatzwertung, Ranglisten-Hinweis auf Umsatz (DE/EN/ES/FR) - Seeder: neue Texte und Bedingungen (Rangliste, Steuerpflicht, vergünstigter Einstieg bis 31.10.), gleicht Wertung beim Einspielen ab Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
79 lines
4.5 KiB
PHP
79 lines
4.5 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 Texte und Wertung, nicht die Admin-Werte.
|
||
* Seit 08.10.2026 zaehlt die Rangliste den Umsatz der Neupartner, die 50 EUR je Partner bleiben.
|
||
*/
|
||
it('legt die Challenge als Entwurf mit Praemie und Wertung nach Umsatz der Neupartner 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-09')
|
||
->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())->toBeFalse()
|
||
->and($incentive->ranksBySalesOfNewPartners())->toBeTrue()
|
||
->and($incentive->isCashChallenge())->toBeTrue()
|
||
->and($incentive->includesAbos())->toBeFalse()
|
||
->and($incentive->hasMinimumRequirements())->toBeFalse()
|
||
->and($incentive->description)->toContain('50 €')
|
||
->and($incentive->terms)->toContain('6. Gleichstand')->toContain('5. Rangliste')->toContain('Umsatz der neuen Partner')
|
||
->and($incentive->terms)->toContain('Die Boni werden als Bruttobeiträge ausgewiesen und unterliegen der gesetzlichen Steuer- und Sozialversicherungspflicht.')
|
||
->and($incentive->description)->toContain('Steuerpflicht: Die Boni werden als Bruttobeiträge ausgewiesen')->toContain('31. Oktober')
|
||
->and($incentive->description.$incentive->subtitle.$incentive->terms)->not->toContain('–')
|
||
->and($incentive->description.$incentive->subtitle.$incentive->terms)->not->toContain('—')
|
||
->and($incentive->description.$incentive->terms)->toContain('9. Oktober')->not->toMatch('/(?<!3)1\. Oktober/');
|
||
});
|
||
|
||
it('liefert Name, Untertitel, Beschreibung und Bedingungen auf EN, ES und FR', function (string $locale, string $date, string $tax) {
|
||
$this->seed(RecruitingChallenge2026Seeder::class);
|
||
$incentive = Incentive::where('slug', RecruitingChallenge2026Seeder::SLUG)->firstOrFail();
|
||
|
||
app()->setLocale($locale);
|
||
|
||
expect($incentive->getLang('subtitle'))->toContain('50')->not->toBe($incentive->subtitle)
|
||
->and($incentive->getLang('description'))->toContain($date)->not->toBe($incentive->description)
|
||
->and($incentive->getLang('terms'))->toContain($date)->toContain('6.')->toContain($tax)
|
||
->and($incentive->getLang('description'))->toContain($tax)
|
||
->and($incentive->getLang('name'))->toBe('Recruiting Challenge 2026/27');
|
||
})->with([
|
||
'en' => ['en', '9 October', 'gross amounts'],
|
||
'es' => ['es', '9 de octubre', 'importes brutos'],
|
||
'fr' => ['fr', '9 octobre', 'montants bruts'],
|
||
]);
|
||
|
||
it('aktualisiert beim zweiten Lauf Texte, Beginn und Wertung 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',
|
||
'qualification_start' => '2026-10-01', 'trans_description' => ['en' => null, 'es' => null, 'fr' => null],
|
||
'points_partner_onetime' => 1, 'include_sales_points' => false,
|
||
]);
|
||
|
||
$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 €')
|
||
->and($incentive->qualification_start->toDateString())->toBe('2026-10-09')
|
||
->and($incentive->points_partner_onetime)->toBe(0)
|
||
->and($incentive->includesSalesPoints())->toBeTrue()
|
||
->and($incentive->getTrans('description', 'en'))->toContain('9 October');
|
||
});
|