Skip to content

Commit c2f249b

Browse files
committed
Add nullable information to Subscriber ArgumentMetadata
1 parent ac1cf70 commit c2f249b

9 files changed

Lines changed: 48 additions & 21 deletions

phpstan-baseline.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ parameters:
463463
path: tests/Unit/Message/Translator/ReplaceEventTranslatorTest.php
464464

465465
-
466-
message: '#^Method class@anonymous/tests/Unit/Metadata/Subscriber/AttributeSubscriberMetadataFactoryTest\.php\:212\:\:profileVisited\(\) has parameter \$message with no type specified\.$#'
466+
message: '#^Method class@anonymous/tests/Unit/Metadata/Subscriber/AttributeSubscriberMetadataFactoryTest\.php\:237\:\:profileVisited\(\) has parameter \$message with no type specified\.$#'
467467
identifier: missingType.parameter
468468
count: 1
469469
path: tests/Unit/Metadata/Subscriber/AttributeSubscriberMetadataFactoryTest.php

src/Metadata/Subscriber/ArgumentMetadata.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ final class ArgumentMetadata
99
public function __construct(
1010
public readonly string $name,
1111
public readonly string $type,
12+
public readonly bool $allowsNull = false,
1213
) {
1314
}
1415
}

src/Metadata/Subscriber/AttributeSubscriberMetadataFactory.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ private function subscribeMethod(ReflectionMethod $method): SubscribeMethodMetad
151151
$arguments[] = new ArgumentMetadata(
152152
$parameter->getName(),
153153
$type->getName(),
154+
$parameter->allowsNull(),
154155
);
155156
}
156157

tests/Unit/Metadata/Subscriber/AttributeSubscriberMetadataFactoryTest.php

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,13 +191,38 @@ public function profileCreated(ProfileCreated $profileCreated, string $aggregate
191191
[
192192
ProfileVisited::class => [
193193
new SubscribeMethodMetadata('profileVisited', [
194-
new ArgumentMetadata('message', Message::class),
194+
new ArgumentMetadata('message', Message::class, false),
195195
]),
196196
],
197197
ProfileCreated::class => [
198198
new SubscribeMethodMetadata('profileCreated', [
199-
new ArgumentMetadata('profileCreated', ProfileCreated::class),
200-
new ArgumentMetadata('aggregateId', 'string'),
199+
new ArgumentMetadata('profileCreated', ProfileCreated::class, false),
200+
new ArgumentMetadata('aggregateId', 'string', false),
201+
]),
202+
],
203+
],
204+
$metadata->subscribeMethods,
205+
);
206+
}
207+
208+
public function testSubscribeNullableAttribute(): void
209+
{
210+
$subscriber = new #[Subscriber('foo', RunMode::FromBeginning)]
211+
class {
212+
#[Subscribe(ProfileVisited::class)]
213+
public function profileVisited(ProfileVisited|null $message): void
214+
{
215+
}
216+
};
217+
218+
$metadataFactory = new AttributeSubscriberMetadataFactory();
219+
$metadata = $metadataFactory->metadata($subscriber::class);
220+
221+
self::assertEquals(
222+
[
223+
ProfileVisited::class => [
224+
new SubscribeMethodMetadata('profileVisited', [
225+
new ArgumentMetadata('message', ProfileVisited::class, true),
201226
]),
202227
],
203228
],

tests/Unit/Subscription/Subscriber/ArgumentResolver/AggregateIdArgumentResolverTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,21 @@ public function testSupport(): void
2626

2727
self::assertTrue(
2828
$resolver->support(
29-
new ArgumentMetadata('aggregateId', Uuid::class),
29+
new ArgumentMetadata('aggregateId', Uuid::class, false),
3030
ProfileCreated::class,
3131
),
3232
);
3333

3434
self::assertTrue(
3535
$resolver->support(
36-
new ArgumentMetadata('aggregateRootId', ProfileId::class),
36+
new ArgumentMetadata('aggregateRootId', ProfileId::class, false),
3737
ProfileCreated::class,
3838
),
3939
);
4040

4141
self::assertFalse(
4242
$resolver->support(
43-
new ArgumentMetadata('foo', ProfileCreated::class),
43+
new ArgumentMetadata('foo', ProfileCreated::class, false),
4444
ProfileCreated::class,
4545
),
4646
);
@@ -58,7 +58,7 @@ public function testResolve(): void
5858
self::assertEquals(
5959
new CustomId('bar'),
6060
$resolver->resolve(
61-
new ArgumentMetadata('foo', CustomId::class),
61+
new ArgumentMetadata('foo', CustomId::class, false),
6262
$message,
6363
),
6464
);

tests/Unit/Subscription/Subscriber/ArgumentResolver/EventArgumentResolverTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ public function testSupport(): void
2222

2323
self::assertTrue(
2424
$resolver->support(
25-
new ArgumentMetadata('foo', ProfileCreated::class),
25+
new ArgumentMetadata('foo', ProfileCreated::class, false),
2626
ProfileCreated::class,
2727
),
2828
);
2929

3030
self::assertFalse(
3131
$resolver->support(
32-
new ArgumentMetadata('foo', ProfileVisited::class),
32+
new ArgumentMetadata('foo', ProfileVisited::class, false),
3333
ProfileCreated::class,
3434
),
3535
);
@@ -45,7 +45,7 @@ public function testResolve(): void
4545
self::assertSame(
4646
$event,
4747
$resolver->resolve(
48-
new ArgumentMetadata('foo', ProfileVisited::class),
48+
new ArgumentMetadata('foo', ProfileVisited::class, false),
4949
$message,
5050
),
5151
);

tests/Unit/Subscription/Subscriber/ArgumentResolver/LookupResolverTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ public function testSupport(): void
3232

3333
self::assertTrue(
3434
$resolver->support(
35-
new ArgumentMetadata('lookup', Lookup::class),
35+
new ArgumentMetadata('lookup', Lookup::class, false),
3636
ProfileCreated::class,
3737
),
3838
);
3939

4040
self::assertFalse(
4141
$resolver->support(
42-
new ArgumentMetadata('foo', ProfileCreated::class),
42+
new ArgumentMetadata('foo', ProfileCreated::class, false),
4343
ProfileCreated::class,
4444
),
4545
);
@@ -61,7 +61,7 @@ public function testResolve(): void
6161
);
6262

6363
$lookup = $resolver->resolve(
64-
new ArgumentMetadata('foo', Lookup::class),
64+
new ArgumentMetadata('foo', Lookup::class, false),
6565
$message,
6666
);
6767

tests/Unit/Subscription/Subscriber/ArgumentResolver/MessageArgumentResolverTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ public function testSupport(): void
2020

2121
self::assertTrue(
2222
$resolver->support(
23-
new ArgumentMetadata('foo', Message::class),
23+
new ArgumentMetadata('foo', Message::class, false),
2424
'qux',
2525
),
2626
);
2727

2828
self::assertFalse(
2929
$resolver->support(
30-
new ArgumentMetadata('foo', 'bar'),
30+
new ArgumentMetadata('foo', 'bar', false),
3131
'qux',
3232
),
3333
);
@@ -41,7 +41,7 @@ public function testResolve(): void
4141
self::assertSame(
4242
$message,
4343
$resolver->resolve(
44-
new ArgumentMetadata('foo', Message::class),
44+
new ArgumentMetadata('foo', Message::class, false),
4545
$message,
4646
),
4747
);

tests/Unit/Subscription/Subscriber/ArgumentResolver/RecordedOnArgumentResolverTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ public function testSupport(): void
2323

2424
self::assertTrue(
2525
$resolver->support(
26-
new ArgumentMetadata('foo', DateTimeImmutable::class),
26+
new ArgumentMetadata('foo', DateTimeImmutable::class, false),
2727
'qux',
2828
),
2929
);
3030

3131
self::assertFalse(
3232
$resolver->support(
33-
new ArgumentMetadata('foo', 'bar'),
33+
new ArgumentMetadata('foo', 'bar', false),
3434
'qux',
3535
),
3636
);
@@ -53,7 +53,7 @@ public function testResolveFromAggregateHeader(): void
5353
self::assertSame(
5454
$date,
5555
$resolver->resolve(
56-
new ArgumentMetadata('foo', DateTimeImmutable::class),
56+
new ArgumentMetadata('foo', DateTimeImmutable::class, false),
5757
$message,
5858
),
5959
);
@@ -69,7 +69,7 @@ public function testResolveFromRecordedOnHeader(): void
6969
self::assertSame(
7070
$date,
7171
$resolver->resolve(
72-
new ArgumentMetadata('foo', DateTimeImmutable::class),
72+
new ArgumentMetadata('foo', DateTimeImmutable::class, false),
7373
$message,
7474
),
7575
);

0 commit comments

Comments
 (0)