82 lines
3.5 KiB
PHP
82 lines
3.5 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
use App\Models\AdCampaign;
|
||
|
|
use App\Models\AdCampaignBanner;
|
||
|
|
use App\Models\Tenant;
|
||
|
|
use App\Models\User;
|
||
|
|
use Illuminate\Http\UploadedFile;
|
||
|
|
use Illuminate\Support\Facades\Storage;
|
||
|
|
|
||
|
|
function bannerCampaign(): array
|
||
|
|
{
|
||
|
|
$tenant = Tenant::factory()->create();
|
||
|
|
$user = User::factory()->create(['tenant_id' => $tenant->id]);
|
||
|
|
$campaign = AdCampaign::create([
|
||
|
|
'tenant_id' => $tenant->id, 'name' => 'C', 'audience_days' => 10, 'use_uploaded_list' => false,
|
||
|
|
]);
|
||
|
|
|
||
|
|
return [$tenant, $user, $campaign];
|
||
|
|
}
|
||
|
|
|
||
|
|
it('загрузка одной картинки генерирует набор из 15 баннеров', function () {
|
||
|
|
Storage::fake('local');
|
||
|
|
[, $user, $campaign] = bannerCampaign();
|
||
|
|
|
||
|
|
$res = $this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banner-source", [
|
||
|
|
'file' => UploadedFile::fake()->image('src.jpg', 1500, 1500),
|
||
|
|
]);
|
||
|
|
|
||
|
|
$res->assertCreated()->assertJsonPath('count', 15);
|
||
|
|
expect(AdCampaignBanner::where('campaign_id', $campaign->id)->count())->toBe(15)
|
||
|
|
->and(count($res->json('banners')))->toBe(15);
|
||
|
|
expect($res->json('banners.0'))->toHaveKeys(['id', 'width', 'height', 'preview_url']);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('список баннеров и стрим превью работают', function () {
|
||
|
|
Storage::fake('local');
|
||
|
|
[, $user, $campaign] = bannerCampaign();
|
||
|
|
$this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banner-source", [
|
||
|
|
'file' => UploadedFile::fake()->image('src.jpg', 1500, 1500),
|
||
|
|
])->assertCreated();
|
||
|
|
|
||
|
|
$list = $this->actingAs($user)->getJson("/api/advertising/campaigns/{$campaign->id}/banners");
|
||
|
|
$list->assertOk();
|
||
|
|
expect(count($list->json('banners')))->toBe(15);
|
||
|
|
|
||
|
|
$bannerId = AdCampaignBanner::where('campaign_id', $campaign->id)->value('id');
|
||
|
|
$preview = $this->actingAs($user)->get("/api/advertising/campaigns/{$campaign->id}/banners/{$bannerId}/preview");
|
||
|
|
$preview->assertOk();
|
||
|
|
expect($preview->headers->get('content-type'))->toContain('image/jpeg');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('утверждение набора ставит banners_approved_at', function () {
|
||
|
|
Storage::fake('local');
|
||
|
|
[, $user, $campaign] = bannerCampaign();
|
||
|
|
$this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banner-source", [
|
||
|
|
'file' => UploadedFile::fake()->image('src.jpg', 1500, 1500),
|
||
|
|
])->assertCreated();
|
||
|
|
|
||
|
|
$this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banners/approve")->assertOk();
|
||
|
|
expect($campaign->fresh()->banners_approved_at)->not->toBeNull();
|
||
|
|
});
|
||
|
|
|
||
|
|
it('нельзя утвердить пустой набор', function () {
|
||
|
|
[, $user, $campaign] = bannerCampaign();
|
||
|
|
$this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banners/approve")->assertStatus(422);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('чужой тенант не видит баннеры (404)', function () {
|
||
|
|
Storage::fake('local');
|
||
|
|
[, $user, $campaign] = bannerCampaign();
|
||
|
|
$this->actingAs($user)->postJson("/api/advertising/campaigns/{$campaign->id}/banner-source", [
|
||
|
|
'file' => UploadedFile::fake()->image('src.jpg', 1500, 1500),
|
||
|
|
])->assertCreated();
|
||
|
|
$bannerId = AdCampaignBanner::where('campaign_id', $campaign->id)->value('id');
|
||
|
|
|
||
|
|
$otherTenant = Tenant::factory()->create();
|
||
|
|
$otherUser = User::factory()->create(['tenant_id' => $otherTenant->id]);
|
||
|
|
$this->actingAs($otherUser)->get("/api/advertising/campaigns/{$campaign->id}/banners/{$bannerId}/preview")->assertNotFound();
|
||
|
|
});
|