create(['name' => 'Alice Admin']); $otherUser = User::factory()->create(['name' => 'Bob Admin']); $group = ContactGroup::query()->create([ 'source' => 'local', 'name' => 'Benevoles', 'slug' => 'benevoles', ]); $matchingCampaign = $this->createCampaign($user, [ 'message' => 'Message filtre', 'status' => 'sent', 'selected_group_ids' => [$group->id], 'selected_group_names' => [$group->name], ]); $this->createCampaign($otherUser, [ 'message' => 'Message hors filtre', 'status' => 'failed', ])->forceFill([ 'created_at' => now()->subDays(10), ])->save(); $this->actingAs($user) ->get(route('sms-campaigns.index', [ 'from' => now()->subDay()->toDateString(), 'to' => now()->addDay()->toDateString(), 'status' => 'sent', 'user_id' => $user->id, 'group_id' => $group->id, ])) ->assertOk() ->assertSee($matchingCampaign->message) ->assertSee('Benevoles') ->assertDontSee('Message hors filtre'); } public function test_history_export_uses_current_filters(): void { $user = User::factory()->create(); $group = ContactGroup::query()->create([ 'source' => 'local', 'name' => 'Membres', 'slug' => 'membres', ]); $this->createCampaign($user, [ 'message' => 'Message exporte', 'status' => 'sent', 'selected_group_ids' => [$group->id], 'selected_group_names' => [$group->name], ]); $this->createCampaign($user, [ 'message' => 'Message ignore', 'status' => 'sent', ]); $response = $this->actingAs($user) ->get(route('sms-campaigns.export', ['group_id' => $group->id])) ->assertOk(); $csv = $response->streamedContent(); $this->assertStringContainsString('Message exporte', $csv); $this->assertStringContainsString('Membres', $csv); $this->assertStringNotContainsString('Message ignore', $csv); } public function test_expired_sms_history_can_be_pruned(): void { config(['relais_sms.default_settings.history_retention_years' => 3]); $user = User::factory()->create(); $expired = $this->createCampaign($user, ['message' => 'Ancienne campagne']) ->forceFill(['created_at' => now()->subYears(4)]); $expired->save(); $recent = $this->createCampaign($user, ['message' => 'Campagne recente']); $this->artisan('sms-campaigns:prune-history') ->assertExitCode(0); $this->assertDatabaseMissing('sms_campaigns', ['id' => $expired->id]); $this->assertDatabaseHas('sms_campaigns', ['id' => $recent->id]); } /** * @param array $attributes */ private function createCampaign(User $user, array $attributes = []): SmsCampaign { $campaign = SmsCampaign::query()->create(array_merge([ 'user_id' => $user->id, 'provider' => 'ovh', 'status' => 'sent', 'message' => 'Message', 'recipients_count' => 1, 'sent_count' => 1, 'failed_count' => 0, 'sent_at' => now(), ], $attributes)); $campaign->deliveries()->create([ 'contact_name' => 'Marie Durand', 'number' => '+33611111111', 'status' => 'sent', 'provider_message_id' => 'message-123', 'sent_at' => now(), ]); return $campaign; } }