feat: add an example module with custom tests

Add a custom module based on my Drupal module template:

https://github.com/opdavies/drupal-module-template
This commit is contained in:
Oliver Davies 2023-04-21 12:01:22 +01:00
parent ea60b27438
commit 67a9f556c4
10 changed files with 117 additions and 0 deletions

2
web/modules/custom/example/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/composer.lock
/vendor/

View file

@ -0,0 +1,5 @@
{
"require": {
"symfony/config": "^6.1"
}
}

View file

@ -0,0 +1,5 @@
name: Example module
description: TODO
type: module
core_version_requirement: ^9||^10
package: Example

View file

@ -0,0 +1,7 @@
drupal-module-template.example:
path: /@opdavies/drupal-module-template
defaults:
_controller: Drupal\example\Controller\ExamplePageController
_title: Example page
requirements:
_permission: access content

View file

@ -0,0 +1,7 @@
services:
Drupal\Core\Logger\LoggerChannelFactoryInterface:
alias: logger.factory
private: true
Drupal\example\Controller\ExamplePageController:
autowire: true

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="phpcs-standard">
<description>Codestyle ruleset for Drupal</description>
<rule ref="Drupal"/>
<rule ref="DrupalPractice"/>
<arg name="ignore" value="*.css,*.md,*.txt"/>
<arg name="colors"/>
<arg value="np"/>
<file>./src</file>
<rule ref="Drupal">
<exclude name="Drupal.Commenting.ClassComment.Missing"/>
<exclude name="Drupal.NamingConventions.ValidFunctionName.ScopeNotCamelCaps"/>
<exclude name="Drupal.Commenting.DataTypeNamespace.DataTypeNamespace"/>
<exclude name="Drupal.Commenting.DocComment.MissingShort"/>
<exclude name="Drupal.Commenting.FunctionComment.IncorrectParamVarName"/>
<exclude name="Drupal.Commenting.FunctionComment.IncorrectTypeHint"/>
<exclude name="Drupal.Commenting.FunctionComment.InvalidReturn"/>
<exclude name="Drupal.Commenting.FunctionComment.Missing"/>
<exclude name="Drupal.Commenting.FunctionComment.MissingParamComment"/>
<exclude name="Drupal.Commenting.FunctionComment.MissingReturnComment"/>
<exclude name="Drupal.Commenting.FunctionComment.ParamTypeSpaces"/>
<exclude name="Drupal.Commenting.InlineComment.DocBlock"/>
<exclude name="Drupal.Commenting.VariableComment.Missing"/>
<exclude name="DrupalPractice.Objects.StrictSchemaDisabled.StrictConfigSchema"/>
</rule>
</ruleset>

View file

@ -0,0 +1,29 @@
<?php
declare(strict_types=1);
namespace Drupal\example\Controller;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
final class ExamplePageController {
use StringTranslationTrait;
public function __construct(
private LoggerChannelFactoryInterface $logger
) {}
public function __invoke(): array {
$this->logger->get('example')->info('Example page viewed.');
return [
'#markup' => $this->t(
'This is an example page from the <a href="@url">Drupal Module Template</a>.',
['@url' => 'https://github.com/opdavies/drupal-module-template']
),
];
}
}

View file

@ -0,0 +1,31 @@
<?php
namespace Drupal\Tests\example\Functional;
use Drupal\Tests\BrowserTestBase;
use Symfony\Component\HttpFoundation\Response;
final class ExamplePageTest extends BrowserTestBase {
public $defaultTheme = 'stark';
protected static $modules = [
// Core.
'node',
// Custom.
"example"
];
/** @test */
public function should_load_the_example_page_for_anonymous_users(): void {
// Arrange.
// Act.
$this->drupalGet('/@opdavies/drupal-module-template');
// Assert.
$this->assertSession()->statusCodeEquals(Response::HTTP_OK);
}
}