fix(release): repack zip root-level for the Composer registry #14

Merged
haylan merged 10 commits from fix/release-registry-zip into main 2026-10-03 23:21:08 +00:00
3 changed files with 128 additions and 0 deletions
Showing only changes of commit 8afe30b476 - Show all commits

No files matched your search

@@ -0,0 +1,46 @@
<?php declare(strict_types=1);
namespace AeonDumpManager\Tests\MessageQueue\Handler;
use AeonDumpManager\MessageQueue\Handler\CreateDumpHandler;
use AeonDumpManager\MessageQueue\Message\CreateDumpMessage;
use AeonDumpManager\Service\DumpJobStatusService;
use AeonDumpManager\Service\DumpService;
use AeonDumpManager\Tests\Support\RecordingLogger;
use PHPUnit\Framework\TestCase;
class CreateDumpHandlerTest extends TestCase
{
public function testLogsStartOnSuccess(): void
{
$status = $this->createMock(DumpJobStatusService::class);
$status->expects(self::once())->method('markRunning')->with('job-1');
$status->expects(self::never())->method('markFailed');
$logger = new RecordingLogger();
(new CreateDumpHandler($this->createMock(DumpService::class), $status, $logger))(new CreateDumpMessage('job-1'));
self::assertCount(1, $logger->records);
self::assertSame('info', $logger->records[0]['level']);
self::assertSame('Dump job started.', $logger->records[0]['message']);
self::assertSame(['jobId' => 'job-1'], $logger->records[0]['context']);
}
public function testLogsErrorAndMarksFailedWhenCreateThrows(): void
{
$exception = new \RuntimeException('boom');
$service = $this->createMock(DumpService::class);
$service->method('createAsync')->willThrowException($exception);
$status = $this->createMock(DumpJobStatusService::class);
$status->expects(self::once())->method('markFailed')->with('job-2', 'boom');
$logger = new RecordingLogger();
(new CreateDumpHandler($service, $status, $logger))(new CreateDumpMessage('job-2'));
self::assertCount(2, $logger->records);
self::assertSame('error', $logger->records[1]['level']);
self::assertSame('Dump job failed.', $logger->records[1]['message']);
self::assertSame('job-2', $logger->records[1]['context']['jobId']);
self::assertSame($exception, $logger->records[1]['context']['exception']);
}
}
+66
View File
@@ -0,0 +1,66 @@
<?php declare(strict_types=1);
namespace AeonDumpManager\Tests\Service;
use AeonDumpManager\Service\DumpBinaryLocator;
use AeonDumpManager\Service\DumpFilenameParser;
use AeonDumpManager\Service\DumpLister;
use AeonDumpManager\Service\DumpService;
use AeonDumpManager\Service\Exception\DumpNotFoundException;
use AeonDumpManager\Tests\Support\RecordingLogger;
use Doctrine\DBAL\Connection;
use League\Flysystem\FilesystemOperator;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Shopware\Core\System\SystemConfig\SystemConfigService;
class DumpServiceLoggingTest extends TestCase
{
private const FILENAME = 'dump_2026-09-14_15-04-05.sql.gz';
private FilesystemOperator&MockObject $filesystem;
private RecordingLogger $logger;
private DumpService $service;
protected function setUp(): void
{
$this->filesystem = $this->createMock(FilesystemOperator::class);
$this->logger = new RecordingLogger();
$this->service = new DumpService(
$this->createMock(DumpLister::class),
$this->filesystem,
$this->createMock(DumpBinaryLocator::class),
$this->createMock(Connection::class),
$this->createMock(SystemConfigService::class),
new DumpFilenameParser(),
$this->logger,
);
}
public function testDeleteLogsInfo(): void
{
$this->filesystem->method('fileExists')->willReturn(true);
$this->filesystem->expects(self::once())->method('delete')->with(DumpLister::path(self::FILENAME));
$this->service->delete(self::FILENAME);
self::assertSame(
[['level' => 'info', 'message' => 'Dump deleted.', 'context' => ['filename' => self::FILENAME]]],
$this->logger->records
);
}
public function testDeleteMissingDumpDoesNotLog(): void
{
$this->filesystem->method('fileExists')->willReturn(false);
try {
$this->service->delete(self::FILENAME);
self::fail('Expected DumpNotFoundException.');
} catch (DumpNotFoundException) {
self::assertSame([], $this->logger->records);
}
}
}
+16
View File
@@ -0,0 +1,16 @@
<?php declare(strict_types=1);
namespace AeonDumpManager\Tests\Support;
use Psr\Log\AbstractLogger;
class RecordingLogger extends AbstractLogger
{
/** @var list<array{level: string, message: string, context: array<mixed>}> */
public array $records = [];
public function log($level, string|\Stringable $message, array $context = []): void
{
$this->records[] = ['level' => (string) $level, 'message' => (string) $message, 'context' => $context];
}
}