Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/Tests/Tests/epv_test_validate_service.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,15 @@ private function validateServiceName($service, ServiceFileInterface $file)
{
$vendor = str_replace('/', '.', $this->namespace);

if (strtolower(substr($service, 0, 6)) == 'phpbb.')
if (stripos($service, 'phpbb.') === 0)
{
$this->output->addMessage(Output::ERROR, sprintf('The phpbb vendorname should only be used for official extensions in service names in %s. Current service name: %s', $file->getSaveFilename(), $service));
}
else if (strtolower(substr($service, 0, 5)) == 'core.')
else if (stripos($service, 'core.') === 0)
{
$this->output->addMessage(Output::FATAL, sprintf('The core vendorname should not be used in event names in %s. Current event name: %s', $file->getSaveFilename(), $service));
$this->output->addMessage(Output::FATAL, sprintf('The core vendorname should not be used in service names in %s. Current service name: %s', $file->getSaveFilename(), $service));
}
if (substr($service, 0, strlen($vendor)) != $vendor)
else if ($service !== '_defaults' && strpos($service, $vendor) !== 0)
{
$this->output->addMessage(Output::WARNING, sprintf('The service name should start with vendor.namespace (which is %s) but started with %s in %s', $vendor, $service, $file->getSaveFilename()));
}
Expand Down
16 changes: 16 additions & 0 deletions tests/testFiles/configs/autowired/services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
services:
_defaults:
autowire: true

epv.test.controller:
class: epv\test\controller\main

epv.test.helper.packager:
class: epv\test\helper\packager

epv.test.helper.validator:
class: epv\test\helper\validator

epv.test.listener:
class: epv\test\event\main_listener
tags: ['event.listener']
31 changes: 31 additions & 0 deletions tests/testFiles/configs/badname1/services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
services:
phpbb.test.controller:
class: epv\test\controller\main
arguments:
- '@config'
- '@controller.helper'
- '@language'
- '@request'
- '@epv.test.helper.packager'
- '@epv.test.helper.validator'
- '@template'
- '@user'

Phpbb.test.helper.packager:
class: epv\test\helper\packager
arguments:
- '@service_container'
- '%core.root_path%'

phpbb.test.helper.validator:
class: epv\test\helper\validator
arguments:
- '@language'

phpbb.test.listener:
class: epv\test\event\main_listener
arguments:
- '@controller.helper'
- '@template'
tags:
- { name: event.listener }
31 changes: 31 additions & 0 deletions tests/testFiles/configs/badname2/services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
services:
core.test.controller:
class: epv\test\controller\main
arguments:
- '@config'
- '@controller.helper'
- '@language'
- '@request'
- '@epv.test.helper.packager'
- '@epv.test.helper.validator'
- '@template'
- '@user'

Core.test.helper.packager:
class: epv\test\helper\packager
arguments:
- '@service_container'
- '%core.root_path%'

core.test.helper.validator:
class: epv\test\helper\validator
arguments:
- '@language'

core.test.listener:
class: epv\test\event\main_listener
arguments:
- '@controller.helper'
- '@template'
tags:
- { name: event.listener }
31 changes: 31 additions & 0 deletions tests/testFiles/configs/badname3/services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
services:
foo.bar.controller:
class: epv\test\controller\main
arguments:
- '@config'
- '@controller.helper'
- '@language'
- '@request'
- '@epv.test.helper.packager'
- '@epv.test.helper.validator'
- '@template'
- '@user'

foo.bar.helper.packager:
class: epv\test\helper\packager
arguments:
- '@service_container'
- '%core.root_path%'

EPV.test.helper.validator:
class: epv\test\helper\validator
arguments:
- '@language'

epv.TEST.listener:
class: epv\test\event\main_listener
arguments:
- '@controller.helper'
- '@template'
tags:
- { name: event.listener }
31 changes: 31 additions & 0 deletions tests/testFiles/configs/simple/services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
services:
epv.test.controller:
class: epv\test\controller\main
arguments:
- '@config'
- '@controller.helper'
- '@language'
- '@request'
- '@epv.test.helper.packager'
- '@epv.test.helper.validator'
- '@template'
- '@user'

epv.test.helper.packager:
class: epv\test\helper\packager
arguments:
- '@service_container'
- '%core.root_path%'

epv.test.helper.validator:
class: epv\test\helper\validator
arguments:
- '@language'

epv.test.listener:
class: epv\test\event\main_listener
arguments:
- '@controller.helper'
- '@template'
tags:
- { name: event.listener }
88 changes: 88 additions & 0 deletions tests/validate_service_test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<?php
/**
*
* EPV :: The phpBB Forum Extension Pre Validator.
*
* @copyright (c) 2021 phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
*/

use Phpbb\Epv\Files\FileLoader;
use Phpbb\Epv\Files\Type\ServiceFile;
use Phpbb\Epv\Tests\Mock\Output;
use Phpbb\Epv\Output\OutputInterface;
use Phpbb\Epv\Tests\Tests\epv_test_validate_service;

class validate_service_test extends PHPUnit_Framework_TestCase
{
public static function setUpBeforeClass()
{
require_once('./tests/Mock/Output.php');
}

/**
* @param string $config The config dir name
* @param callable $configure Call to validation function
*/
private function validateConfig($config, $configure)
{
/** @var OutputInterface $output */
$output = $this->createMock(OutputInterface::class);
$configure($output);

$file_loader = new FileLoader(new Output(), false, '.', '.');
$file = $file_loader->loadFile('tests/testFiles/configs/' . $config . '/services.yml');
self::assertInstanceOf(ServiceFile::class, $file);

$tester = new epv_test_validate_service(false, $output, 'tests/testFiles/', 'epv/test', false, 'tests/testFiles/');
$tester->validateFile($file);
}

public function good_service_names_data()
{
return [
['simple'],
['autowired'],
];
}

/**
* @dataProvider good_service_names_data
*/
public function test_good_service_names($config)
{
$this->validateConfig($config, function($output)
{
/** @var PHPUnit_Framework_MockObject_MockObject $output */
$output
->expects($this->never())
->method('addMessage')
;
});
}

public function bad_service_names_data()
{
return [
['badname1', OutputInterface::ERROR], // service name starts with phpbb.
['badname2', OutputInterface::FATAL], // service name starts with core.
['badname3', OutputInterface::WARNING], // service name does not match vendor.package
];
}

/**
* @dataProvider bad_service_names_data
*/
public function test_bad_service_names($config, $expected)
{
$this->validateConfig($config, function($output) use ($expected) {
/** @var PHPUnit_Framework_MockObject_MockObject $output */
$output
->expects($this->exactly(4))
->method('addMessage')
->with($expected)
;
});
}
}