Skip to content

Commit

Permalink
Merge pull request #1023 from spiral/bugfix/serializer-attr
Browse files Browse the repository at this point in the history
  • Loading branch information
spiralbot committed Dec 8, 2023
1 parent 7f5cd40 commit 09a4b78
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 9 deletions.
11 changes: 2 additions & 9 deletions src/SerializerLocatorListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
use Spiral\Queue\Attribute\JobHandler as JobHandlerAttribute;
use Spiral\Queue\Attribute\Serializer;
use Spiral\Queue\Config\QueueConfig;
use Spiral\Queue\Exception\InvalidArgumentException;
use Spiral\Tokenizer\Attribute\TargetAttribute;
use Spiral\Tokenizer\TokenizationListenerInterface;

Expand All @@ -18,13 +17,10 @@ final class SerializerLocatorListener implements TokenizationListenerInterface
public function __construct(
private readonly ReaderInterface $reader,
private readonly QueueRegistry $registry,
private readonly QueueConfig $config
private readonly QueueConfig $config,
) {
}

/**
* @throws InvalidArgumentException
*/
public function listen(\ReflectionClass $class): void
{
$attribute = $this->reader->firstClassMetadata($class, Serializer::class);
Expand All @@ -39,9 +35,6 @@ public function finalize(): void
{
}

/**
* @throws InvalidArgumentException
*/
private function getJobType(\ReflectionClass $class): string
{
$attribute = $this->reader->firstClassMetadata($class, JobHandlerAttribute::class);
Expand All @@ -59,6 +52,6 @@ private function getJobType(\ReflectionClass $class): string
}
}

throw new InvalidArgumentException(\sprintf('Unable to locate job type for `%s`.', $class->getName()));
return $class->getName();
}
}
30 changes: 30 additions & 0 deletions tests/SerializerLocatorListenerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,34 @@ public function testListenWithJobTypeFromAttribute(): void

$this->assertEquals(new PhpSerializer(), $registry->getSerializer('test'));
}

public function testListenWithJobTypeFromClass(): void
{
$handler = new class($this->createMock(InvokerInterface::class)) extends JobHandler {};

$container = new Container();
$container->bind('test', new PhpSerializer());
$container->bind(SerializerRegistryInterface::class, SerializerRegistry::class);

$registry = new QueueRegistry(
$container,
$container,
$this->createMock(HandlerRegistryInterface::class)
);

$reader = m::mock(ReaderInterface::class);
$reader
->shouldReceive('firstClassMetadata')
->with(m::type(\ReflectionClass::class), Serializer::class)
->andReturn(new Serializer('test'));
$reader
->shouldReceive('firstClassMetadata')
->with(m::type(\ReflectionClass::class), \Spiral\Queue\Attribute\JobHandler::class)
->andReturnNull();

$listener = new SerializerLocatorListener($reader, $registry, new QueueConfig());
$listener->listen(new \ReflectionClass($handler::class));

$this->assertEquals(new PhpSerializer(), $registry->getSerializer($handler::class));
}
}

0 comments on commit 09a4b78

Please sign in to comment.