You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

50 lines
1.6 KiB

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Talk\Tests\Unit;
use Test\TestCase;
class EventDocumentationTest extends TestCase {
public static function dataEventDocumentation(): array {
$dir = new \DirectoryIterator(__DIR__ . '/../../lib/Events');
$data = [];
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
$data[] = ['OCA\\Talk\\Events\\' . substr($fileinfo->getFilename(), 0, -4)];
}
}
sort($data);
return $data;
}
/**
* @dataProvider dataEventDocumentation
*/
public function testEventDocumentation(string $eventClass): void {
$reflectionClass = new \ReflectionClass($eventClass);
if ($reflectionClass->isAbstract()) {
self::assertTrue(true, 'Abstract event class ' . $eventClass . ' does not have to be documented');
return;
}
$classDocBlock = $reflectionClass->getDocComment();
if (is_string($classDocBlock) && str_contains($classDocBlock, '@deprecated')) {
self::assertTrue(true, 'Deprecated event ' . $eventClass . ' does not have to be documented');
return;
}
$docs = file_get_contents(__DIR__ . '/../../docs/events.md');
$eventIsDocumented = str_contains($docs, 'Before event: `' . $eventClass . '`')
|| str_contains($docs, 'After event: `' . $eventClass . '`')
|| str_contains($docs, 'Final event: `' . $eventClass . '`')
|| str_contains($docs, 'Event: `' . $eventClass . '`');
self::assertTrue($eventIsDocumented, 'Asserting that event ' . $eventClass . ' is documented');
}
}