Skip to content

Commit 3f44c47

Browse files
committed
test: expand menu coverage
1 parent e985cce commit 3f44c47

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

tests/src/Kernel/MenuEndpointTest.php

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ protected function setUp(): void {
9090
'label' => 'Main navigation',
9191
])->save();
9292

93+
Menu::create([
94+
'id' => 'empty',
95+
'label' => 'Empty menu',
96+
])->save();
97+
9398
Node::create([
9499
'type' => 'page',
95100
'title' => 'About Us',
@@ -139,6 +144,18 @@ protected function setUp(): void {
139144
]);
140145
$external->save();
141146
$this->ids['external'] = 'menu_link_content:' . $external->uuid();
147+
148+
$login = MenuLinkContent::create([
149+
'title' => 'Login',
150+
'menu_name' => 'main',
151+
'link' => ['uri' => 'internal:/user/login'],
152+
]);
153+
$login->save();
154+
$this->ids['login'] = 'menu_link_content:' . $login->uuid();
155+
156+
$this->config('jsonapi_frontend.settings')
157+
->set('drupal_base_url', 'https://cms.example.com')
158+
->save();
142159
}
143160

144161
public function testMenuActiveTrailAndResolve(): void {
@@ -187,6 +204,54 @@ public function testMenuActiveTrailAndResolve(): void {
187204
$this->assertNull($external['resolve']);
188205
}
189206

207+
public function testMenuNotFoundReturns404(): void {
208+
$this->container->get('current_user')->setAccount(new AnonymousUserSession());
209+
210+
$controller = \Drupal\jsonapi_frontend_menu\Controller\MenuController::create($this->container);
211+
$request = Request::create('/jsonapi/menu/does-not-exist', 'GET', [
212+
'_format' => 'json',
213+
]);
214+
215+
$response = $controller->menu($request, 'does-not-exist');
216+
$this->assertSame(404, $response->getStatusCode());
217+
}
218+
219+
public function testEmptyMenuReturns200WithNoItems(): void {
220+
$this->container->get('current_user')->setAccount(new AnonymousUserSession());
221+
222+
$controller = \Drupal\jsonapi_frontend_menu\Controller\MenuController::create($this->container);
223+
$request = Request::create('/jsonapi/menu/empty', 'GET', [
224+
'_format' => 'json',
225+
]);
226+
227+
$response = $controller->menu($request, 'empty');
228+
$this->assertSame(200, $response->getStatusCode());
229+
230+
$payload = json_decode((string) $response->getContent(), TRUE);
231+
$this->assertIsArray($payload);
232+
$this->assertSame('empty', $payload['meta']['menu']);
233+
$this->assertSame([], $payload['data']);
234+
}
235+
236+
public function testUnresolvedInternalLinksFallBackToRouteKind(): void {
237+
$this->container->get('current_user')->setAccount(new AnonymousUserSession());
238+
239+
$controller = \Drupal\jsonapi_frontend_menu\Controller\MenuController::create($this->container);
240+
$request = Request::create('/jsonapi/menu/main', 'GET', [
241+
'_format' => 'json',
242+
]);
243+
244+
$response = $controller->menu($request, 'main');
245+
$payload = json_decode((string) $response->getContent(), TRUE);
246+
247+
$login = $this->findItemById($payload['data'], $this->ids['login']);
248+
$this->assertNotNull($login);
249+
250+
$this->assertTrue($login['resolve']['resolved']);
251+
$this->assertSame('route', $login['resolve']['kind']);
252+
$this->assertStringContainsString('/user/login', (string) $login['resolve']['drupal_url']);
253+
}
254+
190255
public function testResolveCanBeDisabled(): void {
191256
$this->container->get('current_user')->setAccount(new AnonymousUserSession());
192257

0 commit comments

Comments
 (0)