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