reviewer-1.2.x-dev/tests/src/Functional/DrushTest.php
tests/src/Functional/DrushTest.php
<?php
declare(strict_types=1);
namespace Drupal\Tests\reviewer\Functional;
use Drupal\reviewer\Drush\Commands\ReviewerCommands;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\reviewer\Traits\ReviewerCreationTrait;
use Drush\TestTraits\DrushTestTrait;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
/**
* Test Drush commands.
*/
#[Group('reviewer')]
#[CoversClass(ReviewerCommands::class)]
class DrushTest extends BrowserTestBase {
use DrushTestTrait {
drush as drushTrait;
}
use ReviewerCreationTrait;
/**
* {@inheritdoc}
*/
protected static $modules = [
'field',
'link',
'node',
'system',
'reviewer',
'reviewer_test',
];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*
* @throws \Exception
*/
protected function setUp(): void {
parent::setUp();
$this->createContentTypes();
}
/**
* Test the reviewer:check and rvc commands.
*/
public function testCheck(): void {
$this->drush('reviewer:check');
$output = $this->getOutput();
self::assertStringContainsString('- Review Test', $output);
self::assertStringContainsString("Entity Review Test: {$this->contentTypeFail[0]->id()}", $output);
self::assertStringNotContainsString("Entity Review Test: {$this->contentTypePass[0]->id()}", $output);
self::assertSame(4, substr_count($output, 'Status: Failed'));
self::assertSame(1, substr_count($output, 'Status: Error'));
self::assertStringNotContainsString('Status: Not Run', $output);
self::assertStringNotContainsString('Status: Pass', $output);
self::assertStringNotContainsString('Status: Ignored', $output);
$this->drush('rvc --show-not-run');
$output = $this->getOutput();
self::assertStringContainsString('- Review Test', $output);
self::assertSame(1, substr_count($output, 'Status: Not Run'));
self::assertSame(4, substr_count($output, 'Status: Failed'));
self::assertSame(1, substr_count($output, 'Status: Error'));
self::assertStringNotContainsString('Status: Pass', $output);
self::assertStringNotContainsString('Status: Ignored', $output);
$this->drush('reviewer:check --show-passed');
$output = $this->getOutput();
self::assertSame(36, substr_count($output, 'Status: Passed'));
self::assertSame(4, substr_count($output, 'Status: Failed'));
self::assertSame(1, substr_count($output, 'Status: Error'));
self::assertStringNotContainsString('Status: Not Run', $output);
self::assertStringNotContainsString('Status: Ignored', $output);
$this->drush('reviewer:check --show-ignored');
$output = $this->getOutput();
self::assertSame(1, substr_count($output, 'Status: Ignored Error'));
self::assertStringContainsString('Message: Ignored in code.', $output);
self::assertSame(4, substr_count($output, 'Status: Failed'));
self::assertSame(1, substr_count($output, 'Status: Error'));
self::assertStringNotContainsString('Status: Not Run', $output);
self::assertStringNotContainsString('Status: Pass', $output);
$this->drush('reviewer:check --show-all');
$output = $this->getOutput();
self::assertSame(43, substr_count($output, 'Status:'));
self::assertStringContainsString('Status: Not Run', $output);
self::assertStringContainsString('Status: Pass', $output);
self::assertStringContainsString('Status: Failed', $output);
self::assertStringContainsString('Status: Error', $output);
self::assertStringContainsString('Status: Ignored Error', $output);
$this->drush("reviewer:check entity_review_test:{$this->contentTypeFail[0]->id()} --show-all");
$output = $this->getOutput();
self::assertStringContainsString("Entity Review Test: {$this->contentTypeFail[0]->id()}", $output);
self::assertStringNotContainsString("Entity Review Test: {$this->contentTypePass[0]->id()}", $output);
self::assertStringNotContainsString('- Review Test', $output);
$this->drush("reviewer:check entity_review_test:{$this->contentTypeFail[0]->id()},{$this->contentTypePass[0]->id()} review_test --show-all");
$output = $this->getOutput();
self::assertStringContainsString("Entity Review Test: {$this->contentTypeFail[0]->id()}", $output);
self::assertStringContainsString("Entity Review Test: {$this->contentTypePass[0]->id()}", $output);
self::assertStringContainsString('- Review Test', $output);
}
/**
* Test the reviewer:ignore and rvi commands.
*
* @todo Figure out how to test the interactive part of this command.
*/
public function testIgnore(): void {
try {
$this->drush('reviewer:ignore');
}
catch (\Exception $e) {
self::assertStringContainsString('--unignore option', $e->getMessage());
}
try {
$this->drush('rvi');
}
catch (\Exception $e) {
self::assertStringContainsString('--unignore option', $e->getMessage());
}
}
/**
* Test the reviewer:fix and rvf commands.
*
* @throws \Exception
*/
public function testFix(): void {
$this->drush('reviewer:check');
$output = $this->getOutput();
self::assertStringContainsString("Entity Review Test: {$this->contentTypeFail[0]->id()}", $output);
self::assertSame(4, substr_count($output, 'Status: Failed'));
$this->drush('reviewer:fix');
$output = $this->getOutput();
self::assertSame(4, substr_count($output, 'Status: Fixed'));
self::assertStringContainsString('Message: Fixed all non-hidden field labels.', $output);
$this->drush('reviewer:check');
$output = $this->getOutput();
self::assertStringNotContainsString('Status: Failed', $output);
$this->createContentTypes();
$this->drush('reviewer:check');
$output = $this->getOutput();
self::assertStringContainsString("Entity Review Test: {$this->contentTypeFail[0]->id()}", $output);
self::assertSame(4, substr_count($output, 'Status: Failed'));
$this->drush("rvf entity_review_test:{$this->contentTypeFail[0]->id()}");
$output = $this->getOutput();
self::assertSame(2, substr_count($output, 'Status: Fixed'));
self::assertStringNotContainsString("Entity Review Test: {$this->contentTypeFail[1]->id()}", $output);
}
/**
* Test the reviewer:list and rvl commands.
*/
public function testList(): void {
$this->drush('reviewer:list');
$output = $this->getOutput();
self::assertStringContainsString('ID', $output);
self::assertStringContainsString('Label', $output);
self::assertStringContainsString('review_test', $output);
self::assertStringContainsString('entity_review_test', $output);
self::assertStringContainsString('Entity Review Test', $output);
$this->drush('rvl');
$output = $this->getOutput();
self::assertStringContainsString('ID', $output);
self::assertStringContainsString('Label', $output);
self::assertStringContainsString('review_test', $output);
self::assertStringContainsString('entity_review_test', $output);
self::assertStringContainsString('Entity Review Test', $output);
$this->container->get('module_installer')->uninstall(['reviewer_test']);
$this->drush('reviewer:list');
$output = $this->getOutput();
self::assertStringContainsString('No reviews available.', $output);
}
}
