aboutsummaryrefslogtreecommitdiff
path: root/tests/Actions/ActionImplementationTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Actions/ActionImplementationTest.php')
-rw-r--r--tests/Actions/ActionImplementationTest.php59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/Actions/ActionImplementationTest.php b/tests/Actions/ActionImplementationTest.php
new file mode 100644
index 00000000..b10d44e5
--- /dev/null
+++ b/tests/Actions/ActionImplementationTest.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace RssBridge\Tests\Actions;
+
+use ActionAbstract;
+use ActionInterface;
+use PHPUnit\Framework\TestCase;
+
+class ActionImplementationTest extends TestCase {
+ private $class;
+ private $obj;
+
+ /**
+ * @dataProvider dataActionsProvider
+ */
+ public function testClassName($path) {
+ $this->setAction($path);
+ $this->assertTrue($this->class === ucfirst($this->class), 'class name must start with uppercase character');
+ $this->assertEquals(0, substr_count($this->class, ' '), 'class name must not contain spaces');
+ $this->assertStringEndsWith('Action', $this->class, 'class name must end with "Action"');
+ }
+
+ /**
+ * @dataProvider dataActionsProvider
+ */
+ public function testClassType($path) {
+ $this->setAction($path);
+ $this->assertInstanceOf(ActionInterface::class, $this->obj);
+ }
+
+ /**
+ * @dataProvider dataActionsProvider
+ */
+ public function testVisibleMethods($path) {
+ $allowedActionAbstract = get_class_methods(ActionAbstract::class);
+ sort($allowedActionAbstract);
+
+ $this->setAction($path);
+
+ $methods = get_class_methods($this->obj);
+ sort($methods);
+
+ $this->assertEquals($allowedActionAbstract, $methods);
+ }
+
+ public function dataActionsProvider() {
+ $actions = array();
+ foreach (glob(PATH_LIB_ACTIONS . '*.php') as $path) {
+ $actions[basename($path, '.php')] = array($path);
+ }
+ return $actions;
+ }
+
+ private function setAction($path) {
+ $this->class = '\\' . basename($path, '.php');
+ $this->assertTrue(class_exists($this->class), 'class ' . $this->class . ' doesn\'t exist');
+ $this->obj = new $this->class();
+ }
+}