Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
8914ae0
🛟 Update illuminate/* to ^12.0
Apr 9, 2025
583eeb4
🛠️ Update Database
Apr 9, 2025
d96d554
🛠️ Update Database::getSchemaBuilder()
Apr 9, 2025
e51e35d
🛠️ Fix some bugs with illuminate 12.x
Apr 9, 2025
240fcd4
Merge branch 'feature/v5' into v5/update-eloquent
Nov 23, 2025
6ab037a
💎 Add local testing env
Nov 23, 2025
a283f3e
✨ Fix rector
Nov 23, 2025
6687b3d
✨ Remove fileNotFound in phpstan.neon
Nov 23, 2025
1d3d84f
✨ Replace [ by [[ in run-wp-tests.sh
Nov 24, 2025
9157099
✨ Add >&2 after check vendor dir
Nov 24, 2025
9d588ff
Merge pull request #146 from dimitriBouteille/v5/testing-env
dimitriBouteille Nov 24, 2025
b7df2ed
Merge branch 'feature/v5' into v5/update-eloquent
Nov 24, 2025
346f30f
🐞 Fix some issues in WordPress tests with a new Eloquent version
Nov 24, 2025
5b364e8
🛟 Rollback phpunit/phpunit to ^11.0
Nov 24, 2025
b011dee
🐞 Add tests for Database::isMaria() & Database::getServerVersion()
Nov 24, 2025
f3e5c69
🐞 Rewrite tests in CustomModelTypeScopeTest.php
Nov 24, 2025
800dc22
🗑️ Remove AbstractModel::getTable()
Nov 28, 2025
032099c
🐞 Add database WordPress tests
Nov 28, 2025
0bc49f1
🐞 Add IsMimeTypeTapTest.php
Nov 28, 2025
18cce7a
🐞 Add tests for Taps classes
Nov 28, 2025
5921fc7
✨ Fix PHPStan in IsStatusTapTest.php
Nov 28, 2025
7cef7d5
✨ Fix duplicate testing data
Nov 28, 2025
ac75c96
✨ Fix duplicate testing data
Nov 28, 2025
af683ea
🐞 Add UserBuilderTest.php
Nov 28, 2025
6b7c219
🗑️ Remove WordPressBuilder::getColumns()
Dec 1, 2025
885d7b2
Merge pull request #136 from dimitriBouteille/v5/update-eloquent
dimitriBouteille Dec 7, 2025
4b0035f
🛟 phpunit/phpunit to ^12.5
Dec 7, 2025
48a00e3
🛟 Use PHP 8.3
Dec 7, 2025
75bff72
🛠️ Remove CoversMethod for bad methods
Dec 7, 2025
1353f41
🛠️ Add CoverClass in HasMetasTest.php
Dec 7, 2025
6bdd609
🛠️ Remove CoverClass by CoverTrait in HasMetasTest.php
Dec 7, 2025
6a86f36
🛠️ Use HasMetas in HasMetasTest.php cover
Dec 7, 2025
b6a6895
Merge pull request #147 from dimitriBouteille/v5/update-phpunit
dimitriBouteille Dec 10, 2025
916c670
Feat: serialize/unserialize option_value in Option model
Apr 10, 2026
81a2347
CS WpSerializedCast
dimitriBouteille Apr 10, 2026
c627837
Add WpSerializedCastTest WordPress tests
dimitriBouteille Apr 10, 2026
0d73884
Lock rector version, update header license, add strict_types
dimitriBouteille Apr 10, 2026
687e869
Remove declare strict_types=1
dimitriBouteille Apr 10, 2026
dbbc058
Merge pull request #154 from dimitriBouteille/v5/fix-rector-version
dimitriBouteille Apr 10, 2026
6cc991e
Merge remote-tracking branch 'origin/feature/v5' into v5/option-seria…
dimitriBouteille Apr 10, 2026
b97d6c3
CS
dimitriBouteille Apr 10, 2026
7722157
Merge pull request #152 from dimitriBouteille/v5/option-serialize
dimitriBouteille Apr 10, 2026
2bedbff
🚨 Security: replace esc_sql by $wpdb->prepare() in Database::bindParams
dimitriBouteille Apr 10, 2026
c644335
Rollback update composer.json
dimitriBouteille Apr 10, 2026
e2e021e
🥷 Database::$transactionCount is protected
dimitriBouteille Apr 10, 2026
9eaf9cd
🥷 Fix test DatabaseTransactionTest::assertTransaction()
dimitriBouteille Apr 10, 2026
35db2a7
Merge pull request #156 from dimitriBouteille/v5/database-transaction…
dimitriBouteille Apr 10, 2026
a2d0685
🐞 Fix: use belongsTo instead of hasOne for Post and Comment relations
dimitriBouteille Apr 11, 2026
6e40ce6
Merge pull request #157 from dimitriBouteille/v5/fix-hasOne-relation
dimitriBouteille Apr 11, 2026
4a92e5f
🐞 Fix: use belongsTo instead of hasOne for PostMeta, UserMeta, SiteMe…
dimitriBouteille Apr 11, 2026
daeac01
Merge pull request #158 from dimitriBouteille/v5/fix-hasOne-relation-v2
dimitriBouteille Apr 11, 2026
08f4b94
🧯 Security: escape metaKey in joinToMeta() and add PostBuilder tests
dimitriBouteille Apr 11, 2026
162e3e8
Merge pull request #159 from dimitriBouteille/v5/fix-joinToMeta-sql-i…
dimitriBouteille Apr 11, 2026
e11965a
Merge branch 'feature/v5' into v5/use-wpdb-prepare
dimitriBouteille Apr 11, 2026
8b97034
Merge pull request #155 from dimitriBouteille/v5/use-wpdb-prepare
dimitriBouteille Apr 11, 2026
ecd0566
🐞 Fix: add 'real' to primitiveMetaCastTypes and improve HasMetas unit…
dimitriBouteille Apr 11, 2026
19069f0
Merge pull request #160 from dimitriBouteille/v5/fix-has-metas-missin…
dimitriBouteille Apr 11, 2026
6cf0d76
🦾 Migrate WordPress test suite to wp-phpunit Composer package
dimitriBouteille Apr 11, 2026
25aa7ca
🦾 Fix lastest support in tests.yml
dimitriBouteille Apr 11, 2026
961807b
🦾 Debug MYSQL_ROOT_PASSWORD
dimitriBouteille Apr 11, 2026
4534cfa
🦾 Remove debug MYSQL_ROOT_PASSWORD
dimitriBouteille Apr 11, 2026
34e3926
Merge pull request #161 from dimitriBouteille/v5/migrate-to-wp-phpunit
dimitriBouteille Apr 11, 2026
f8c5426
🧯 Security: meta join SQL injection
dimitriBouteille May 5, 2026
1e9a98b
Merge pull request #163 from dimitriBouteille/v5/meta-builder-joinToMeta
dimitriBouteille May 5, 2026
bc915da
🗑️ Remove cast real in HasMetas.php
dimitriBouteille May 5, 2026
61d9b2d
✒️ Update signature of HasMetas::metaHasCast()
dimitriBouteille May 5, 2026
fdaa00a
🐸 Remove test real in HasMetasTest.php
dimitriBouteille May 5, 2026
aa3b30c
Merge pull request #164 from dimitriBouteille/v5/some-fixs
dimitriBouteille May 5, 2026
b4c99f8
📘 Update phpdoc of AbstractModel::insert()
dimitriBouteille May 5, 2026
016aa87
Merge pull request #165 from dimitriBouteille/v5/fix-insert-doc
dimitriBouteille May 5, 2026
38a0e57
✂️ Deprecate AbstractMeta::getKey() in favor of getMetaKey()
dimitriBouteille May 5, 2026
fc26c49
Merge pull request #166 from dimitriBouteille/v5/abstract-meta-get-key
dimitriBouteille May 5, 2026
fad80a2
📏 Support decimal and custom_datetime casts in HasMetas
dimitriBouteille May 5, 2026
8a8b6b6
Merge pull request #167 from dimitriBouteille/v5/datetime-meta-cast
dimitriBouteille May 5, 2026
75713f0
📖 Improve README.md
dimitriBouteille May 5, 2026
b7dfd57
Merge pull request #168 from dimitriBouteille/v5/update-readme
dimitriBouteille May 5, 2026
6413bd6
🗑️ Remove multisite feature
dimitriBouteille May 6, 2026
95d245b
Merge pull request #169 from dimitriBouteille/v5/remove-multisite
dimitriBouteille May 6, 2026
e0fc956
🧪 Move SAVEQUERIES to bootstrap and add assertLastQueryContains
dimitriBouteille May 6, 2026
2b901b8
🧪 Drop redundant SQL-shape assertions (relations, finders, metas)
dimitriBouteille May 6, 2026
371cb71
🧪 Drop redundant SQL-shape assertions in Tap and CustomPost/CustomCom…
dimitriBouteille May 6, 2026
697f13f
🧪 Drop assertLastQueryEquals; document SQL assertion policy
dimitriBouteille May 6, 2026
c3292dc
🧪 Add CreatesCustomTable trait to drop test tables in tearDownAfterClass
dimitriBouteille May 6, 2026
50fbb78
🪭 Add minimal WP_UnitTestCase stub for PHPStan
dimitriBouteille May 6, 2026
5b04663
🧼 CS PHPCSFixer
dimitriBouteille May 6, 2026
9e7d4f0
🧪 Add data providers and BuildsTestPost trait
dimitriBouteille May 6, 2026
c9b8617
🧪 Add multisite test scaffolding (trait + smoke test + CI job)
dimitriBouteille May 6, 2026
4d4f0b5
🧃 Add coversNothing in MultisiteBootTest
dimitriBouteille May 6, 2026
c29529c
🧪 Add @group annotations + CI fast-feedback gate and composer cache
dimitriBouteille May 6, 2026
98121f6
🥷 Pin GitHub Actions by full commit SHA (SonarCloud security hotspot)
dimitriBouteille May 6, 2026
729e362
🛀 CS PostBuilderTest::testJoinToMetaDoesNotDuplicate
dimitriBouteille May 6, 2026
f9fb681
Merge pull request #171 from dimitriBouteille/v5/improve-db-tests
dimitriBouteille May 6, 2026
8f0558e
🧪 Bump WP test matrix to 6.5–6.9 + latest
dimitriBouteille May 7, 2026
5fcfcae
Merge pull request #172 from dimitriBouteille/v5/wp-tests-version
dimitriBouteille May 7, 2026
d1d07ee
🧪 Add coverage for CommentBuilder, TermBuilder, OptionBuilder & IsAut…
dimitriBouteille May 7, 2026
b5b7ae6
🧪 Add regression-pin tests for known limitations
dimitriBouteille May 7, 2026
f2b8623
Merge pull request #173 from dimitriBouteille/v5/add-tests
dimitriBouteille May 7, 2026
b7d9d08
🛡️ Add security group in release.yml
dimitriBouteille May 8, 2026
bb6feaf
Merge pull request #175 from dimitriBouteille/v5/update-release-yml
dimitriBouteille May 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# MySQL Configuration for WordPress tests
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=wordpress_test

# WordPress version to test against
# Options: 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, latest
WP_VERSION=latest
3 changes: 3 additions & 0 deletions .github/release.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
changelog:
categories:
- title: Security 🛡️
labels:
- Security
- title: Breaking Changes 🛠
labels:
- Breaking change
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/styles.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ jobs:

steps:
- name: "Checkout repo"
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: "Configure PHP"
uses: shivammathur/setup-php@v2
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2
with:
php-version: 8.2
php-version: 8.3
tools: composer:v2

- name: "Install dependencies"
Expand Down
123 changes: 101 additions & 22 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,31 +8,41 @@ on:

jobs:
unit-test:
name: "Unit tests"
name: "PHPStan + unit tests"
runs-on: ubuntu-latest

steps:
- name: "Checkout repo"
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: "Install PHP"
uses: shivammathur/setup-php@v2
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2
with:
php-version: "8.2"
php-version: "8.3"
tools: composer:v2
coverage: xdebug

- name: "Cache Composer downloads"
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.composer/cache
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-

- name: "Install composer dependencies"
run: composer install --prefer-dist --no-progress

- name: "Run PHPStan"
run: composer run phpstan

- name: "Run unit tests with coverage"
run: composer run test:unit:coverage

- name: "Send coverage to Coveralls"
env:
COVERALLS_REPO_TOKEN: ${{ github.token }}
if: ${{ env.COVERALLS_REPO_TOKEN }}
uses: coverallsapp/github-action@v2
uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2
with:
github-token: ${{ env.COVERALLS_REPO_TOKEN }}
flag-name: "unit"
Expand All @@ -42,10 +52,11 @@ jobs:
wp-test:
name: "WordPress tests with WP ${{ matrix.wp_version }}"
runs-on: ubuntu-latest
needs: unit-test

strategy:
matrix:
wp_version: ["6.3", "6.4", "6.5", "6.6", "6.7", "6.8", "latest"]
wp_version: ["6.5", "6.6", "6.7", "6.8", "6.9", "latest"]

services:
mysql:
Expand All @@ -57,56 +68,124 @@ jobs:
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=10s --health-retries=10

steps:
- name: "Install subversion"
run: sudo apt-get install -y subversion

- name: "Checkout repo"
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: "Install PHP"
uses: shivammathur/setup-php@v2
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2
with:
php-version: "8.2"
php-version: "8.3"
tools: composer:v2
coverage: xdebug

- name: "Cache Composer downloads"
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.composer/cache
key: ${{ runner.os }}-composer-wp${{ matrix.wp_version }}-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-composer-wp${{ matrix.wp_version }}-
${{ runner.os }}-composer-

- name: "Install composer dependencies"
run: composer install --prefer-dist --no-progress

# WordPress tests works only with PHPUnit 9.x :(
# WordPress tests works only with PHPUnit 9.x
# https://make.wordpress.org/core/handbook/references/phpunit-compatibility-and-wordpress-versions/
- name: "Install PHPUnit v9"
- name: "Install PHPUnit v9 and WordPress ${{ matrix.wp_version }}"
run: |
composer require --dev --update-with-all-dependencies 'phpunit/phpunit:^9.0'
composer require --dev --update-with-all-dependencies 'yoast/phpunit-polyfills:^3.0'
composer require --dev --update-with-all-dependencies 'phpunit/phpunit:^9.0' 'yoast/phpunit-polyfills:^3.0'
if [ "${{ matrix.wp_version }}" = "latest" ]; then
composer require --dev --update-with-all-dependencies 'wp-phpunit/wp-phpunit:*' 'roots/wordpress:*'
else
composer require --dev --update-with-all-dependencies 'wp-phpunit/wp-phpunit:${{ matrix.wp_version }}.*' 'roots/wordpress:${{ matrix.wp_version }}.*'
fi

- name: "Install WP"
shell: bash
run: ./config/scripts/install-wp-tests.sh wordpress_test root '' 127.0.0.1:3306 ${{ matrix.wp_version }}
- name: "Create test database"
run: mysql -uroot -h 127.0.0.1 -e "CREATE DATABASE IF NOT EXISTS wordpress_test;"

- name: "Run WordPress tests with coverage"
env:
DB_HOST: "127.0.0.1:3306"
DB_USER: "root"
MYSQL_ROOT_PASSWORD: ""
MYSQL_DATABASE: "wordpress_test"
run: composer run test:wordPress:coverage

- name: "Send coverage to Coveralls"
env:
COVERALLS_REPO_TOKEN: ${{ github.token }}
if: ${{ env.COVERALLS_REPO_TOKEN }}
uses: coverallsapp/github-action@v2
uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2
with:
github-token: ${{ env.COVERALLS_REPO_TOKEN }}
flag-name: wp-test-$
allow-empty: false
parallel: true

wp-test-multisite:
name: "WordPress tests (multisite, WP latest)"
runs-on: ubuntu-latest
needs: unit-test

services:
mysql:
image: mysql:9.4
env:
MYSQL_ALLOW_EMPTY_PASSWORD: false
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=10s --health-retries=10

steps:
- name: "Checkout repo"
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: "Install PHP"
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2
with:
php-version: "8.3"
tools: composer:v2

- name: "Cache Composer downloads"
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.composer/cache
key: ${{ runner.os }}-composer-wplatest-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-composer-wplatest-
${{ runner.os }}-composer-

- name: "Install composer dependencies"
run: composer install --prefer-dist --no-progress

- name: "Install PHPUnit v9 and WordPress latest"
run: |
composer require --dev --update-with-all-dependencies 'phpunit/phpunit:^9.0' 'yoast/phpunit-polyfills:^3.0'
composer require --dev --update-with-all-dependencies 'wp-phpunit/wp-phpunit:*' 'roots/wordpress:*'

- name: "Create test database"
run: mysql -uroot -h 127.0.0.1 -e "CREATE DATABASE IF NOT EXISTS wordpress_test;"

- name: "Run WordPress tests in multisite mode"
env:
DB_HOST: "127.0.0.1:3306"
DB_USER: "root"
MYSQL_ROOT_PASSWORD: ""
MYSQL_DATABASE: "wordpress_test"
WP_MULTISITE: "1"
run: composer run test:wordPress

finish:
needs:
- unit-test
- wp-test
- wp-test-multisite
if: ${{ always() }}
runs-on: ubuntu-latest
steps:
- name: Close parallel build
uses: coverallsapp/github-action@v2
uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2
with:
parallel-finished: true
carryforward: "wp-test-1,wp-test-2,wp-test-3,wp-test-4,wp-test-5,wp-test-6,unit"
carryforward: "wp-test-1,wp-test-2,wp-test-3,wp-test-4,wp-test-5,wp-test-6,unit"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ composer.lock
web
/package-lock.json
build/
.env
5 changes: 2 additions & 3 deletions .php-cs-fixer.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
$header = <<<EOF
Copyright © Dimitri BOUTEILLE (https://github.com/dimitriBouteille)
See LICENSE.txt for license details.

Author: Dimitri BOUTEILLE <bonjour@dimitri-bouteille.fr>
EOF;

$config = new \PhpCsFixer\Config();
Expand All @@ -30,6 +28,7 @@
'@PSR12' => true,
'@PHP81Migration' => true,
'strict_param' => true,
'declare_strict_types' => false,
'array_syntax' => ['syntax' => 'short'],
'octal_notation' => false,
'trim_array_spaces' => true,
Expand All @@ -45,6 +44,6 @@
'header' => $header,
'comment_type' => 'PHPDoc',
'location' => 'after_open',
'separate' => 'bottom',
'separate' => 'none',
],
]);
Loading
Loading