diff --git a/app/.phpunit-watcher.yml b/app/.phpunit-watcher.yml
new file mode 100644
index 0000000..29329e4
--- /dev/null
+++ b/app/.phpunit-watcher.yml
@@ -0,0 +1,13 @@
+watch:
+ directories:
+ - src
+ - tests
+ - common
+ fileMask: '*.php'
+notifications:
+ passingTests: false
+ failingTests: false
+hideManual: true
+phpunit:
+ arguments: '--log-events-text /logs/output.txt --stop-on-failure'
+ timeout: 180
diff --git a/app/phpunit.xml b/app/phpunit.xml
new file mode 100644
index 0000000..b49ef82
--- /dev/null
+++ b/app/phpunit.xml
@@ -0,0 +1,40 @@
+
+
+
+
+ tests/units
+
+
+ tests/acceptance
+
+
+
+
+
+ src
+ common
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/tests/acceptance/HomeTest.php b/app/tests/acceptance/HomeTest.php
new file mode 100644
index 0000000..d2ac559
--- /dev/null
+++ b/app/tests/acceptance/HomeTest.php
@@ -0,0 +1,22 @@
+ 'http://proxy']);
+ $home = $client->get('');
+ $home = $home->getBody()->getContents();
+
+ $expected = [
+ '',
+ '
Incoviba',
+ '
',
+ 'Bienvenid@ a Incoviba'
+ ];
+ foreach ($expected as $segment) {
+ $this->assertStringContainsString($segment, $home);
+ }
+ }
+}
diff --git a/app/tests/acceptance/LoginTest.php b/app/tests/acceptance/LoginTest.php
new file mode 100644
index 0000000..aff26df
--- /dev/null
+++ b/app/tests/acceptance/LoginTest.php
@@ -0,0 +1,30 @@
+getClient();
+ $response = $client->get('/login');
+ $login = $response->getBody()->getContents();
+ $expected = [
+ '',
+ '',
+ ''
+ ];
+ foreach ($expected as $segment) {
+ $this->assertStringContainsString($segment, $login);
+ }
+ }
+ public function testDoLogin(): void
+ {
+ $client = $this->getClient();
+ $response = $client->get('/login');
+ }
+
+ protected function getClient(): GuzzleHttp\Client
+ {
+ return new GuzzleHttp\Client(['base_uri' => 'http://proxy']);
+ }
+}
diff --git a/app/tests/units/common/Alias/ViewTest.php b/app/tests/units/common/Alias/ViewTest.php
new file mode 100644
index 0000000..4b7fd28
--- /dev/null
+++ b/app/tests/units/common/Alias/ViewTest.php
@@ -0,0 +1,36 @@
+
+
+
+
+ Test
+
+
+Test
+
+
+HTML;
+ mkdir('/tmp/views');
+ mkdir('/tmp/cache', 777);
+ file_put_contents('/tmp/views/test.blade.php', $contents);
+ $view = new View('/tmp/views', '/tmp/cache');
+ $body = $this->getMockBuilder(StreamInterface::class)->getMock();
+ $body->method('getContents')->willReturn($contents);
+ $response = $this->getMockBuilder(ResponseInterface::class)->getMock();
+ $response->method('getBody')->willReturn($body);
+ $output = $view->render($response, 'test');
+ $this->assertEquals($contents, $output->getBody()->getContents());
+ }
+}
diff --git a/app/tests/units/common/Implement/ConnectionTest.php b/app/tests/units/common/Implement/ConnectionTest.php
new file mode 100644
index 0000000..b6f6f59
--- /dev/null
+++ b/app/tests/units/common/Implement/ConnectionTest.php
@@ -0,0 +1,8 @@
+generateBuildTest();
+ $this->assertEquals($expected, $menu->build(1));
+ }
+ }
+ protected function generateBuildTest(): array
+ {
+ $modelCount = mt_rand(3, 100);
+ $expected = [];
+ $models = [];
+ for ($j = 0; $j < $modelCount; $j ++) {
+ $model = $this->generateModel();
+ $models []= $model;
+ $expected []= "id}\">title{$model->id}";
+ }
+ $expected = implode(PHP_EOL, $expected);
+ $connection = $this->getMockBuilder(Define\Connection::class)->getMock();
+ $repository = $this->getMockBuilder(Repository\Menu::class)->setConstructorArgs(compact('connection'))->getMock();
+ $permissionsRepository = $this->getMockBuilder(Repository\Permission::class)->setConstructorArgs(compact('connection'))->getMock();
+ $permissions = $this->getMockBuilder(Service\Permission::class)->setConstructorArgs([$permissionsRepository])->getMock();
+ $repository->method('fetchByUser')->willReturn($models);
+ $menu = new Service\Menu($repository, $permissions, (object) ['base' => 'http://localhost']);
+
+ return [$expected, $menu];
+ }
+ protected function generateModel(): Model\Menu
+ {
+ $id = mt_rand(1, 100000);
+ $model = $this->getMockBuilder(Model\Menu::class)->getMock();
+ $model->id = $id;
+ $model->url = "url{$id}";
+ $model->title = "title{$id}";
+
+ return $model;
+ }
+}
diff --git a/docker-compose.yml b/docker-compose.yml
index 866cf6f..22b04ab 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -83,6 +83,16 @@ services:
- ${CLI_PATH:-.}:/code
- ./logs/cli:/logs
+ testing:
+ profiles:
+ - testing
+ container_name: incoviba_tests
+ extends:
+ service: web
+ volumes:
+ - ./logs/test:/logs
+ command: [ '/code/vendor/bin/phpunit-watcher', 'watch' ]
+
volumes:
dbdata: {}
incoviba_redis: {}