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 @@ +[![codecov](https://codecov.io/gh/secultce/aurora/graph/badge.svg?token=CG2AH922DO)](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 + + + + + + + + + + + + + +