From e116d4b041ef5afb1c3fe3b655bfd7670e2c50fe Mon Sep 17 00:00:00 2001
From: Henrique Lopes Lima
<38414109+henriquelopeslima@users.noreply.github.com>
Date: Tue, 14 Jan 2025 16:19:01 -0300
Subject: [PATCH] Add php code coverage (#515)
---
.github/workflows/coverage.yml | 46 ++++++++++++++++++++++++++++++++++
.github/workflows/tests.yml | 2 +-
.gitignore | 6 +++++
Makefile | 6 ++++-
README.md | 14 ++++++-----
bin/phpunit | 5 ----
composer.json | 1 +
composer.lock | 16 ++++++------
docker/php/Dockerfile | 6 +++++
help/COMMANDS.md | 11 ++++++++
phpunit.xml.dist | 24 ++++++++++++++++++
11 files changed, 116 insertions(+), 21 deletions(-)
create mode 100644 .github/workflows/coverage.yml
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
new file mode 100644
index 00000000..de9de8b4
--- /dev/null
+++ b/.github/workflows/coverage.yml
@@ -0,0 +1,46 @@
+name: Tests with coverage
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ code-coverage:
+ name: Run PHPUnit with coverage
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Start the aurora
+ run: docker compose up -d --build
+
+ - name: Install dependencies
+ run: docker compose exec --user root php composer install
+
+ - name: Generate public/private keys for use in your application.
+ run: docker compose exec --user root php bin/console lexik:jwt:generate-keypair
+
+ - name: Give permissions for var
+ run: sudo chmod -R 777 var/
+
+ - name: Give permissions for assets/uploads
+ run: chmod -R 777 assets/uploads
+
+ - name: Create the phpunit.xml
+ run: docker compose exec --user root php cp phpunit.xml.dist phpunit.xml
+
+ - name: Run migrations
+ run: docker compose exec php bin/console d:m:migrate -n
+
+ - name: Run fixtures
+ run: docker compose exec php bin/console d:f:l -n --purge-exclusions=city --purge-exclusions=state
+
+ - name: Start the PHPUnit
+ run: docker compose exec --user root -T php bash -c "php -d memory_limit=512M bin/phpunit --coverage-clover=coverage.xml"
+
+ - name: Upload coverage reports to Codecov
+ uses: codecov/codecov-action@v5
+ with:
+ files: coverage.xml
+ token: ${{ secrets.CODECOV_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 00f4ae50..b9c7708c 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -53,7 +53,7 @@ jobs:
run: docker compose exec php bin/console d:f:l -n --purge-exclusions=city --purge-exclusions=state
- name: Start the PHPUnit
- run: docker compose exec php bin/phpunit
+ run: docker compose exec php bin/phpunit --no-coverage
cypress-run:
name: Run Cypress
diff --git a/.gitignore b/.gitignore
index 92ed2b4f..79702fea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,8 +26,14 @@ package-lock.json
###> phpunit/phpunit ###
/phpunit.xml
.phpunit.result.cache
+/var/phpunit
###< phpunit/phpunit ###
+###> phpunit/php-code-coverage ###
+/coverage-html
+coverage.xml
+###< phpunit/php-code-coverage ###
+
###> symfony/asset-mapper ###
/public/assets/
/assets/vendor/
diff --git a/Makefile b/Makefile
index 025cfb32..0884e7b3 100644
--- a/Makefile
+++ b/Makefile
@@ -51,7 +51,11 @@ tests_front: load_fixtures
# Executa as fixtures de dados e os testes de back-end
tests_back: load_fixtures
- docker compose exec -T php bash -c "php bin/phpunit"
+ docker compose exec -T php bash -c "php bin/phpunit --no-coverage"
+
+# Executa as fixtures de dados e os testes de back-end
+tests_back_coverage: load_fixtures
+ docker compose exec -T php bash -c "php -d memory_limit=512M bin/phpunit"
# Limpa o cache do projeto
reset:
diff --git a/README.md b/README.md
index 1fda9633..d7fd137b 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+[](https://codecov.io/gh/secultce/aurora)
+
# Estrutura inicial Aurora
Este repositório fornece uma configuração base de aplicação Symfony com Docker, Nginx e PostgreSQL para substituir o projeto Aurora utilizado no Ceará.
@@ -90,7 +92,7 @@ php bin/console doctrine:migrations:migrate -n
php bin/console doctrine:fixtures:load -n
```
-5 - Instalação das dependêncis do frontend:
+5 - Instalação das dependências do frontend:
```bash
php bin/console importmap:install
```
@@ -107,12 +109,12 @@ php bin/console lexik:jwt:generate-keypair
### Uso
-Depois que tudo estiver configurado e as dependências instaladas, você pode acessar sua aplicação Symfony em [http://localhost:8080](http://localhost:8080).
+Depois que tudo estiver configurado e as dependências instaladas, você pode acessar a sua aplicação Symfony em [http://localhost:8080](http://localhost:8080).
Há também uma rota de teste para a API. Você pode acessá-la em [http://localhost:8080/api/example](http://localhost:8080/api/example). Esta rota está definida no controller `ExampleController` e retorna a mensagem de sucesso.
#### Usuário padrão
-Há alguns usuarios que você pode utilizar para fins de teste:
+Há alguns usuários que você pode utilizar para fins de teste:
@@ -140,7 +142,7 @@ Há alguns usuarios que você pode utilizar para fins de teste:
Arquitetura e Decisões técnicas
-Estamos utilizando o Symfony e o seu ecossistma de bibliotecas, porém a arquitetura é baseada em camadas e trata-se de um monolítico com a metodologia API First
+Estamos utilizando o Symfony e o seu ecossistema de bibliotecas, porém a arquitetura é baseada em camadas e trata-se de um monolítico com a metodologia API First
```mermaid
flowchart TD
@@ -161,8 +163,8 @@ flowchart TD
CW --HTML/CSS/JS--> B
```
-- Para saber mais sobre nossas decisões técnicas [acesse aqui](./help/TECHNICAL-DECISIONS.md)
-- Para entender nosso fluxo de desenvolvimento decisões técnicas [clique aqui](./help/DEV-FLOW.md)
+- Para saber mais sobre as nossas decisões técnicas [acesse aqui](./help/TECHNICAL-DECISIONS.md)
+- Para entender o nosso fluxo de desenvolvimento decisões técnicas [clique aqui](./help/DEV-FLOW.md)
## Design UI/UX
diff --git a/bin/phpunit b/bin/phpunit
index d11328ce..692baccb 100755
--- a/bin/phpunit
+++ b/bin/phpunit
@@ -5,16 +5,12 @@ if (!ini_get('date.timezone')) {
ini_set('date.timezone', 'UTC');
}
-$options = ['--testdox'];
-
if (is_file(dirname(__DIR__).'/vendor/phpunit/phpunit/phpunit')) {
if (PHP_VERSION_ID >= 80000) {
- $_SERVER['argv'] = array_merge($_SERVER['argv'], $options);
require dirname(__DIR__).'/vendor/phpunit/phpunit/phpunit';
} else {
define('PHPUNIT_COMPOSER_INSTALL', dirname(__DIR__).'/vendor/autoload.php');
require PHPUNIT_COMPOSER_INSTALL;
- $_SERVER['argv'] = array_merge($_SERVER['argv'], $options);
PHPUnit\TextUI\Command::main();
}
} else {
@@ -23,6 +19,5 @@ if (is_file(dirname(__DIR__).'/vendor/phpunit/phpunit/phpunit')) {
exit(1);
}
- $_SERVER['argv'] = array_merge($_SERVER['argv'], $options);
require dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php';
}
diff --git a/composer.json b/composer.json
index e83d6654..3b5a9761 100644
--- a/composer.json
+++ b/composer.json
@@ -92,6 +92,7 @@
"dama/doctrine-test-bundle": "^8.2",
"doctrine/doctrine-fixtures-bundle": "^3.6",
"friendsofphp/php-cs-fixer": "^3.62",
+ "phpunit/php-code-coverage": "^11.0",
"phpunit/phpunit": "^11.3",
"symfony/browser-kit": "7.1.*",
"symfony/css-selector": "7.1.*",
diff --git a/composer.lock b/composer.lock
index 27ddd741..83800b3f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "0a768713483ad8311c90e20beb112e36",
+ "content-hash": "cfd5ce55538a43ad02a03a309061d225",
"packages": [
{
"name": "composer/semver",
@@ -8446,16 +8446,16 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "11.0.7",
+ "version": "11.0.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "f7f08030e8811582cc459871d28d6f5a1a4d35ca"
+ "reference": "418c59fd080954f8c4aa5631d9502ecda2387118"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f7f08030e8811582cc459871d28d6f5a1a4d35ca",
- "reference": "f7f08030e8811582cc459871d28d6f5a1a4d35ca",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/418c59fd080954f8c4aa5631d9502ecda2387118",
+ "reference": "418c59fd080954f8c4aa5631d9502ecda2387118",
"shasum": ""
},
"require": {
@@ -8474,7 +8474,7 @@
"theseer/tokenizer": "^1.2.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.4.1"
+ "phpunit/phpunit": "^11.5.0"
},
"suggest": {
"ext-pcov": "PHP extension that provides line coverage",
@@ -8512,7 +8512,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.7"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.8"
},
"funding": [
{
@@ -8520,7 +8520,7 @@
"type": "github"
}
],
- "time": "2024-10-09T06:21:38+00:00"
+ "time": "2024-12-11T12:34:27+00:00"
},
{
"name": "phpunit/php-file-iterator",
diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile
index f8589e4b..8208f2c5 100644
--- a/docker/php/Dockerfile
+++ b/docker/php/Dockerfile
@@ -35,6 +35,12 @@ COPY --chown=user:developer . /var/www
RUN chown -R www-data /var/www/assets/uploads
+RUN pecl install xdebug \
+ && docker-php-ext-enable xdebug \
+ && echo "zend_extension=xdebug.so" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
+ && echo "xdebug.mode=coverage" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
+ && echo "xdebug.start_with_request=no" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+
USER user
EXPOSE 9000
diff --git a/help/COMMANDS.md b/help/COMMANDS.md
index 28156020..90e6025e 100644
--- a/help/COMMANDS.md
+++ b/help/COMMANDS.md
@@ -112,6 +112,17 @@ Executa as fixtures de dados e os testes de backend.
- **Descrição:** Carrega os dados de fixtures e roda os testes backend usando PHPUnit.
+
+
+TESTS_BACK_COVERAGE
+
+### `tests_back_coverage`
+Executa as fixtures de dados, os testes de backend e gera um relatório sobre a atual cobertura de testes.
+- **Uso:** `make tests_back_coverage`
+- **Descrição:** Carrega os dados de fixtures e roda os testes backend usando PHPUnit, utiliza também o xdebug e a biblioteca phpunit/php-code-coverage.
+> O resultado da análise de cobertura pode ser visto no diretório coverage-html, ou no arquivo coverage.xml
+
+
RESET
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 549b2bba..44702610 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -26,4 +26,28 @@
+
+
+
+ src
+
+
+ src/Command
+ src/DTO
+ src/Helper
+ src/Serializer
+
+
+
+
+
+
+
+
+
+
+
+
+
+