From f9cc06f34abb9c2b39864f596f486e2a0d58f35b Mon Sep 17 00:00:00 2001 From: brent Date: Tue, 22 Oct 2024 16:11:33 -0700 Subject: [PATCH 1/9] Add a phpunit github action --- .github/workflows/php-phpunit.yml | 76 +++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 .github/workflows/php-phpunit.yml diff --git a/.github/workflows/php-phpunit.yml b/.github/workflows/php-phpunit.yml new file mode 100644 index 0000000..0459360 --- /dev/null +++ b/.github/workflows/php-phpunit.yml @@ -0,0 +1,76 @@ +# This is a basic workflow to help you get started with Actions + +name: PHPUnit + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the trunk branch +on: + pull_request: + branches: [ trunk ] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "phpunit" + phpunit: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v4 + + # get and output the composer cache directory + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + # setup the composer cache (vendor) with github actions cache and the cache dir defined in the previous step + - uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-composer- + + # run composer install + - name: Composer Install + uses: php-actions/composer@v6 + with: + args: install + + # get the node version from the .nvmrc file + - name: Read .nvmrc + run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)" + id: nvm + + # setup node based on the version from the .nvmrc file, fetched in the previous step + - name: Setup Node.js (.nvmrc) + uses: actions/setup-node@v4 + with: + node-version: "${{ steps.nvm.outputs.NVMRC }}" + + # setup the node cache (node_modules) with github actions cache + - name: Cache Node - npm + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-cache- + + # run the ci equivalent of npm install + - name: npm ci + run: | + npm ci + + # run the wp-env setup command (wp-env start) + - name: setup wp env + run: | + npm run wp-env start + + # Run the PHPUnit tests + - name: run PHPUnit + run: | + npm run test From 390b14a3d3fcf538224450425ffea1496dc0eb8f Mon Sep 17 00:00:00 2001 From: brent Date: Tue, 22 Oct 2024 16:17:36 -0700 Subject: [PATCH 2/9] fix composer action --- .github/workflows/php-phpunit.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/php-phpunit.yml b/.github/workflows/php-phpunit.yml index 0459360..37b69dc 100644 --- a/.github/workflows/php-phpunit.yml +++ b/.github/workflows/php-phpunit.yml @@ -37,8 +37,6 @@ jobs: # run composer install - name: Composer Install uses: php-actions/composer@v6 - with: - args: install # get the node version from the .nvmrc file - name: Read .nvmrc From 4b812b2f72e9cb0a6bd4793a6eaa51d7a49a40ef Mon Sep 17 00:00:00 2001 From: brent Date: Tue, 22 Oct 2024 16:22:39 -0700 Subject: [PATCH 3/9] fix nvm version --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 2bf5ad0..b009dfb 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -stable +lts/* From b75cd58a8433693ceef43e4efecb7e93eafbd560 Mon Sep 17 00:00:00 2001 From: brent Date: Tue, 22 Oct 2024 16:24:19 -0700 Subject: [PATCH 4/9] change wp-env start --- .github/workflows/php-phpunit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-phpunit.yml b/.github/workflows/php-phpunit.yml index 37b69dc..21fff0b 100644 --- a/.github/workflows/php-phpunit.yml +++ b/.github/workflows/php-phpunit.yml @@ -66,7 +66,7 @@ jobs: # run the wp-env setup command (wp-env start) - name: setup wp env run: | - npm run wp-env start + npx wp-env start # Run the PHPUnit tests - name: run PHPUnit From f4687f8f7675a453bd3ae97b7e01f7d7c994bebb Mon Sep 17 00:00:00 2001 From: brent Date: Tue, 22 Oct 2024 16:33:23 -0700 Subject: [PATCH 5/9] tweak caches --- .github/workflows/php-phpunit.yml | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/.github/workflows/php-phpunit.yml b/.github/workflows/php-phpunit.yml index 21fff0b..d652d8d 100644 --- a/.github/workflows/php-phpunit.yml +++ b/.github/workflows/php-phpunit.yml @@ -20,19 +20,11 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v4 - # get and output the composer cache directory - - name: Get Composer Cache Directory - id: composer-cache - run: | - echo "::set-output name=dir::$(composer config cache-files-dir)" - # setup the composer cache (vendor) with github actions cache and the cache dir defined in the previous step - uses: actions/cache@v4 with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: | - ${{ runner.os }}-composer- + path: /tmp/composer-cache + key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }} # run composer install - name: Composer Install @@ -48,15 +40,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: "${{ steps.nvm.outputs.NVMRC }}" - - # setup the node cache (node_modules) with github actions cache - - name: Cache Node - npm - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node-cache- + cache: 'npm' # run the ci equivalent of npm install - name: npm ci From 0039a234cc5ec5162539e8b141ede02a707ce845 Mon Sep 17 00:00:00 2001 From: brent Date: Tue, 22 Oct 2024 16:37:51 -0700 Subject: [PATCH 6/9] fix set-output warning --- .github/workflows/php-phpunit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-phpunit.yml b/.github/workflows/php-phpunit.yml index d652d8d..87bfb88 100644 --- a/.github/workflows/php-phpunit.yml +++ b/.github/workflows/php-phpunit.yml @@ -32,7 +32,7 @@ jobs: # get the node version from the .nvmrc file - name: Read .nvmrc - run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)" + run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT id: nvm # setup node based on the version from the .nvmrc file, fetched in the previous step From d9921b1a8e390a2a3e4dc411a68fe7b962f65d42 Mon Sep 17 00:00:00 2001 From: brent Date: Tue, 22 Oct 2024 16:55:37 -0700 Subject: [PATCH 7/9] Cache wp-env dir --- .github/workflows/php-phpunit.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/php-phpunit.yml b/.github/workflows/php-phpunit.yml index 87bfb88..997140a 100644 --- a/.github/workflows/php-phpunit.yml +++ b/.github/workflows/php-phpunit.yml @@ -47,6 +47,19 @@ jobs: run: | npm ci + # Let's cache wp-env + - name: Grab wp-env dir + id: wp_env_dir + run: | + echo "WPENV_DIR=$(npx wp-env --version)" >> $GITHUB_OUTPUT + + # setup the wp-env cache + - name: Cache wp-env + uses: actions/cache@v4 + with: + path: ${{ steps.wp_env_dir.outputs.WPENV_DIR }} + key: ${{ runner.os }}-${{ hashFiles('**/.wp-env.json') }} + # run the wp-env setup command (wp-env start) - name: setup wp env run: | From 684a68ddab0619d41aefac83dcaa553124573425 Mon Sep 17 00:00:00 2001 From: brent Date: Tue, 22 Oct 2024 16:59:45 -0700 Subject: [PATCH 8/9] fix wp-env install-path --- .github/workflows/php-phpunit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php-phpunit.yml b/.github/workflows/php-phpunit.yml index 997140a..17dc54e 100644 --- a/.github/workflows/php-phpunit.yml +++ b/.github/workflows/php-phpunit.yml @@ -51,7 +51,7 @@ jobs: - name: Grab wp-env dir id: wp_env_dir run: | - echo "WPENV_DIR=$(npx wp-env --version)" >> $GITHUB_OUTPUT + echo "WPENV_DIR=$(npx wp-env install-path)" >> $GITHUB_OUTPUT # setup the wp-env cache - name: Cache wp-env From 4f8bc0c3fd59602b6c506af300fff3ecb3fab863 Mon Sep 17 00:00:00 2001 From: brent Date: Wed, 23 Oct 2024 13:07:51 -0700 Subject: [PATCH 9/9] Fixes phpcs issue and first attempt at adding a PR code coverage badge. --- .github/workflows/php-coding-standards.yml | 2 +- .github/workflows/php-phpunit.yml | 21 +++++++++++++++++++-- .gitignore | 1 + bin/test-with-coverage.sh | 4 ++++ package.json | 3 ++- phpunit.xml.dist | 6 ++++++ src/inc/woocommerce-actions.php | 3 ++- 7 files changed, 35 insertions(+), 5 deletions(-) create mode 100755 bin/test-with-coverage.sh diff --git a/.github/workflows/php-coding-standards.yml b/.github/workflows/php-coding-standards.yml index cd75445..ff854fd 100644 --- a/.github/workflows/php-coding-standards.yml +++ b/.github/workflows/php-coding-standards.yml @@ -1,7 +1,7 @@ name: PHP Coding Standards on: - push: + pull_request: branches: [ trunk, develop ] jobs: diff --git a/.github/workflows/php-phpunit.yml b/.github/workflows/php-phpunit.yml index 17dc54e..317df55 100644 --- a/.github/workflows/php-phpunit.yml +++ b/.github/workflows/php-phpunit.yml @@ -63,9 +63,26 @@ jobs: # run the wp-env setup command (wp-env start) - name: setup wp env run: | - npx wp-env start + npx wp-env start --xdebug # Run the PHPUnit tests - name: run PHPUnit run: | - npm run test + npm run test:coverage + + - name: Generate code coverage report + uses: irongut/CodeCoverageSummary@v1.3.0 + with: + filename: coverage.xml + badge: true + hide_branch_rate: 'false' + hide_complexity: 'false' + output: both + format: markdown + + - name: Add Coverage PR Comment + uses: marocchino/sticky-pull-request-comment@v2 + if: github.event_name == 'pull_request' + with: + recreate: true + path: code-coverage-results.md diff --git a/.gitignore b/.gitignore index 90035ac..dfa2c12 100644 --- a/.gitignore +++ b/.gitignore @@ -384,3 +384,4 @@ $RECYCLE.BIN/ *.code-workspace .phpunit.result.cache +coverage.xml diff --git a/bin/test-with-coverage.sh b/bin/test-with-coverage.sh new file mode 100755 index 0000000..5e70862 --- /dev/null +++ b/bin/test-with-coverage.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +# Run tests with coverage +XDEBUG_MODE=coverage vendor/bin/phpunit --coverage-cobertura=coverage.xml diff --git a/package.json b/package.json index 03c891c..1b5813f 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "check-engines": "wp-scripts check-engines", "check-licenses": "wp-scripts check-licenses", "start": "npm-run-all --parallel start:**", - "test": "wp-env run tests-cli --env-cwd=wp-content/plugins/sift-decisions vendor/bin/phpunit" + "test": "wp-env run tests-cli --env-cwd=wp-content/plugins/sift-decisions vendor/bin/phpunit", + "test:coverage": "wp-env run tests-cli --env-cwd=wp-content/plugins/sift-decisions bin/test-with-coverage.sh" } } diff --git a/phpunit.xml.dist b/phpunit.xml.dist index d72d7b5..617f768 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -12,4 +12,10 @@ ./tests/ + + + + ./src/ + + diff --git a/src/inc/woocommerce-actions.php b/src/inc/woocommerce-actions.php index 75edf19..bcca627 100644 --- a/src/inc/woocommerce-actions.php +++ b/src/inc/woocommerce-actions.php @@ -275,7 +275,8 @@ public static function link_session_to_user( string $session_id, string $user_id */ public static function add_to_cart( string $cart_item_key ) { $cart_item = \WC()->cart->get_cart_item( $cart_item_key ); - /** @var \WC_Abstract_Legacy_Product $product */ + // phpcs:ignore + /** @var \WC_Product $product */ $product = $cart_item['data'] ?? null; $user = wp_get_current_user();