Files
portal/app/tests/Unit/Advertising/BannerSizesTest.php
T
Дмитрий ec8f189b07 feat(реклама): Часть 3a — ядро генерации баннеров из одной картинки (GD)
Часть 3a из 6. Чистое ядро под медийные баннеры, без БД/сети.

- BannerSizes: 15 базовых размеров блоков медийной Яндекса (1×).
- BannerGenerator::coverJpeg — GD cover-crop (масштаб+центр-обрезка) в ТОЧНЫЙ
  размер, JPEG с подбором качества под вес ≤512КБ; исключение на нечитаемой картинке.
  Логика повторяет ручной gen_banners.py (Pillow cover) владельца.

Тесты: 5/5 зелёные (квадрат/широкий/высокий, точные пиксели, вес, ошибка).
Дальше 3b: загрузка 1 картинки → все размеры → превью-галерея → утверждение.
Spec: docs/superpowers/specs/2026-07-25-yandex-reklama-medijnaya-pokazy-design.md §4

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-26 11:16:00 +03:00

25 lines
762 B
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
use App\Services\Advertising\BannerSizes;
it('отдаёт 15 базовых размеров медийной, каждый — пара положительных [w,h]', function () {
$sizes = BannerSizes::all();
expect($sizes)->toHaveCount(15);
foreach ($sizes as $s) {
expect($s)->toHaveCount(2)
->and($s[0])->toBeInt()->toBeGreaterThan(0)
->and($s[1])->toBeInt()->toBeGreaterThan(0);
}
});
it('содержит ходовые размеры (300×250, 240×400, 728×90, 970×250)', function () {
$sizes = BannerSizes::all();
expect($sizes)->toContain([300, 250])
->toContain([240, 400])
->toContain([728, 90])
->toContain([970, 250]);
});