create([ 'classification' => PressReleaseClassification::Green->value, 'status' => PressReleaseStatus::Published->value, ]); app(PressReleaseService::class)->reclassifyIfClassified($pressRelease); Queue::assertPushedOn('classification', ClassifyPressRelease::class, function (ClassifyPressRelease $job) use ($pressRelease) { return $job->pressReleaseId === $pressRelease->id && $job->route === false; }); }); test('reclassifyIfClassified does nothing for a never-classified press release', function () { Queue::fake(); $pressRelease = PressRelease::factory()->create(['classification' => null]); app(PressReleaseService::class)->reclassifyIfClassified($pressRelease); Queue::assertNothingPushed(); }); test('api update of a classified press release re-classifies when the content changes', function () { /** @var TestCase $this */ Queue::fake(); $user = User::factory()->create(); $company = Company::factory()->presseecho()->create(); $category = Category::factory()->withTranslations()->create(); $user->companies()->attach($company->id, ['role' => 'owner']); $pressRelease = PressRelease::factory()->create([ 'user_id' => $user->id, 'company_id' => $company->id, 'category_id' => $category->id, 'portal' => $company->portal->value, 'status' => PressReleaseStatus::Draft->value, 'classification' => PressReleaseClassification::Green->value, ]); Sanctum::actingAs($user, ['press-releases:write']); $this->patchJson("/api/v1/press-releases/{$pressRelease->id}", [ 'text' => 'Komplett neuer Inhalt, der erneut geprüft werden muss.', ])->assertOk(); Queue::assertPushed(ClassifyPressRelease::class, fn (ClassifyPressRelease $job) => $job->route === false); }); test('api update does not re-classify when content is unchanged', function () { /** @var TestCase $this */ Queue::fake(); $user = User::factory()->create(); $company = Company::factory()->presseecho()->create(); $category = Category::factory()->withTranslations()->create(); $user->companies()->attach($company->id, ['role' => 'owner']); $pressRelease = PressRelease::factory()->create([ 'user_id' => $user->id, 'company_id' => $company->id, 'category_id' => $category->id, 'portal' => $company->portal->value, 'status' => PressReleaseStatus::Draft->value, 'classification' => PressReleaseClassification::Green->value, 'keywords' => 'alt', ]); Sanctum::actingAs($user, ['press-releases:write']); // Nur Keywords ändern – kein Titel/Text → keine Neuklassifikation. $this->patchJson("/api/v1/press-releases/{$pressRelease->id}", [ 'keywords' => 'neu', ])->assertOk(); Queue::assertNothingPushed(); });