HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
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);
});