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
new file mode 100644
index 0000000..317df55
--- /dev/null
+++ b/.github/workflows/php-phpunit.yml
@@ -0,0 +1,88 @@
+# 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
+
+ # setup the composer cache (vendor) with github actions cache and the cache dir defined in the previous step
+ - uses: actions/cache@v4
+ with:
+ path: /tmp/composer-cache
+ key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }}
+
+ # run composer install
+ - name: Composer Install
+ uses: php-actions/composer@v6
+
+ # get the node version from the .nvmrc file
+ - name: Read .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
+ - name: Setup Node.js (.nvmrc)
+ uses: actions/setup-node@v4
+ with:
+ node-version: "${{ steps.nvm.outputs.NVMRC }}"
+ cache: 'npm'
+
+ # run the ci equivalent of npm install
+ - name: npm ci
+ run: |
+ npm ci
+
+ # Let's cache wp-env
+ - name: Grab wp-env dir
+ id: wp_env_dir
+ run: |
+ echo "WPENV_DIR=$(npx wp-env install-path)" >> $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: |
+ npx wp-env start --xdebug
+
+ # Run the PHPUnit tests
+ - name: run PHPUnit
+ run: |
+ 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/.nvmrc b/.nvmrc
index 2bf5ad0..b009dfb 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-stable
+lts/*
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();