Skip to content

Commit fbb4e1c

Browse files
committed
Now loading assets via twig, fixed timeout issues with task, fixed admin menu access
1 parent 60735ae commit fbb4e1c

6 files changed

Lines changed: 105 additions & 16 deletions

File tree

Annotations/AnnotationGenerator.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -964,8 +964,8 @@ protected function getExampleIfAvailable(string $url, bool $useLocalToken = fals
964964
$httpMethod = 'GET'
965965
);
966966
} catch (\Throwable $e) {
967-
// Add a little bit more context for troubleshooting the failed request
968-
throw new \Exception('Error getting example from URL: ' . $url . PHP_EOL . $e, 0, $e);
967+
// Example lookups are best-effort. Timeouts and other transport failures should not abort spec generation.
968+
return '';
969969
}
970970

971971
// If the example didn't load or resulted in an error, simply return an empty string

Menu.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Menu extends \Piwik\Plugin\Menu
1616
{
1717
public function configureAdminMenu(MenuAdmin $menu): void
1818
{
19-
if (!Piwik::hasUserSuperUserAccess()) {
19+
if (!Piwik::isUserHasSomeViewAccess()) {
2020
return;
2121
}
2222

OpenApiDocs.php

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,10 @@ class OpenApiDocs extends \Piwik\Plugin
2323
public function registerEvents()
2424
{
2525
return [
26-
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
27-
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
2826
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
2927
];
3028
}
3129

32-
public function getStylesheetFiles(&$stylesheets): void
33-
{
34-
$stylesheets[] = 'plugins/OpenApiDocs/vue/lib/swagger-ui/swagger-ui.css';
35-
$stylesheets[] = 'plugins/OpenApiDocs/vue/src/SwaggerPage/swagger-ui-overrides.css';
36-
}
37-
38-
public function getJsFiles(&$jsFiles): void
39-
{
40-
$jsFiles[] = 'plugins/OpenApiDocs/vue/lib/swagger-ui/swagger-ui-bundle.js';
41-
}
42-
4330
public function getClientSideTranslationKeys(&$translationKeys): void
4431
{
4532
$translationKeys[] = 'CoreHome_LearnMoreFullStop';

templates/swagger.twig

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
{% extends 'admin.twig' %}
22

3+
{% block head %}
4+
{{ parent() }}
5+
<link rel="stylesheet" href="plugins/OpenApiDocs/vue/lib/swagger-ui/swagger-ui.css" />
6+
<link rel="stylesheet" href="plugins/OpenApiDocs/vue/src/SwaggerPage/swagger-ui-overrides.css" />
7+
<script src="plugins/OpenApiDocs/vue/lib/swagger-ui/swagger-ui-bundle.js"></script>
8+
{% endblock %}
9+
310
{% set title %}{{ 'OpenApiDocs_SwaggerApi'|translate }}{% endset %}
411

512
{% block content %}

tests/Integration/ControllerTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ public function testSwaggerRendersAdminPageForViewAccess(): void
9191

9292
$this->assertNotSame('', $html);
9393
$this->assertStringContainsString('vue-entry="OpenApiDocs.SwaggerPage"', $html);
94+
$this->assertStringContainsString('plugins/OpenApiDocs/vue/lib/swagger-ui/swagger-ui.css', $html);
95+
$this->assertStringContainsString('plugins/OpenApiDocs/vue/src/SwaggerPage/swagger-ui-overrides.css', $html);
96+
$this->assertStringContainsString('plugins/OpenApiDocs/vue/lib/swagger-ui/swagger-ui-bundle.js', $html);
9497
$this->assertStringContainsString('Swagger', $html);
9598
}
9699

tests/Integration/MenuTest.php

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<?php
2+
3+
/**
4+
* Matomo - free/libre analytics platform
5+
*
6+
* @link https://matomo.org
7+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8+
*/
9+
10+
declare(strict_types=1);
11+
12+
namespace Piwik\Plugins\OpenApiDocs\tests\Integration;
13+
14+
use Piwik\Cache;
15+
use Piwik\Menu\MenuAdmin;
16+
use Piwik\Plugin\Manager;
17+
use Piwik\Tests\Framework\Fixture;
18+
use Piwik\Tests\Framework\Mock\FakeAccess;
19+
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
20+
21+
/**
22+
* @group OpenApiDocs
23+
* @group MenuTest
24+
* @group Plugins
25+
*/
26+
class MenuTest extends IntegrationTestCase
27+
{
28+
public function setUp(): void
29+
{
30+
parent::setUp();
31+
32+
Fixture::createSuperUser();
33+
if (!Fixture::siteCreated(1)) {
34+
Fixture::createWebsite('2012-01-01 00:00:00');
35+
}
36+
37+
Manager::getInstance()->loadPlugin('OpenApiDocs');
38+
}
39+
40+
public function provideContainerConfig(): array
41+
{
42+
return ['Piwik\Access' => new FakeAccess()];
43+
}
44+
45+
public function tearDown(): void
46+
{
47+
Cache::getTransientCache()->flushAll();
48+
MenuAdmin::unsetInstance();
49+
50+
parent::tearDown();
51+
}
52+
53+
public function testConfigureAdminMenuAddsSwaggerItemForViewAccess(): void
54+
{
55+
FakeAccess::clearAccess(
56+
$superUser = false,
57+
$idSitesAdmin = [0],
58+
$idSitesView = [1],
59+
$identity = 'viewAccessUser'
60+
);
61+
62+
$items = $this->buildConfiguredMenu()->getMenu();
63+
64+
$this->assertArrayHasKey('CorePluginsAdmin_MenuPlatform', $items);
65+
$this->assertArrayHasKey('OpenApiDocs_SwaggerApi', $items['CorePluginsAdmin_MenuPlatform']);
66+
}
67+
68+
public function testConfigureAdminMenuSkipsSwaggerItemWithoutViewAccess(): void
69+
{
70+
FakeAccess::clearAccess(
71+
$superUser = false,
72+
$idSitesAdmin = [],
73+
$idSitesView = [],
74+
$identity = 'noAccessUser'
75+
);
76+
77+
$items = $this->buildConfiguredMenu()->getMenu();
78+
79+
if (!isset($items['CorePluginsAdmin_MenuPlatform'])) {
80+
$this->assertArrayNotHasKey('CorePluginsAdmin_MenuPlatform', $items);
81+
return;
82+
}
83+
84+
$this->assertArrayNotHasKey('OpenApiDocs_SwaggerApi', $items['CorePluginsAdmin_MenuPlatform']);
85+
}
86+
87+
private function buildConfiguredMenu(): MenuAdmin
88+
{
89+
MenuAdmin::unsetInstance();
90+
return MenuAdmin::getInstance();
91+
}
92+
}

0 commit comments

Comments
 (0)