File: /home/xedaptot/ai.naniguide.com/tests/Feature/AdAudienceFeatureTest.php
<?php
use App\Model\AdAudience;
test('ad audience types are valid', function () {
expect(AdAudience::TYPES)->toBe(['custom', 'lookalike', 'saved']);
});
test('ad audience statuses are valid', function () {
expect(AdAudience::STATUSES)->toBe(['draft', 'syncing', 'synced', 'error', 'stale']);
});
test('ad audience type labels exist for all types', function () {
foreach (AdAudience::TYPES as $type) {
expect(AdAudience::TYPE_LABELS)->toHaveKey($type);
}
});
test('ad audience status badge map exists for all statuses', function () {
foreach (AdAudience::STATUSES as $status) {
expect(AdAudience::STATUS_BADGE_MAP)->toHaveKey($status);
expect(AdAudience::STATUS_BADGE_MAP[$status])->toBeIn(['green', 'orange', 'red', 'blue']);
}
});
test('ad audience fillable fields are correct', function () {
$audience = new AdAudience();
expect($audience->getFillable())->toContain('name', 'type', 'customer_id', 'platform', 'settings');
});
test('ad audience casts are correct', function () {
$audience = new AdAudience();
$casts = $audience->getCasts();
expect($casts['settings'])->toBe('json');
expect($casts)->toHaveKey('last_synced_at');
expect($casts['size_estimate'])->toBe('integer');
});
test('ad audience type label accessor works', function () {
$audience = new AdAudience();
$audience->type = AdAudience::TYPE_CUSTOM;
expect($audience->type_label)->toBe('Custom Audience');
$audience->type = AdAudience::TYPE_LOOKALIKE;
expect($audience->type_label)->toBe('Lookalike Audience');
});
test('ad audience status badge accessor works', function () {
$audience = new AdAudience();
$audience->status = AdAudience::STATUS_SYNCED;
expect($audience->status_badge)->toBe('green');
$audience->status = AdAudience::STATUS_ERROR;
expect($audience->status_badge)->toBe('red');
$audience->status = AdAudience::STATUS_SYNCING;
expect($audience->status_badge)->toBe('blue');
});
test('ad audience size display formats correctly', function () {
$audience = new AdAudience();
$audience->size_estimate = null;
expect($audience->size_display)->toBe('-');
$audience->size_estimate = 500;
expect($audience->size_display)->toBe('500');
$audience->size_estimate = 5000;
expect($audience->size_display)->toContain('K');
$audience->size_estimate = 2000000;
expect($audience->size_display)->toContain('M');
});
test('ad audience helper methods work', function () {
$audience = new AdAudience();
$audience->status = AdAudience::STATUS_SYNCED;
expect($audience->isSynced())->toBeTrue();
$audience->status = AdAudience::STATUS_SYNCING;
expect($audience->isSyncing())->toBeTrue();
$audience->status = AdAudience::STATUS_ERROR;
expect($audience->hasError())->toBeTrue();
});
test('ad audience can be created via factory', function () {
$audience = AdAudience::factory()->make(['customer_id' => 1]);
expect($audience->name)->not->toBeEmpty();
expect($audience->type)->toBeIn(AdAudience::TYPES);
});