129 lines
4.1 KiB
PHP
129 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use App\Models\ContactGroup;
|
|
use App\Models\SmsCampaign;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
class SmsCampaignHistoryTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
public function test_history_can_be_filtered_by_status_user_group_and_dates(): void
|
|
{
|
|
$user = User::factory()->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<string, mixed> $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;
|
|
}
|
|
}
|