14
14
namespace phpDocumentor \Guides \Interlink ;
15
15
16
16
use Generator ;
17
+ use JsonException ;
17
18
use phpDocumentor \Guides \Nodes \Inline \CrossReferenceNode ;
18
19
use phpDocumentor \Guides \Nodes \Inline \DocReferenceNode ;
19
20
use phpDocumentor \Guides \Nodes \Inline \ReferenceNode ;
20
21
use phpDocumentor \Guides \ReferenceResolvers \Interlink \DefaultInventoryLoader ;
21
22
use phpDocumentor \Guides \ReferenceResolvers \Interlink \DefaultInventoryRepository ;
22
23
use phpDocumentor \Guides \ReferenceResolvers \Interlink \Inventory ;
23
24
use phpDocumentor \Guides \ReferenceResolvers \Interlink \InventoryLink ;
24
- use phpDocumentor \Guides \ReferenceResolvers \Interlink \InventoryRepository ;
25
25
use phpDocumentor \Guides \ReferenceResolvers \Interlink \JsonLoader ;
26
26
use phpDocumentor \Guides \ReferenceResolvers \Messages ;
27
27
use phpDocumentor \Guides \ReferenceResolvers \SluggerAnchorNormalizer ;
@@ -42,7 +42,7 @@ final class InventoryLoaderTest extends TestCase
42
42
{
43
43
private DefaultInventoryLoader $ inventoryLoader ;
44
44
private JsonLoader &MockObject $ jsonLoader ;
45
- private InventoryRepository $ inventoryRepository ;
45
+ private DefaultInventoryRepository $ inventoryRepository ;
46
46
private RenderContext &MockObject $ renderContext ;
47
47
/** @var array<string, mixed> */
48
48
private array $ json ;
@@ -57,7 +57,13 @@ protected function setUp(): void
57
57
);
58
58
$ this ->renderContext = $ this ->createMock (RenderContext::class);
59
59
$ 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 );
61
67
assertIsString ($ jsonString );
62
68
$ this ->json = (array ) json_decode ($ jsonString , true , 512 , JSON_THROW_ON_ERROR );
63
69
$ inventory = new Inventory ('https://example.com/ ' , new SluggerAnchorNormalizer ());
@@ -83,6 +89,15 @@ public function testInventoryIsLoadedExactlyOnce(): void
83
89
self ::assertGreaterThan (1 , count ($ inventory ->getGroups ()));
84
90
}
85
91
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
+
86
101
#[DataProvider('rawAnchorProvider ' )]
87
102
public function testInventoryContainsLink (string $ expected , CrossReferenceNode $ node ): void
88
103
{
0 commit comments