feat(fixtures): committed test photo.png + doc.pdf, helper prefers storage/uploads override
All checks were successful
Deploy Max Bot Test / deploy (push) Successful in 12s

Commands /upload_photo_file, /upload_file now resolve from fixtures/ by default. Drop your own files in storage/uploads/ to override without touching git. audio.mp3 and video.mp4 still need to be added manually (no ffmpeg locally to generate).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
pkirillw
2026-06-18 01:05:31 +03:00
parent 2f56578d7a
commit c431988e81
3 changed files with 31 additions and 5 deletions

14
fixtures/doc.pdf Normal file
View File

@@ -0,0 +1,14 @@
%PDF-1.4
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 200 200]/Parent 2 0 R/Resources<<>>>>endobj
xref
0 4
0000000000 65535 f
0000000009 00000 n
0000000054 00000 n
0000000099 00000 n
trailer<</Size 4/Root 1 0 R>>
startxref
168
%%EOF

BIN
fixtures/photo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

View File

@@ -17,6 +17,18 @@ final class UploadsScenario extends AbstractScenario
private const DEFAULT_PHOTO_URL = 'https://placehold.co/600x400/png';
private const DEFAULT_FILE_URL = 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf';
/**
* Look for a fixture in storage/uploads/ (override, gitignored) first, fall back to fixtures/ (committed).
*/
private static function fixturePath(string $filename): string
{
$override = __DIR__ . '/../../storage/uploads/' . $filename;
if (is_file($override)) {
return $override;
}
return __DIR__ . '/../../fixtures/' . $filename;
}
public function handle(MessageCreatedUpdate $update, ParsedCommand $command): void
{
switch ($command->name) {
@@ -49,9 +61,9 @@ final class UploadsScenario extends AbstractScenario
private function uploadPhotoFromFile(MessageCreatedUpdate $update, ParsedCommand $command): void
{
$path = $command->arg(0, __DIR__ . '/../../storage/uploads/photo.png');
$path = $command->arg(0, self::fixturePath('photo.png'));
if (!is_file($path)) {
$this->replyMarkdown($update, "File not found: `$path`. Положи PNG в storage/uploads/photo.png.");
$this->replyMarkdown($update, "File not found: `$path`. Положи PNG в fixtures/photo.png или storage/uploads/photo.png.");
return;
}
$tokens = $this->api->uploads->uploadPhotoFromFile($path);
@@ -85,15 +97,15 @@ final class UploadsScenario extends AbstractScenario
private function uploadMediaFromFile(MessageCreatedUpdate $update, ParsedCommand $command, UploadType $type): void
{
$default = __DIR__ . '/../../storage/uploads/' . match ($type) {
$filename = match ($type) {
UploadType::Audio => 'audio.mp3',
UploadType::Video => 'video.mp4',
UploadType::File => 'doc.pdf',
UploadType::Photo => 'photo.png',
};
$path = $command->arg(0, $default);
$path = $command->arg(0, self::fixturePath($filename));
if (!is_file($path)) {
$this->replyMarkdown($update, "File not found: `$path`. Положи файл в storage/uploads/.");
$this->replyMarkdown($update, "File not found: `$path`. Положи файл в fixtures/ или storage/uploads/.");
return;
}
$info = $this->api->uploads->uploadMediaFromFile($type, $path);