diff --git a/.env b/.env
index d443158a..673ee095 100644
--- a/.env
+++ b/.env
@@ -1,6 +1,12 @@
+# DBMS can be changed by adding the following in .env.local:
+#DATABASE_URL="postgresql://zenstruck:zenstruck@127.0.0.1:5433/zenstruck_foundry?serverVersion=15"
+#DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
DATABASE_URL="mysql://root:1234@127.0.0.1:3307/foundry_test?serverVersion=5.7.42"
+
+# Mongo ca be disabled with the following in .env.local:
+# MONGO_URL=""
MONGO_URL="mongodb://127.0.0.1:27018/dbName?compressors=disabled&gssapiServiceName=mongodb"
-DATABASE_RESET_MODE="schema"
+
USE_DAMA_DOCTRINE_TEST_BUNDLE="0"
USE_FOUNDRY_PHPUNIT_EXTENSION="0"
-PHPUNIT_VERSION="9"
+PHPUNIT_VERSION="9" # allowed values: 9, 10, 11
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f994b621..823430a3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -8,7 +8,7 @@ on:
jobs:
tests:
- name: P:${{ matrix.php }}, S:${{ matrix.symfony }}, D:${{ matrix.database }}, PU:${{ matrix.phpunit || 9 }}${{ matrix.deps == 'lowest' && ' (lowest)' || '' }}${{ matrix.without-dama == 0 && contains(matrix.database, 'sql') && ' (dama)' || '' }}${{ !contains(matrix.database, 'sql') && '' || matrix.use-migrate == 1 && ' (migrate)' || ' (schema)' }}${{ matrix.use-phpunit-extension == 1 && ' (phpunit extension)' || '' }}
+ name: P:${{ matrix.php }}, S:${{ matrix.symfony }}, D:${{ matrix.database }}, PU:${{ matrix.phpunit || 9 }}${{ matrix.deps == 'lowest' && ' (lowest)' || '' }}${{ matrix.without-dama == 0 && contains(matrix.database, 'sql') && ' (dama)' || '' }}${{ matrix.use-phpunit-extension == 1 && ' (phpunit extension)' || '' }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
@@ -20,7 +20,6 @@ jobs:
# default values:
# deps: [ highest ]
# without-dama: [ 0 ]
- # use-migrate: [ 0 ]
# use-phpunit-extension: [ 0 ]
# phpunit: [ 9 ]
@@ -35,7 +34,6 @@ jobs:
- {php: 8.3, symfony: '*', database: sqlite, without-dama: 1}
- {php: 8.3, symfony: '*', database: sqlite, without-dama: 1, deps: lowest}
- {php: 8.3, symfony: '*', database: mysql, deps: lowest}
- - {php: 8.3, symfony: '*', database: mysql, use-migrate: 1}
- {php: 8.3, symfony: '*', database: mysql|mongo, phpunit: 10}
- {php: 8.3, symfony: '*', database: mysql|mongo, phpunit: 11}
- {php: 8.3, symfony: '*', database: mysql|mongo, use-phpunit-extension: 1, phpunit: 11}
@@ -46,7 +44,6 @@ jobs:
USE_DAMA_DOCTRINE_TEST_BUNDLE: ${{ matrix.without-dama == 0 && contains(matrix.database, 'sql') && 1 || 0 }}
USE_FOUNDRY_PHPUNIT_EXTENSION: ${{ matrix.use-phpunit-extension || 0 }}
PHPUNIT_VERSION: ${{ matrix.phpunit || 9 }}
- DATABASE_RESET_MODE: ${{ matrix.use-migrate == 1 && 'migrate' || 'schema' }}
services:
postgres:
image: ${{ contains(matrix.database, 'pgsql') && 'postgres:15' || '' }}
@@ -92,6 +89,69 @@ jobs:
run: ./phpunit
shell: bash
+ test-reset-database-with-migration:
+ name: Test migration - D:${{ matrix.database }}, ${{ matrix.use-dama == 1 && ' (dama)' || '' }}
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ database: [ mysql, pgsql, sqlite ]
+ use-dama: [ 0, 1 ]
+ with-migration-configuration-file:
+ - ''
+ - 'tests/Fixture/MigrationTests/configs/migration-configuration.php'
+ - 'tests/Fixture/MigrationTests/configs/migration-configuration-transactional.php'
+ exclude:
+ # there is currently a bug with MySQL and transactional migrations
+ - database: mysql
+ with-migration-configuration-file: 'tests/Fixture/MigrationTests/configs/migration-configuration-transactional.php'
+ env:
+ DATABASE_URL: ${{ contains(matrix.database, 'mysql') && 'mysql://root:root@localhost:3306/foundry?serverVersion=5.7.42' || contains(matrix.database, 'pgsql') && 'postgresql://root:root@localhost:5432/foundry?serverVersion=15' || 'sqlite:///%kernel.project_dir%/var/data.db' }}
+ MONGO_URL: ''
+ USE_DAMA_DOCTRINE_TEST_BUNDLE: ${{ matrix.use-dama == 1 && 1 || 0 }}
+ WITH_MIGRATION_CONFIGURATION_FILE: ${{ matrix.with-migration-configuration-file }}
+ PHPUNIT_VERSION: 9
+ services:
+ postgres:
+ image: ${{ contains(matrix.database, 'pgsql') && 'postgres:15' || '' }}
+ env:
+ POSTGRES_USER: root
+ POSTGRES_PASSWORD: root
+ POSTGRES_DB: foundry
+ ports:
+ - 5432:5432
+ options: >-
+ --health-cmd pg_isready
+ --health-interval 10s
+ --health-timeout 5s
+ --health-retries 5
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: 8.3
+ coverage: none
+ tools: flex
+
+ - name: Install dependencies
+ uses: ramsey/composer-install@v2
+ with:
+ dependency-versions: highest
+ composer-options: --prefer-dist
+ env:
+ SYMFONY_REQUIRE: 7.1.*
+
+ - name: Set up MySQL
+ if: contains(matrix.database, 'mysql')
+ run: sudo /etc/init.d/mysql start
+
+ - name: Test
+ run: ./phpunit --testsuite migrate --bootstrap tests/bootstrap-migrate.php
+ shell: bash
+
code-coverage:
name: Code Coverage
runs-on: ubuntu-latest
diff --git a/.gitignore b/.gitignore
index ee9e61fd..6d5aba94 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,5 +14,5 @@
/docker/.makefile
/.env.local
/docker-compose.override.yaml
-/tests/Fixture/Migrations/
+/tests/Fixture/MigrationTests/Migrations/
/tests/Fixture/Maker/tmp/
diff --git a/README.md b/README.md
index 4472e279..ba954bc3 100644
--- a/README.md
+++ b/README.md
@@ -47,20 +47,15 @@ $ docker compose up --detach
# install dependencies
$ composer update
-# run test suite with all available permutations
-$ composer test
-
-# run only one permutation
+# run main testsuite (with "schema" reset database strategy)
+$ composer test-schema
+# or
$ ./phpunit
-# run test suite with dama/doctrine-test-bundle
-$ USE_DAMA_DOCTRINE_TEST_BUNDLE=1 vendor/bin/phpunit
-
-# run test suite with postgreSQL instead of MySQL
-$ DATABASE_URL="postgresql://zenstruck:zenstruck@127.0.0.1:5433/zenstruck_foundry?serverVersion=15" vendor/bin/phpunit
-
-# run test suite with another PHPUnit version
-$ PHPUNIT_VERSION=10 vendor/bin/phpunit
+# run "migrate" testsuite (with "migrate" reset database strategy)
+$ composer test-migrate
+# or
+$ ./phpunit --testsuite migrate --bootstrap tests/bootstrap-migrate.php
```
### Overriding the default configuration
@@ -69,11 +64,20 @@ You can override default environment variables by creating a `.env.local` file,
```bash
# .env.local
-DATABASE_URL="postgresql://zenstruck:zenstruck@127.0.0.1:5433/zenstruck_foundry?serverVersion=15" # enables postgreSQL instead of MySQL
+
+# change the database to postgreSQL...
+DATABASE_URL="postgresql://zenstruck:zenstruck@127.0.0.1:5433/zenstruck_foundry?serverVersion=15"
+# ...or to SQLite
+DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
+
MONGO_URL="" # disables Mongo
USE_DAMA_DOCTRINE_TEST_BUNDLE="1" # enables dama/doctrine-test-bundle
PHPUNIT_VERSION="11" # possible values: 9, 10, 11, 11.4
+# test reset database with configuration migration,
+# only relevant for "migrate" testsuite
+WITH_MIGRATION_CONFIGURATION_FILE="tests/Fixture/MigrationTests/configs/migration-configuration.php"
+
# run test suite with postgreSQL
$ vendor/bin/phpunit
```
diff --git a/composer.json b/composer.json
index aec2e99e..3a6b8ad5 100644
--- a/composer.json
+++ b/composer.json
@@ -48,7 +48,12 @@
"Zenstruck\\Foundry\\": "src/",
"Zenstruck\\Foundry\\Psalm\\": "utils/psalm"
},
- "files": ["src/functions.php", "src/Persistence/functions.php", "src/phpunit_helper.php"]
+ "files": [
+ "src/functions.php",
+ "src/Persistence/functions.php",
+ "src/phpunit_helper.php",
+ "src/symfony_console.php"
+ ]
},
"autoload-dev": {
"psr-4": {
@@ -77,22 +82,15 @@
},
"scripts": {
"test": [
- "@test-schema-no-dama",
- "@test-migrate-no-dama",
- "@test-schema-dama",
- "@test-migrate-dama"
+ "@test-schema",
+ "@test-migrate"
],
- "test-schema-no-dama": "DATABASE_RESET_MODE=schema USE_DAMA_DOCTRINE_TEST_BUNDLE=0 ./phpunit",
- "test-migrate-no-dama": "DATABASE_RESET_MODE=migrate USE_DAMA_DOCTRINE_TEST_BUNDLE=0 ./phpunit",
- "test-schema-dama": "DATABASE_RESET_MODE=schema USE_DAMA_DOCTRINE_TEST_BUNDLE=1 ./phpunit",
- "test-migrate-dama": "DATABASE_RESET_MODE=migrate USE_DAMA_DOCTRINE_TEST_BUNDLE=1 ./phpunit"
+ "test-schema": "./phpunit",
+ "test-migrate": "./phpunit --testsuite migrate --bootstrap tests/bootstrap-migrate.php"
},
"scripts-descriptions": {
- "test": "Run all test permutations",
- "test-schema-no-dama": "Test with schema reset (no dama/doctrine-test-bundle)",
- "test-migrate-no-dama": "Test with migrations reset (no dama/doctrine-test-bundle)",
- "test-schema-dama": "Test with schema reset and dama/doctrine-test-bundle",
- "test-migrate-dama": "Test with migrations reset and dama/doctrine-test-bundle"
+ "test-schema": "Test with schema reset",
+ "test-migrate": "Test with migrations reset"
},
"minimum-stability": "dev",
"prefer-stable": true
diff --git a/phpunit-10.xml.dist b/phpunit-10.xml.dist
index 21bfa9c4..b9758154 100644
--- a/phpunit-10.xml.dist
+++ b/phpunit-10.xml.dist
@@ -6,7 +6,8 @@
colors="true"
failOnRisky="true"
failOnWarning="true"
- cacheDirectory=".phpunit.cache">
+ cacheDirectory=".phpunit.cache"
+ defaultTestSuite="main">
@@ -14,8 +15,12 @@
-
+
tests
+ tests/Integration/Migration/ResetDatabaseWithMigrationTest.php
+
+
+ tests/Integration/Migration/ResetDatabaseWithMigrationTest.php