From 6617a92f5f774f8fa4442c49fbd385760d89b95e Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Wed, 20 Mar 2024 13:46:56 -0300 Subject: [PATCH 1/2] Tests --- app/.phpunit-watcher.yml | 13 +++++ app/phpunit.xml | 40 +++++++++++++++ app/tests/acceptance/HomeTest.php | 22 ++++++++ app/tests/acceptance/LoginTest.php | 30 +++++++++++ app/tests/units/common/Alias/ViewTest.php | 36 +++++++++++++ .../units/common/Implement/ConnectionTest.php | 8 +++ app/tests/units/src/Service/MenuTest.php | 50 +++++++++++++++++++ docker-compose.yml | 10 ++++ 8 files changed, 209 insertions(+) create mode 100644 app/.phpunit-watcher.yml create mode 100644 app/phpunit.xml create mode 100644 app/tests/acceptance/HomeTest.php create mode 100644 app/tests/acceptance/LoginTest.php create mode 100644 app/tests/units/common/Alias/ViewTest.php create mode 100644 app/tests/units/common/Implement/ConnectionTest.php create mode 100644 app/tests/units/src/Service/MenuTest.php 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', + 'logo', + '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: {} From f1e29e3b0b853e9c188603b22dc1eca88dca18db Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Wed, 20 Mar 2024 13:48:29 -0300 Subject: [PATCH 2/2] Ignore testing results --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index d25a303..8555690 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ **/.idea/ **/upload?/ **/informe?/ +**/.phpunit.cache/ +**/coverage/