c9406533bf
Конструктор креативов Яндекса закрыт 01.06.2026 — адаптивного креатива на все размеры не существует. Медийная кампания состоит из объявления на каждый размер блока со своим креативом, поэтому строка баннера стала единицей размер плюс файл плюс креатив плюс объявление. Что сделано: - у баннера появились номер креатива, номер объявления и статус модерации - кап веса баннера поднят со 150 КБ до предела Яндекса 512 КБ - слепок картиночных креативов аккаунта через creatives.get - опознание своих креативов разницей слепков до и после загрузки по размеру - запуск заводит объявление на каждый включённый баннер - модерация считается по каждому объявлению: кампания работает, если принято хотя бы одно, а деньги возвращаются только когда отклонены все Заморозка и возврат денег не тронуты, денежных выходов по-прежнему четыре. После выката на прод ПЕРЕзапустить db/03_service_bypass_policies.sql, иначе джоб модерации молча увидит ноль баннеров. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
41 lines
1.3 KiB
PHP
41 lines
1.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Exceptions\Advertising\CreativeMatchFailedException;
|
|
use App\Services\Advertising\CreativeIdMatcher;
|
|
|
|
it('matches new creatives to expected sizes', function () {
|
|
$before = [111 => [300, 250]];
|
|
$after = [111 => [300, 250], 222 => [300, 250], 333 => [728, 90]];
|
|
|
|
$matched = (new CreativeIdMatcher)->match($before, $after, [[300, 250], [728, 90]]);
|
|
|
|
expect($matched)->toBe(['300x250' => 222, '728x90' => 333]);
|
|
});
|
|
|
|
it('fails when a expected size did not appear', function () {
|
|
$before = [];
|
|
$after = [222 => [300, 250]];
|
|
|
|
expect(fn () => (new CreativeIdMatcher)->match($before, $after, [[300, 250], [728, 90]]))
|
|
->toThrow(CreativeMatchFailedException::class, '728x90');
|
|
});
|
|
|
|
it('fails when two new creatives share one size', function () {
|
|
$before = [];
|
|
$after = [222 => [300, 250], 223 => [300, 250]];
|
|
|
|
expect(fn () => (new CreativeIdMatcher)->match($before, $after, [[300, 250]]))
|
|
->toThrow(CreativeMatchFailedException::class, '300x250');
|
|
});
|
|
|
|
it('ignores new creatives of sizes we did not ask for', function () {
|
|
$before = [];
|
|
$after = [222 => [300, 250], 999 => [160, 600]];
|
|
|
|
$matched = (new CreativeIdMatcher)->match($before, $after, [[300, 250]]);
|
|
|
|
expect($matched)->toBe(['300x250' => 222]);
|
|
});
|