create([ 'classification' => PressReleaseClassification::Yellow->value, 'classified_at' => now(), ]); $fresh = $pressRelease->fresh(); expect($fresh->classification)->toBe(PressReleaseClassification::Yellow); expect($fresh->classified_at)->toBeInstanceOf(Carbon::class); }); test('classification defaults to null when not set', function () { $pressRelease = PressRelease::factory()->create(); expect($pressRelease->fresh()->classification)->toBeNull(); expect($pressRelease->fresh()->classified_at)->toBeNull(); }); test('press release has many ki audits ordered newest first', function () { $pressRelease = PressRelease::factory()->create(); $older = KiAudit::factory()->for($pressRelease)->create(['created_at' => now()->subDay()]); $newer = KiAudit::factory()->for($pressRelease)->create(['created_at' => now()]); $audits = $pressRelease->kiAudits()->get(); expect($audits)->toHaveCount(2); expect($audits->first()->id)->toBe($newer->id); expect($audits->last()->id)->toBe($older->id); }); test('ki audit casts raw_response to an array and belongs to its press release', function () { $pressRelease = PressRelease::factory()->create(); $audit = KiAudit::factory() ->for($pressRelease) ->classification(PressReleaseClassification::Red) ->create([ 'reason' => 'Werbliche Sprache', 'raw_response' => ['classification' => 'red', 'reasons' => ['advertising']], ]); $fresh = $audit->fresh(); expect($fresh->type)->toBe(KiAudit::TYPE_CLASSIFICATION); expect($fresh->result)->toBe(PressReleaseClassification::Red->value); expect($fresh->raw_response)->toBeArray()->toHaveKey('reasons'); expect($fresh->pressRelease->is($pressRelease))->toBeTrue(); }); test('deleting a press release cascades to its ki audits', function () { $pressRelease = PressRelease::factory()->create(); KiAudit::factory()->for($pressRelease)->create(); $pressRelease->forceDelete(); expect(KiAudit::where('press_release_id', $pressRelease->id)->exists())->toBeFalse(); });