1414namespace phpDocumentor \Guides \Interlink ;
1515
1616use Generator ;
17+ use JsonException ;
1718use phpDocumentor \Guides \Nodes \Inline \CrossReferenceNode ;
1819use phpDocumentor \Guides \Nodes \Inline \DocReferenceNode ;
1920use phpDocumentor \Guides \Nodes \Inline \ReferenceNode ;
2021use phpDocumentor \Guides \ReferenceResolvers \Interlink \DefaultInventoryLoader ;
2122use phpDocumentor \Guides \ReferenceResolvers \Interlink \DefaultInventoryRepository ;
2223use phpDocumentor \Guides \ReferenceResolvers \Interlink \Inventory ;
2324use phpDocumentor \Guides \ReferenceResolvers \Interlink \InventoryLink ;
24- use phpDocumentor \Guides \ReferenceResolvers \Interlink \InventoryRepository ;
2525use phpDocumentor \Guides \ReferenceResolvers \Interlink \JsonLoader ;
2626use phpDocumentor \Guides \ReferenceResolvers \Messages ;
2727use phpDocumentor \Guides \ReferenceResolvers \SluggerAnchorNormalizer ;
@@ -42,7 +42,7 @@ final class InventoryLoaderTest extends TestCase
4242{
4343 private DefaultInventoryLoader $ inventoryLoader ;
4444 private JsonLoader &MockObject $ jsonLoader ;
45- private InventoryRepository $ inventoryRepository ;
45+ private DefaultInventoryRepository $ inventoryRepository ;
4646 private RenderContext &MockObject $ renderContext ;
4747 /** @var array<string, mixed> */
4848 private array $ json ;
@@ -57,7 +57,13 @@ protected function setUp(): void
5757 );
5858 $ this ->renderContext = $ this ->createMock (RenderContext::class);
5959 $ this ->inventoryRepository = new DefaultInventoryRepository (new SluggerAnchorNormalizer (), $ this ->inventoryLoader , []);
60- $ jsonString = file_get_contents (__DIR__ . '/fixtures/objects.inv.json ' );
60+ $ this ->loadObjectsJsonInv (__DIR__ . '/fixtures/objects.inv.json ' );
61+ }
62+
63+ /** @throws JsonException */
64+ public function loadObjectsJsonInv (string $ filename ): void
65+ {
66+ $ jsonString = file_get_contents ($ filename );
6167 assertIsString ($ jsonString );
6268 $ this ->json = (array ) json_decode ($ jsonString , true , 512 , JSON_THROW_ON_ERROR );
6369 $ inventory = new Inventory ('https://example.com/ ' , new SluggerAnchorNormalizer ());
@@ -83,6 +89,15 @@ public function testInventoryIsLoadedExactlyOnce(): void
8389 self ::assertGreaterThan (1 , count ($ inventory ->getGroups ()));
8490 }
8591
92+ public function testInventoryLoaderAcceptsNull (): void
93+ {
94+ $ this ->loadObjectsJsonInv (__DIR__ . '/fixtures/null-in-objects.inv.json ' );
95+ $ node = new DocReferenceNode ('SomeDocument ' , '' , 'somekey ' );
96+ $ inventory = $ this ->inventoryRepository ->getInventory ($ node , $ this ->renderContext , new Messages ());
97+ self ::assertTrue ($ inventory instanceof Inventory);
98+ self ::assertGreaterThan (1 , count ($ inventory ->getGroups ()));
99+ }
100+
86101 #[DataProvider('rawAnchorProvider ' )]
87102 public function testInventoryContainsLink (string $ expected , CrossReferenceNode $ node ): void
88103 {
0 commit comments