diff --git a/.gitattributes b/.gitattributes
index f88664fa..1d3f10da 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -6,4 +6,5 @@
.gitattributes export-ignore
.gitignore export-ignore
.scrutinizer.yml export-ignore
+docker-compose.yml export-ignore
README.md export-ignore
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7bee31fe..ffb5736a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -112,8 +112,8 @@ jobs:
- name: Check for security vulnerabilities in 3rd party dependencies
run: composer audit
- - name: Run test suite
- run: composer run-tests-with-clover
+ - name: Run unit test suite
+ run: composer run-unit-tests-with-clover
- name: Upload coverage results to Coveralls
if: matrix.calculate-code-coverage == true
diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml
new file mode 100644
index 00000000..d1875a41
--- /dev/null
+++ b/.github/workflows/integration-tests.yml
@@ -0,0 +1,116 @@
+name: Integrations
+
+on:
+ push:
+ branches:
+ - main
+ paths-ignore:
+ - '.github/actions/release-please/**'
+ pull_request:
+ branches:
+ - main
+
+permissions:
+ contents: read
+
+jobs:
+ should-run:
+ runs-on: ubuntu-latest
+ outputs:
+ run: ${{ steps.check.outputs.run }}
+ steps:
+ - name: Skip for release-please
+ id: check
+ run: |
+ if [ "${{ github.event.pull_request.user.id }}" = "41898282" ]; then
+ echo "run=false" >> $GITHUB_OUTPUT
+ echo "::notice::Skipping integration tests - this a release-please bot's interaction"
+ else
+ echo "run=true" >> $GITHUB_OUTPUT
+ echo "::notice::integration tests will execute - the actor is not the release-please bot"
+ fi
+
+ integration-tests:
+ needs: should-run
+ if: needs.should-run.outputs.run == 'true'
+ runs-on: ubuntu-latest
+ name: "PostgreSQL ${{ matrix.postgres }} + PHP ${{ matrix.php }}"
+
+ strategy:
+ fail-fast: false
+ matrix:
+ php: ['8.1', '8.2', '8.3', '8.4']
+ postgres: ['16', '17']
+
+ services:
+ postgres:
+ image: postgres:${{ matrix.postgres }}
+ env:
+ POSTGRES_PASSWORD: postgres
+ POSTGRES_USER: postgres
+ POSTGRES_DB: postgres_doctrine_test
+ ports:
+ - 5432:5432
+ options: >-
+ --health-cmd pg_isready
+ --health-interval 10s
+ --health-timeout 5s
+ --health-retries 5
+ --mount type=tmpfs,destination=/var/lib/postgresql/data
+ -e POSTGRES_INITDB_ARGS="--data-checksums"
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Set up PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php }}
+ coverage: xdebug
+ extensions: ctype, json, mbstring, pdo_pgsql
+ tools: composer
+
+ - name: Validate composer.json and composer.lock
+ run: composer validate --strict
+
+ - name: Cache Composer packages
+ id: composer-cache
+ uses: actions/cache@v4
+ with:
+ path: vendor
+ key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-php-
+
+ - name: Install dependencies
+ run: composer install --prefer-dist --no-interaction --no-progress
+
+ - name: Install PostgreSQL client tools
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y postgresql-client
+
+ - name: Verify PostgreSQL connection and setup
+ run: |
+ echo "Checking PostgreSQL version:"
+ PGPASSWORD=postgres psql -h localhost -U postgres -d postgres_doctrine_test -c "SELECT version();"
+
+ echo "\nChecking PostgreSQL configuration:"
+ PGPASSWORD=postgres psql -h localhost -U postgres -d postgres_doctrine_test -c "SHOW server_version;"
+ PGPASSWORD=postgres psql -h localhost -U postgres -d postgres_doctrine_test -c "SHOW max_connections;"
+ PGPASSWORD=postgres psql -h localhost -U postgres -d postgres_doctrine_test -c "SHOW shared_buffers;"
+
+ echo "\nCreating test schema:"
+ PGPASSWORD=postgres psql -h localhost -U postgres -d postgres_doctrine_test -c "CREATE SCHEMA IF NOT EXISTS test;"
+
+ echo "\nListing available PostgreSQL extensions:"
+ PGPASSWORD=postgres psql -h localhost -U postgres -d postgres_doctrine_test -c "SELECT * FROM pg_available_extensions;"
+
+ - name: Run integration test suite
+ run: composer run-integration-tests
+ env:
+ POSTGRES_HOST: localhost
+ POSTGRES_PORT: 5432
+ POSTGRES_DB: postgres_doctrine_test
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: postgres
diff --git a/README.md b/README.md
index f4fa4bcd..4c930f11 100644
--- a/README.md
+++ b/README.md
@@ -98,6 +98,29 @@ composer require martin-georgiev/postgresql-for-doctrine
## 💡 Usage Examples
See our [Common Use Cases and Examples](docs/USE-CASES-AND-EXAMPLES.md) for detailed code samples.
+## 🧪 Testing
+
+### Unit Tests
+```bash
+composer run-unit-tests
+```
+
+### PostgreSQL Integration Tests
+We also provide integration tests that run against a real PostgreSQL database to ensure compatibility:
+
+```bash
+# Start PostgreSQL using Docker Compose
+docker-compose up -d
+
+# Run integration tests
+composer run-integration-tests
+
+# Stop PostgreSQL
+docker-compose down -v
+```
+
+See [tests-integration/README.md](tests-integration/README.md) for more details.
+
## ⭐ Support the Project
### 💖 GitHub Sponsors
diff --git a/ci/phpunit/config-integration.xml b/ci/phpunit/config-integration.xml
new file mode 100644
index 00000000..2a0df103
--- /dev/null
+++ b/ci/phpunit/config-integration.xml
@@ -0,0 +1,34 @@
+
+
+
+
+ ../../tests/Integration
+
+
+
+
+ ../../src
+
+
+
+
+
+
+
+
+
+
diff --git a/ci/phpunit/config.xml b/ci/phpunit/config-unit.xml
similarity index 90%
rename from ci/phpunit/config.xml
rename to ci/phpunit/config-unit.xml
index dac394bf..75c360d0 100644
--- a/ci/phpunit/config.xml
+++ b/ci/phpunit/config-unit.xml
@@ -15,8 +15,8 @@
displayDetailsOnTestsThatTriggerWarnings="true"
displayDetailsOnPhpunitDeprecations="true">
-
- ../../tests
+
+ ../../tests/Unit
diff --git a/composer.json b/composer.json
index a32aea44..f66f13ae 100644
--- a/composer.json
+++ b/composer.json
@@ -31,7 +31,8 @@
"autoload-dev": {
"psr-4": {
"Fixtures\\MartinGeorgiev\\": "fixtures/MartinGeorgiev/",
- "Tests\\MartinGeorgiev\\": "tests/MartinGeorgiev/"
+ "Tests\\Integration\\MartinGeorgiev\\": "tests/Integration/MartinGeorgiev/",
+ "Tests\\Unit\\MartinGeorgiev\\": "tests/Unit/MartinGeorgiev/"
}
},
@@ -71,7 +72,13 @@
"phpstan analyse --configuration=./ci/phpstan/config.neon"
],
"phpunit": [
- "XDEBUG_MODE=coverage phpunit --configuration=./ci/phpunit/config.xml"
+ "XDEBUG_MODE=coverage phpunit"
+ ],
+ "phpunit:unit": [
+ "@phpunit --configuration=./ci/phpunit/config-unit.xml"
+ ],
+ "phpunit:integration": [
+ "@phpunit --configuration=./ci/phpunit/config-integration.xml"
],
"rector": [
"rector --config=./ci/rector/config.php --ansi --no-progress-bar"
@@ -89,11 +96,18 @@
"@phpstan",
"@deptrac"
],
- "run-tests": [
- "@phpunit"
+ "run-integration-tests": [
+ "@phpunit:integration"
+ ],
+ "run-unit-tests": [
+ "@phpunit:unit"
+ ],
+ "run-unit-tests-with-clover": [
+ "@phpunit:unit --coverage-clover=./var/logs/test-coverage/clover.xml"
],
- "run-tests-with-clover": [
- "@phpunit --coverage-clover=./var/logs/test-coverage/clover.xml"
+ "run-all-tests": [
+ "@run-unit-tests",
+ "@run-integration-tests"
]
},
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000..0561d1c0
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,21 @@
+version: '3.8'
+
+services:
+ postgres:
+ image: postgres:17
+ environment:
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: postgres
+ POSTGRES_DB: postgres_doctrine_test
+ ports:
+ - "5432:5432"
+ volumes:
+ - postgres_data:/var/lib/postgresql/data
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U postgres"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
+volumes:
+ postgres_data:
diff --git a/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md b/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md
index 3ff8469b..5fe17073 100644
--- a/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md
+++ b/docs/AVAILABLE-FUNCTIONS-AND-OPERATORS.md
@@ -23,6 +23,7 @@
| !~* | NOT_IREGEXP | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\NotIRegexp` |
| @@ | TSMATCH | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Tsmatch` |
| \|\| | STRCONCAT | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StrConcat` |
+| <@> | DISTANCE | `MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Distance` |
# Available functions
diff --git a/docs/INTEGRATING-WITH-DOCTRINE.md b/docs/INTEGRATING-WITH-DOCTRINE.md
index 3edbb93e..6a61e120 100644
--- a/docs/INTEGRATING-WITH-DOCTRINE.md
+++ b/docs/INTEGRATING-WITH-DOCTRINE.md
@@ -163,6 +163,7 @@ $configuration->addCustomStringFunction('REGEXP_MATCH', MartinGeorgiev\Doctrine\
$configuration->addCustomStringFunction('STRCONCAT', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StrConcat::class);
$configuration->addCustomStringFunction('REGEXP_REPLACE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\RegexpReplace::class);
$configuration->addCustomStringFunction('ROW', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Row::class);
+$configuration->addCustomStringFunction('DISTANCE', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Distance::class);
# aggregation functions
$configuration->addCustomStringFunction('ARRAY_AGG', MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayAgg::class);
diff --git a/docs/INTEGRATING-WITH-LARAVEL.md b/docs/INTEGRATING-WITH-LARAVEL.md
index ba511120..72984a21 100644
--- a/docs/INTEGRATING-WITH-LARAVEL.md
+++ b/docs/INTEGRATING-WITH-LARAVEL.md
@@ -218,6 +218,7 @@ return [
'REGEXP_SUBSTR' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\RegexpSubstr::class,
'STRCONCAT' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StrConcat::class, // the `||` operator
'ROW' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Row::class,
+ 'DISTANCE' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Distance::class,
# aggregation functions
'ARRAY_AGG' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayAgg::class,
@@ -226,7 +227,6 @@ return [
'JSONB_AGG' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbAgg::class,
'JSONB_OBJECT_AGG' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbObjectAgg::class,
'STRING_AGG' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StringAgg::class,
- 'XML_AGG' => MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\XmlAgg::class,
],
...
diff --git a/docs/INTEGRATING-WITH-SYMFONY.md b/docs/INTEGRATING-WITH-SYMFONY.md
index 32083e96..479cde4f 100644
--- a/docs/INTEGRATING-WITH-SYMFONY.md
+++ b/docs/INTEGRATING-WITH-SYMFONY.md
@@ -212,6 +212,7 @@ doctrine:
REGEXP_SUBSTR: MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\RegexpSubstr
ROW: MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Row
STRCONCAT: MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StrConcat
+ DISTANCE: MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Distance
# aggregation functions
ARRAY_AGG: MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayAgg
diff --git a/fixtures/MartinGeorgiev/Doctrine/Entity/ContainsPoints.php b/fixtures/MartinGeorgiev/Doctrine/Entity/ContainsPoints.php
new file mode 100644
index 00000000..1ae9e725
--- /dev/null
+++ b/fixtures/MartinGeorgiev/Doctrine/Entity/ContainsPoints.php
@@ -0,0 +1,18 @@
+`).
+ *
+ * @see https://www.postgresql.org/docs/17/earthdistance.html#EARTHDISTANCE-POINT-BASED
+ * @since 3.1
+ *
+ * @author Sébastien Jean
+ */
+class Distance extends BaseFunction
+{
+ protected function customizeFunction(): void
+ {
+ $this->setFunctionPrototype('(%s <@> %s)');
+ $this->addNodeMapping('StringPrimary');
+ $this->addNodeMapping('StringPrimary');
+ }
+}
diff --git a/tests/Integration/MartinGeorgiev/Doctrine/DBAL/Types/DBALTypesIntegrationTest.php b/tests/Integration/MartinGeorgiev/Doctrine/DBAL/Types/DBALTypesIntegrationTest.php
new file mode 100644
index 00000000..02f7c380
--- /dev/null
+++ b/tests/Integration/MartinGeorgiev/Doctrine/DBAL/Types/DBALTypesIntegrationTest.php
@@ -0,0 +1,248 @@
+createTestTable($tableName, $columnName, $columnType);
+
+ // Insert test value
+ $queryBuilder = self::$connection->createQueryBuilder();
+ $queryBuilder
+ ->insert('test.'.$tableName)
+ ->values([$columnName => '?'])
+ ->setParameter(1, $testValue, $typeName);
+
+ $queryBuilder->executeStatement();
+
+ // Query the value back
+ $queryBuilder = self::$connection->createQueryBuilder();
+ $queryBuilder
+ ->select($columnName)
+ ->from('test.'.$tableName)
+ ->where('id = 1');
+
+ $result = $queryBuilder->executeQuery();
+ $row = $result->fetchAssociative();
+ \assert(\is_array($row) && \array_key_exists($columnName, $row));
+
+ // Get the value with the correct type
+ $platform = self::$connection->getDatabasePlatform();
+ $retrievedValue = Type::getType($typeName)->convertToPHPValue($row[$columnName], $platform);
+
+ // Assert the retrieved value matches the original
+ if (\is_array($testValue)) {
+ $this->assertEquals($testValue, $retrievedValue, 'Failed asserting that array values are equal for type '.$typeName);
+ } else {
+ $this->assertSame($testValue, $retrievedValue, 'Failed asserting that values are identical for type '.$typeName);
+ }
+ } finally {
+ $this->dropTestTable($tableName);
+ }
+ }
+
+ public static function provideScalarTypeTestCases(): array
+ {
+ return [
+ 'inet' => ['inet', 'INET', '192.168.1.1'],
+ 'inet with CIDR' => ['inet', 'INET', '192.168.1.0/24'],
+ 'inet IPv6' => ['inet', 'INET', '2001:db8::1'],
+ 'cidr IPv4' => ['cidr', 'CIDR', '192.168.1.0/24'],
+ 'cidr IPv6' => ['cidr', 'CIDR', '2001:db8::/32'],
+ 'macaddr' => ['macaddr', 'MACADDR', '08:00:2b:01:02:03'],
+ ];
+ }
+
+ /**
+ * @dataProvider provideArrayTypeTestCases
+ */
+ public function test_array_type(string $typeName, string $columnType, array $testValue): void
+ {
+ $tableName = 'test_'.\str_replace(['[', ']', ' '], ['', '', '_'], $typeName);
+ $columnName = 'test_column';
+
+ try {
+ $this->createTestTable($tableName, $columnName, $columnType);
+
+ // Insert test value
+ $queryBuilder = self::$connection->createQueryBuilder();
+ $queryBuilder
+ ->insert('test.'.$tableName)
+ ->values([$columnName => '?'])
+ ->setParameter(1, $testValue, $typeName);
+
+ $queryBuilder->executeStatement();
+
+ // Query the value back
+ $queryBuilder = self::$connection->createQueryBuilder();
+ $queryBuilder
+ ->select($columnName)
+ ->from('test.'.$tableName)
+ ->where('id = 1');
+
+ $result = $queryBuilder->executeQuery();
+ $row = $result->fetchAssociative();
+ \assert(\is_array($row) && \array_key_exists($columnName, $row));
+
+ // Get the value with the correct type
+ $platform = self::$connection->getDatabasePlatform();
+ $retrievedValue = Type::getType($typeName)->convertToPHPValue($row[$columnName], $platform);
+
+ // Assert the retrieved value matches the original
+ $this->assertEquals($testValue, $retrievedValue, 'Failed asserting that array values are equal for type '.$typeName);
+ } finally {
+ $this->dropTestTable($tableName);
+ }
+ }
+
+ public static function provideArrayTypeTestCases(): array
+ {
+ return [
+ 'boolean[]' => ['boolean[]', 'BOOLEAN[]', [true, false, true]],
+ 'smallint[]' => ['smallint[]', 'SMALLINT[]', [32767, 0, -32768]],
+ 'integer[]' => ['integer[]', 'INTEGER[]', [1, 2, 3, 4, 5]],
+ 'bigint[]' => ['bigint[]', 'BIGINT[]', [9223372036854775807, 1, -9223372036854775807]],
+ 'text[]' => ['text[]', 'TEXT[]', ['foo', 'bar', 'baz']],
+ 'text[] with special chars' => ['text[]', 'TEXT[]', ['foo"bar', 'baz\qux', 'with,comma']],
+ 'real[]' => ['real[]', 'REAL[]', [1.5, 2.5, 3.5]],
+ 'double precision[]' => ['double precision[]', 'DOUBLE PRECISION[]', [1.123456789, 2.123456789, 3.123456789]],
+ 'cidr[]' => ['cidr[]', 'CIDR[]', ['192.168.1.0/24', '10.0.0.0/8', '172.16.0.0/16']],
+ 'inet[]' => ['inet[]', 'INET[]', ['192.168.1.1', '10.0.0.1', '172.16.0.1']],
+ 'macaddr[]' => ['macaddr[]', 'MACADDR[]', ['08:00:2b:01:02:03', '00:0c:29:aa:bb:cc']],
+ 'point[]' => ['point[]', 'POINT[]', [
+ new PointValueObject(1.23, 4.56),
+ new PointValueObject(-10.5, -20.75),
+ new PointValueObject(0.0, 0.0),
+ ]],
+ ];
+ }
+
+ /**
+ * @dataProvider provideJsonTypeTestCases
+ */
+ public function test_json_type(string $typeName, string $columnType, array $testValue): void
+ {
+ $tableName = 'test_'.\str_replace(['[', ']', ' '], ['', '', '_'], $typeName);
+ $columnName = 'test_column';
+
+ try {
+ $this->createTestTable($tableName, $columnName, $columnType);
+
+ // Insert test value
+ $queryBuilder = self::$connection->createQueryBuilder();
+ $queryBuilder
+ ->insert('test.'.$tableName)
+ ->values([$columnName => '?'])
+ ->setParameter(1, $testValue, $typeName);
+
+ $queryBuilder->executeStatement();
+
+ // Query the value back
+ $queryBuilder = self::$connection->createQueryBuilder();
+ $queryBuilder
+ ->select($columnName)
+ ->from('test.'.$tableName)
+ ->where('id = 1');
+
+ $result = $queryBuilder->executeQuery();
+ $row = $result->fetchAssociative();
+ \assert(\is_array($row) && \array_key_exists($columnName, $row));
+
+ // Get the value with the correct type
+ $platform = self::$connection->getDatabasePlatform();
+ $retrievedValue = Type::getType($typeName)->convertToPHPValue($row[$columnName], $platform);
+
+ // Assert the retrieved value matches the original
+ $this->assertEquals($testValue, $retrievedValue, 'Failed asserting that JSON values are equal for type '.$typeName);
+ } finally {
+ $this->dropTestTable($tableName);
+ }
+ }
+
+ public static function provideJsonTypeTestCases(): array
+ {
+ return [
+ 'jsonb simple' => ['jsonb', 'JSONB', ['foo' => 'bar', 'baz' => 123]],
+ 'jsonb complex' => [
+ 'jsonb',
+ 'JSONB',
+ [
+ 'string' => 'value',
+ 'number' => 42,
+ 'boolean' => true,
+ 'null' => null,
+ 'array' => [1, 2, 3],
+ 'object' => ['nested' => 'value'],
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider providePointTypeTestCases
+ */
+ public function test_point_type(string $typeName, string $columnType, PointValueObject $pointValueObject): void
+ {
+ $tableName = 'test_'.\str_replace(['[', ']', ' '], ['', '', '_'], $typeName);
+ $columnName = 'test_column';
+
+ try {
+ $this->createTestTable($tableName, $columnName, $columnType);
+
+ // Insert test value
+ $queryBuilder = self::$connection->createQueryBuilder();
+ $queryBuilder
+ ->insert('test.'.$tableName)
+ ->values([$columnName => '?'])
+ ->setParameter(1, $pointValueObject, $typeName);
+
+ $queryBuilder->executeStatement();
+
+ // Query the value back
+ $queryBuilder = self::$connection->createQueryBuilder();
+ $queryBuilder
+ ->select($columnName)
+ ->from('test.'.$tableName)
+ ->where('id = 1');
+
+ $result = $queryBuilder->executeQuery();
+ $row = $result->fetchAssociative();
+ \assert(\is_array($row) && \array_key_exists($columnName, $row));
+
+ // Get the value with the correct type
+ $platform = self::$connection->getDatabasePlatform();
+ $retrievedValue = Type::getType($typeName)->convertToPHPValue($row[$columnName], $platform);
+ \assert($retrievedValue instanceof PointValueObject);
+
+ // Assert the retrieved value matches the original
+ $this->assertEquals($pointValueObject->getX(), $retrievedValue->getX(), 'Failed asserting that X coordinates are equal for type '.$typeName);
+ $this->assertEquals($pointValueObject->getY(), $retrievedValue->getY(), 'Failed asserting that Y coordinates are equal for type '.$typeName);
+ } finally {
+ $this->dropTestTable($tableName);
+ }
+ }
+
+ public static function providePointTypeTestCases(): array
+ {
+ return [
+ 'point with positive coordinates' => ['point', 'POINT', new PointValueObject(1.23, 4.56)],
+ 'point with negative coordinates' => ['point', 'POINT', new PointValueObject(-10.5, -20.75)],
+ 'point with zero coordinates' => ['point', 'POINT', new PointValueObject(0.0, 0.0)],
+ 'point with max precision' => ['point', 'POINT', new PointValueObject(123.456789, -98.765432)],
+ ];
+ }
+}
diff --git a/tests/Integration/MartinGeorgiev/Doctrine/DBAL/Types/IntegrationTestCase.php b/tests/Integration/MartinGeorgiev/Doctrine/DBAL/Types/IntegrationTestCase.php
new file mode 100644
index 00000000..e1335505
--- /dev/null
+++ b/tests/Integration/MartinGeorgiev/Doctrine/DBAL/Types/IntegrationTestCase.php
@@ -0,0 +1,131 @@
+ 'pdo_pgsql',
+ 'host' => $host,
+ 'port' => $port,
+ 'dbname' => $dbname,
+ 'user' => $user,
+ 'password' => $password,
+ ];
+
+ self::$connection = DriverManager::getConnection($connectionParams);
+
+ self::registerCustomTypes();
+ }
+
+ public static function tearDownAfterClass(): void
+ {
+ if (isset(self::$connection)) {
+ self::$connection->close();
+ }
+ }
+
+ protected static function registerCustomTypes(): void
+ {
+ $typesMap = [
+ 'bigint[]' => BigIntArray::class,
+ 'boolean[]' => BooleanArray::class,
+ 'cidr' => Cidr::class,
+ 'cidr[]' => CidrArray::class,
+ 'double precision[]' => DoublePrecisionArray::class,
+ 'inet' => Inet::class,
+ 'inet[]' => InetArray::class,
+ 'integer[]' => IntegerArray::class,
+ 'jsonb' => Jsonb::class,
+ 'jsonb[]' => JsonbArray::class,
+ 'macaddr' => Macaddr::class,
+ 'macaddr[]' => MacaddrArray::class,
+ 'point' => Point::class,
+ 'point[]' => PointArray::class,
+ 'real[]' => RealArray::class,
+ 'smallint[]' => SmallIntArray::class,
+ 'text[]' => TextArray::class,
+ ];
+
+ foreach ($typesMap as $typeName => $typeClass) {
+ if (!Type::hasType($typeName)) {
+ Type::addType($typeName, $typeClass);
+ self::$registeredTypes[] = $typeName;
+ }
+ }
+ }
+
+ protected function createTestTable(string $tableName, string $columnName, string $columnType): void
+ {
+ $schemaManager = self::$connection->createSchemaManager();
+
+ // Use the test schema for all tables
+ $fullTableName = 'test.'.$tableName;
+
+ // Drop table if it exists
+ if ($schemaManager->tablesExist([$fullTableName])) {
+ $schemaManager->dropTable($fullTableName);
+ }
+
+ // Create table with the specified column type
+ $sql = \sprintf(
+ 'CREATE TABLE %s (id SERIAL PRIMARY KEY, %s %s)',
+ $fullTableName,
+ $columnName,
+ $columnType
+ );
+
+ self::$connection->executeStatement($sql);
+ }
+
+ protected function dropTestTable(string $tableName): void
+ {
+ $schemaManager = self::$connection->createSchemaManager();
+
+ if ($schemaManager->tablesExist([$tableName])) {
+ $schemaManager->dropTable($tableName);
+ }
+ }
+}
diff --git a/tests/Integration/README.md b/tests/Integration/README.md
new file mode 100644
index 00000000..43def368
--- /dev/null
+++ b/tests/Integration/README.md
@@ -0,0 +1,69 @@
+# PostgreSQL Integration Tests
+
+This directory contains integration tests that run against a real PostgreSQL database. These tests validate that our custom DBAL types work correctly with an actual PostgreSQL instance.
+
+## Running Tests Locally
+
+### Prerequisites
+
+- Docker (for running PostgreSQL)
+- PHP 8.1+ with the `pdo_pgsql` extension
+
+### Start PostgreSQL
+
+You can use Docker Compose to start PostgreSQL:
+
+```bash
+# Start PostgreSQL using Docker Compose
+docker-compose up -d
+```
+
+Or use a plain Docker command:
+
+```bash
+docker run --name postgres-doctrine-test -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres -e POSTGRES_DB=postgres_doctrine_test -p 5432:5432 -d postgres:14
+```
+
+### Run the Tests
+
+```bash
+# Run the integration tests
+composer run-integration-tests
+```
+
+### Environment Variables
+
+The tests use the following environment variables which can be customized:
+
+- `POSTGRES_HOST` (default: localhost)
+- `POSTGRES_PORT` (default: 5432)
+- `POSTGRES_DB` (default: postgres_doctrine_test)
+- `POSTGRES_USER` (default: postgres)
+- `POSTGRES_PASSWORD` (default: postgres)
+
+You can set these variables before running the tests:
+
+```bash
+POSTGRES_HOST=custom-host POSTGRES_PORT=5433 composer run-integration-tests
+```
+
+### Cleanup
+
+If you used Docker Compose:
+
+```bash
+docker-compose down -v
+```
+
+If you used plain Docker:
+
+```bash
+docker stop postgres-doctrine-test
+docker rm postgres-doctrine-test
+```
+
+## CI Integration
+
+These tests are automatically run in GitHub Actions against PostgreSQL 16 and 17 for all supported PHP versions.
+
+The workflow is defined in `.github/workflows/integration-tests.yml`.
diff --git a/tests/Integration/bootstrap.php b/tests/Integration/bootstrap.php
new file mode 100644
index 00000000..1c3d6276
--- /dev/null
+++ b/tests/Integration/bootstrap.php
@@ -0,0 +1,36 @@
+ 'pdo_pgsql',
+ 'host' => $host,
+ 'port' => $port,
+ 'dbname' => $dbname,
+ 'user' => $user,
+ 'password' => $password,
+];
+
+try {
+ $connection = DriverManager::getConnection($connectionParams);
+ $connection->executeStatement('CREATE SCHEMA IF NOT EXISTS test');
+ $connection->close();
+} catch (Exception $exception) {
+ \error_log('Warning: Could not create test schema: '.$exception->getMessage());
+}
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php
index 4fcbe4bf..22f68bc6 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php
+++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php
@@ -7,7 +7,7 @@
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidPointArrayItemForPHPException;
use MartinGeorgiev\Doctrine\DBAL\Types\PointArray;
-use MartinGeorgiev\Doctrine\DBAL\Types\ValueObject\Point;
+use MartinGeorgiev\ValueObject\Point as PointValueObject;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
@@ -16,7 +16,7 @@ class PointArrayTest extends TestCase
/**
* @var AbstractPlatform&MockObject
*/
- private MockObject $platform;
+ private AbstractPlatform $platform;
private PointArray $fixture;
@@ -55,7 +55,7 @@ public function can_transform_to_php_value(?array $phpValue, ?string $postgresVa
}
/**
- * @return array|null, postgresValue: string|null}>
+ * @return array|null, postgresValue: string|null}>
*/
public static function provideValidTransformations(): array
{
@@ -69,20 +69,20 @@ public static function provideValidTransformations(): array
'postgresValue' => '{}',
],
'single point' => [
- 'phpValue' => [new Point(1.23, 4.56)],
+ 'phpValue' => [new PointValueObject(1.23, 4.56)],
'postgresValue' => '{"(1.230000, 4.560000)"}',
],
'multiple points' => [
'phpValue' => [
- new Point(1.23, 4.56),
- new Point(-7.89, 0.12),
+ new PointValueObject(1.23, 4.56),
+ new PointValueObject(-7.89, 0.12),
],
'postgresValue' => '{"(1.230000, 4.560000)","(-7.890000, 0.120000)"}',
],
'points with zero values' => [
'phpValue' => [
- new Point(0.0, 0.0),
- new Point(10.5, -3.7),
+ new PointValueObject(0.0, 0.0),
+ new PointValueObject(10.5, -3.7),
],
'postgresValue' => '{"(0.000000, 0.000000)","(10.500000, -3.700000)"}',
],
@@ -111,107 +111,10 @@ public static function provideInvalidTransformations(): array
'invalid nested point' => [['(1.23,4.56)']],
'mixed array (valid and invalid points)' => [
[
- new Point(1.23, 4.56),
+ new PointValueObject(1.23, 4.56),
'invalid',
],
],
];
}
-
- /**
- * @test
- *
- * @dataProvider provideInvalidDatabaseValues
- */
- public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void
- {
- $this->expectException(InvalidPointArrayItemForPHPException::class);
- $this->fixture->convertToPHPValue($postgresValue, $this->platform);
- }
-
- /**
- * @return array
- */
- public static function provideInvalidDatabaseValues(): array
- {
- return [
- 'missing parentheses' => ['{"(1.23, 4.56)","(-7.89, 0.12"}'],
- 'non-numeric values' => ['{"(abc, 4.56)","(-7.89, 0.12"}'],
- 'too many coordinates' => ['{"(1.23, 4.56, 7,89)","(-7.89, 0.12"}'],
- 'invalid array format' => ['{"(1.23,4.56)","(a,b)"}'],
- 'invalid characters' => ['{"(1.23, 4.56)","(-7.89, @,?)"}'],
- ];
- }
-
- /**
- * @test
- *
- * @dataProvider provideInvalidPHPValueTypes
- */
- public function throws_exception_when_non_string_provided_to_convert_to_php_value(mixed $value): void
- {
- $this->expectException(InvalidPointArrayItemForPHPException::class);
- $this->fixture->convertToDatabaseValue($value, $this->platform); // @phpstan-ignore-line
- }
-
- /**
- * @return array
- */
- public static function provideInvalidPHPValueTypes(): array
- {
- return [
- 'integer' => [123],
- 'array' => [['(1.23, 4.56)']],
- 'object' => [new \stdClass()],
- 'boolean' => [true],
- ];
- }
-
- /**
- * @test
- */
- public function throws_exception_when_invalid_point_format_provided(): void
- {
- $this->expectException(InvalidPointArrayItemForPHPException::class);
-
- $invalidPointString = '(invalid,point)';
- $this->fixture->transformArrayItemForPHP($invalidPointString);
- }
-
- /**
- * @test
- */
- public function throws_exception_for_malformed_point_strings_in_database(): void
- {
- $this->expectException(InvalidPointArrayItemForPHPException::class);
-
- // This triggers the invalid format path without using reflection
- $this->fixture->convertToPHPValue('{"(invalid,point)"}', $this->platform);
- }
-
- /**
- * @test
- */
- public function handles_edge_case_with_empty_and_malformed_arrays(): void
- {
- $result1 = $this->fixture->convertToPHPValue('{}', $this->platform);
- $result2 = $this->fixture->convertToPHPValue('{invalid}', $this->platform);
- $result3 = $this->fixture->convertToPHPValue('{""}', $this->platform);
-
- self::assertEquals([], $result1);
- self::assertEquals([], $result2);
- self::assertEquals([], $result3);
- }
-
- /**
- * @test
- */
- public function returns_empty_array_for_non_standard_postgres_array_format(): void
- {
- $result1 = $this->fixture->convertToPHPValue('[test]', $this->platform);
- $result2 = $this->fixture->convertToPHPValue('not-an-array', $this->platform);
-
- self::assertEquals([], $result1);
- self::assertEquals([], $result2);
- }
}
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DistanceTest.php b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DistanceTest.php
new file mode 100644
index 00000000..576fa163
--- /dev/null
+++ b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DistanceTest.php
@@ -0,0 +1,36 @@
+ Distance::class,
+ ];
+ }
+
+ protected function getExpectedSqlStatements(): array
+ {
+ return [
+ "SELECT (c0_.point <@> '(2.320041, 48.858889)') AS sclr_0 FROM ContainsPoints c0_",
+ "SELECT (c0_.point <@> c0_.point2) AS sclr_0 FROM ContainsPoints c0_",
+ "SELECT ('(1.0, 1.0)' <@> '(2.0, 2.0)') AS sclr_0 FROM ContainsPoints c0_",
+ ];
+ }
+
+ protected function getDqlStatements(): array
+ {
+ return [
+ \sprintf("SELECT DISTANCE(e.point, '(2.320041, 48.858889)') FROM %s e", ContainsPoints::class),
+ \sprintf("SELECT DISTANCE(e.point, e.point2) FROM %s e", ContainsPoints::class),
+ \sprintf("SELECT DISTANCE('(1.0, 1.0)', '(2.0, 2.0)') FROM %s e", ContainsPoints::class),
+ ];
+ }
+}
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseArrayTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseArrayTest.php
index 2efcc534..af57313a 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\ConversionException;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php
index d825b2a0..9f7303c8 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Types\ConversionException;
use MartinGeorgiev\Doctrine\DBAL\Types\BaseFloatArray;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php
index 68c98b30..a5183f02 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use MartinGeorgiev\Doctrine\DBAL\Types\BaseIntegerArray;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidIntegerArrayItemForPHPException;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseNetworkTypeArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseNetworkTypeArrayTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseNetworkTypeArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseNetworkTypeArrayTest.php
index b078bf30..676e2470 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseNetworkTypeArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseNetworkTypeArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\BaseNetworkTypeArray;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseTypeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseTypeTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseTypeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseTypeTest.php
index e8546fe3..f3041a43 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseTypeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseTypeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\BaseType;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php
index d5fe863d..1b51168b 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use MartinGeorgiev\Doctrine\DBAL\Types\BigIntArray;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidIntegerArrayItemForPHPException;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php
index a087eddf..96cae1e3 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\BooleanArray;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php
index 54c707f4..bcc03cbd 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\CidrArray;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php
index 2f1b1172..23738cdf 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\Cidr;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php
index 9d91818c..2ef4d3c7 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use MartinGeorgiev\Doctrine\DBAL\Types\DoublePrecisionArray;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidFloatArrayItemForPHPException;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php
similarity index 99%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php
index 4ce33656..6c0257be 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidInetArrayItemForPHPException;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php
similarity index 99%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php
index 2d424f03..39031be3 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidInetForDatabaseException;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php
index 002e9c71..8aecc495 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use MartinGeorgiev\Doctrine\DBAL\Types\IntegerArray;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php
index f02e750b..1c999a5d 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidJsonArrayItemForPHPException;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbTest.php
index f33a5b42..b0a48794 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\Jsonb;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php
index bdc49c23..be27ce57 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidMacaddrArrayItemForPHPException;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php
index 7582dfea..37da4f87 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidMacaddrForDatabaseException;
diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php
new file mode 100644
index 00000000..0f335178
--- /dev/null
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php
@@ -0,0 +1,217 @@
+platform = $this->createMock(AbstractPlatform::class);
+ $this->fixture = new PointArray();
+ }
+
+ /**
+ * @test
+ */
+ public function has_name(): void
+ {
+ self::assertEquals('point[]', $this->fixture->getName());
+ }
+
+ /**
+ * @test
+ *
+ * @dataProvider provideValidTransformations
+ */
+ public function can_transform_from_php_value(?array $phpValue, ?string $postgresValue): void
+ {
+ self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform));
+ }
+
+ /**
+ * @test
+ *
+ * @dataProvider provideValidTransformations
+ */
+ public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue): void
+ {
+ self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform));
+ }
+
+ /**
+ * @return array|null, postgresValue: string|null}>
+ */
+ public static function provideValidTransformations(): array
+ {
+ return [
+ 'null' => [
+ 'phpValue' => null,
+ 'postgresValue' => null,
+ ],
+ 'empty array' => [
+ 'phpValue' => [],
+ 'postgresValue' => '{}',
+ ],
+ 'single point' => [
+ 'phpValue' => [new Point(1.23, 4.56)],
+ 'postgresValue' => '{"(1.230000, 4.560000)"}',
+ ],
+ 'multiple points' => [
+ 'phpValue' => [
+ new Point(1.23, 4.56),
+ new Point(-7.89, 0.12),
+ ],
+ 'postgresValue' => '{"(1.230000, 4.560000)","(-7.890000, 0.120000)"}',
+ ],
+ 'points with zero values' => [
+ 'phpValue' => [
+ new Point(0.0, 0.0),
+ new Point(10.5, -3.7),
+ ],
+ 'postgresValue' => '{"(0.000000, 0.000000)","(10.500000, -3.700000)"}',
+ ],
+ ];
+ }
+
+ /**
+ * @test
+ *
+ * @dataProvider provideInvalidTransformations
+ */
+ public function throws_exception_when_invalid_data_provided_to_convert_to_database_value(mixed $phpValue): void
+ {
+ $this->expectException(InvalidPointArrayItemForPHPException::class);
+ $this->fixture->convertToDatabaseValue($phpValue, $this->platform); // @phpstan-ignore-line
+ }
+
+ /**
+ * @return array
+ */
+ public static function provideInvalidTransformations(): array
+ {
+ return [
+ 'not an array' => ['string value'],
+ 'array containing non-Point items' => [[1, 2, 3]],
+ 'invalid nested point' => [['(1.23,4.56)']],
+ 'mixed array (valid and invalid points)' => [
+ [
+ new Point(1.23, 4.56),
+ 'invalid',
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * @test
+ *
+ * @dataProvider provideInvalidDatabaseValues
+ */
+ public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void
+ {
+ $this->expectException(InvalidPointArrayItemForPHPException::class);
+ $this->fixture->convertToPHPValue($postgresValue, $this->platform);
+ }
+
+ /**
+ * @return array
+ */
+ public static function provideInvalidDatabaseValues(): array
+ {
+ return [
+ 'missing parentheses' => ['{"(1.23, 4.56)","(-7.89, 0.12"}'],
+ 'non-numeric values' => ['{"(abc, 4.56)","(-7.89, 0.12"}'],
+ 'too many coordinates' => ['{"(1.23, 4.56, 7,89)","(-7.89, 0.12"}'],
+ 'invalid array format' => ['{"(1.23,4.56)","(a,b)"}'],
+ 'invalid characters' => ['{"(1.23, 4.56)","(-7.89, @,?)"}'],
+ ];
+ }
+
+ /**
+ * @test
+ *
+ * @dataProvider provideInvalidPHPValueTypes
+ */
+ public function throws_exception_when_non_string_provided_to_convert_to_php_value(mixed $value): void
+ {
+ $this->expectException(InvalidPointArrayItemForPHPException::class);
+ $this->fixture->convertToDatabaseValue($value, $this->platform); // @phpstan-ignore-line
+ }
+
+ /**
+ * @return array
+ */
+ public static function provideInvalidPHPValueTypes(): array
+ {
+ return [
+ 'integer' => [123],
+ 'array' => [['(1.23, 4.56)']],
+ 'object' => [new \stdClass()],
+ 'boolean' => [true],
+ ];
+ }
+
+ /**
+ * @test
+ */
+ public function throws_exception_when_invalid_point_format_provided(): void
+ {
+ $this->expectException(InvalidPointArrayItemForPHPException::class);
+
+ $invalidPointString = '(invalid,point)';
+ $this->fixture->transformArrayItemForPHP($invalidPointString);
+ }
+
+ /**
+ * @test
+ */
+ public function throws_exception_for_malformed_point_strings_in_database(): void
+ {
+ $this->expectException(InvalidPointArrayItemForPHPException::class);
+
+ // This triggers the invalid format path without using reflection
+ $this->fixture->convertToPHPValue('{"(invalid,point)"}', $this->platform);
+ }
+
+ /**
+ * @test
+ */
+ public function handles_edge_case_with_empty_and_malformed_arrays(): void
+ {
+ $result1 = $this->fixture->convertToPHPValue('{}', $this->platform);
+ $result2 = $this->fixture->convertToPHPValue('{invalid}', $this->platform);
+ $result3 = $this->fixture->convertToPHPValue('{""}', $this->platform);
+
+ self::assertEquals([], $result1);
+ self::assertEquals([], $result2);
+ self::assertEquals([], $result3);
+ }
+
+ /**
+ * @test
+ */
+ public function returns_empty_array_for_non_standard_postgres_array_format(): void
+ {
+ $result1 = $this->fixture->convertToPHPValue('[test]', $this->platform);
+ $result2 = $this->fixture->convertToPHPValue('not-an-array', $this->platform);
+
+ self::assertEquals([], $result1);
+ self::assertEquals([], $result2);
+ }
+}
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/PointTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/PointTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointTest.php
index a962166a..98018845 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/PointTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidPointForDatabaseException;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php
index bc56863b..3a84ddfe 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidFloatArrayItemForPHPException;
use MartinGeorgiev\Doctrine\DBAL\Types\RealArray;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php
index b343203b..aa5c00b0 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use MartinGeorgiev\Doctrine\DBAL\Types\SmallIntArray;
diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/TextArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/TextArrayTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/DBAL/Types/TextArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/TextArrayTest.php
index b4b3863f..fcba39a5 100644
--- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/TextArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/TextArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use MartinGeorgiev\Doctrine\DBAL\Types\TextArray;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllOnTheRightExistOnTheLeftTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllOnTheRightExistOnTheLeftTest.php
similarity index 94%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllOnTheRightExistOnTheLeftTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllOnTheRightExistOnTheLeftTest.php
index 0eeac3a6..e44c17c6 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllOnTheRightExistOnTheLeftTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllOnTheRightExistOnTheLeftTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\AllOnTheRightExistOnTheLeft;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllTest.php
index cf98376d..7021645e 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\All;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyOnTheRightExistsOnTheLeftTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyOnTheRightExistsOnTheLeftTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyOnTheRightExistsOnTheLeftTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyOnTheRightExistsOnTheLeftTest.php
index 2fd517fb..4132babe 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyOnTheRightExistsOnTheLeftTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyOnTheRightExistsOnTheLeftTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\AnyOnTheRightExistsOnTheLeft;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyTest.php
index 7a458d50..ca343fad 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Any;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyValueTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyValueTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyValueTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyValueTest.php
index b0a1af07..254f7a4d 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyValueTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyValueTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrTest.php
index 550e0024..9c3d825e 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Arr;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAggTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAggTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAggTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAggTest.php
index 14f4e8dc..7368ce05 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAggTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAggTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayAgg;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php
index 199cf785..da7be224 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayAppend;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php
index ee5349de..93355b88 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayCardinality;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCatTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCatTest.php
similarity index 93%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCatTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCatTest.php
index 1435e37d..8fc94eb9 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCatTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCatTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayCat;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayDimensionsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayDimensionsTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayDimensionsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayDimensionsTest.php
index d696290c..ecf48681 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayDimensionsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayDimensionsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayDimensions;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php
similarity index 94%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php
index 09d8079b..f876853a 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayLength;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php
similarity index 92%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php
index 1e62e6a7..1b077cef 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayNumberOfDimensions;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPrependTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPrependTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPrependTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPrependTest.php
index aef13a61..9fad56d6 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPrependTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPrependTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayPrepend;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayRemoveTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayRemoveTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayRemoveTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayRemoveTest.php
index d5851e07..c3334d48 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayRemoveTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayRemoveTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayRemove;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayReplaceTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayReplaceTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayReplaceTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayReplaceTest.php
index 4f0dcb5c..e10fb417 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayReplaceTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayReplaceTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayReplace;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayShuffleTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayShuffleTest.php
similarity index 94%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayShuffleTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayShuffleTest.php
index 337d77e3..bd65886a 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayShuffleTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayShuffleTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Arr;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php
index ad279474..cc78ec8f 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayToJson;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToStringTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToStringTest.php
similarity index 92%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToStringTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToStringTest.php
index c624a2c7..5ca26132 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToStringTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToStringTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayToString;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseFunctionTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseFunctionTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseFunctionTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseFunctionTest.php
index e9de6fd7..0af406ef 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseFunctionTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseFunctionTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Doctrine\ORM\Query\AST\Node;
use Doctrine\ORM\Query\SqlWalker;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseVariadicFunctionTestCase.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseVariadicFunctionTestCase.php
similarity index 94%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseVariadicFunctionTestCase.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseVariadicFunctionTestCase.php
index 511ec76f..b85d6331 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseVariadicFunctionTestCase.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/BaseVariadicFunctionTestCase.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Doctrine\ORM\Configuration;
use Doctrine\ORM\EntityManager;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CastTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CastTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CastTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CastTest.php
index a7960e13..e00f7660 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CastTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CastTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Cast;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ContainsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ContainsTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ContainsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ContainsTest.php
index e0a034ba..e22f03c8 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ContainsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ContainsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Contains;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateAddTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateAddTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateAddTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateAddTest.php
index b14a3f67..f3a199d8 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateAddTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateAddTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateBinTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateBinTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateBinTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateBinTest.php
index 129d4b65..2558c29c 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateBinTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateBinTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\DateBin;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateExtractTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateExtractTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateExtractTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateExtractTest.php
index d20f54db..d5693087 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateExtractTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateExtractTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\DateExtract;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateOverlapsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateOverlapsTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateOverlapsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateOverlapsTest.php
index 2956c588..26524efc 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateOverlapsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateOverlapsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\DateOverlaps;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateSubtractTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateSubtractTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateSubtractTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateSubtractTest.php
index 00d1cdb2..81c290d3 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateSubtractTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateSubtractTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php
index eda84fc2..5f531fe9 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Daterange;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php
index e0c6fee1..2cc1492e 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\DeleteAtPath;
diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DistanceTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DistanceTest.php
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpLikeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpLikeTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpLikeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpLikeTest.php
index 0504f973..05a4f20a 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpLikeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpLikeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\FlaggedRegexpLike;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpMatchTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpMatchTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpMatchTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpMatchTest.php
index bda8ede4..6f567f97 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpMatchTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpMatchTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\FlaggedRegexpMatch;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpReplaceTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpReplaceTest.php
similarity index 92%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpReplaceTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpReplaceTest.php
index 5e7dad3a..7fd6d28a 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpReplaceTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FlaggedRegexpReplaceTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\FlaggedRegexpReplace;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/GreatestTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/GreatestTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/GreatestTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/GreatestTest.php
index b96b7f4c..cde25063 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/GreatestTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/GreatestTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsIntegers;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IRegexpTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IRegexpTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IRegexpTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IRegexpTest.php
index 18a0d9f2..64e2b1f6 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IRegexpTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IRegexpTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\IRegexp;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IlikeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IlikeTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IlikeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IlikeTest.php
index 9f7dd744..ec0ca344 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IlikeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IlikeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Ilike;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php
index 084afe7c..a124e3f4 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\InArray;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php
index 4028e0fd..49de6921 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsIntegers;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Int4range;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php
index 576fb876..e580d0ce 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsIntegers;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Int8range;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IsContainedByTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IsContainedByTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IsContainedByTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IsContainedByTest.php
index 5612ad9d..b8234dbd 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IsContainedByTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IsContainedByTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\IsContainedBy;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonAggTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonAggTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonAggTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonAggTest.php
index 4a866183..69c7d63c 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonAggTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonAggTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonAgg;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonArrayLengthTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonArrayLengthTest.php
similarity index 93%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonArrayLengthTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonArrayLengthTest.php
index fb13d197..ff8d469e 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonArrayLengthTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonArrayLengthTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonArrayLength;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php
index acf32fcc..fe0b63c1 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php
index ee4ba823..0c3654ac 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonEach;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php
similarity index 92%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php
index df49863c..6b7f10c0 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonEachText;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php
index 694d3773..320803bf 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonExists;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php
index 21724dac..77a0079d 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetFieldAsInteger;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php
index ee30c81c..f0a651a0 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetFieldAsText;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php
similarity index 93%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php
index 02b25db5..24e3471a 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetField;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectAsTextTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectAsTextTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectAsTextTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectAsTextTest.php
index 055f34c8..0c8cdcf2 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectAsTextTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectAsTextTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetObjectAsText;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectTest.php
index 30bcfe8a..18a714c4 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetObject;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectAggTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectAggTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectAggTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectAggTest.php
index f444825b..78f8ca50 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectAggTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectAggTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonObjectAgg;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectKeysTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectKeysTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectKeysTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectKeysTest.php
index d7021b99..672c7051 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectKeysTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectKeysTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonObjectKeys;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php
index 2f93ea18..f53cddd9 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonQuery;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonScalarTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonScalarTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonScalarTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonScalarTest.php
index b58f8792..99ec585a 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonScalarTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonScalarTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonScalar;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonSerializeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonSerializeTest.php
similarity index 94%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonSerializeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonSerializeTest.php
index b0de992a..7c5303b0 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonSerializeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonSerializeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonSerialize;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonStripNullsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonStripNullsTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonStripNullsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonStripNullsTest.php
index b2142495..5f77b722 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonStripNullsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonStripNullsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonStripNulls;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php
similarity index 93%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php
index 2e68694f..d8f19509 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonTypeof;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonValueTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonValueTest.php
similarity index 94%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonValueTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonValueTest.php
index 1a809a89..c1654e0d 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonValueTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonValueTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonValue;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbAggTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbAggTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbAggTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbAggTest.php
index cd166dbc..8fdbe8c5 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbAggTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbAggTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbAgg;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php
similarity index 92%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php
index 65a287bb..198d9b67 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbArrayElements;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTextTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTextTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTextTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTextTest.php
index 8113b77b..f3a63ced 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTextTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTextTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbArrayElementsText;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayLengthTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayLengthTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayLengthTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayLengthTest.php
index d33a2dbf..dee5b0c3 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayLengthTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayLengthTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbArrayLength;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php
index 8549fbe5..4c90628f 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php
index ce673db1..3450c7ca 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbEach;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php
index 2428824c..28b7aebf 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbEachText;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php
index 4f696437..6cbbca8f 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbExists;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php
index 2ee8302e..8a411beb 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Exception\InvalidArgumentForVariadicFunctionException;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectAggTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectAggTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectAggTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectAggTest.php
index da2a6004..890843e5 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectAggTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectAggTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbObjectAgg;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php
index 4d8cfa8c..6cf9fae3 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbObjectKeys;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php
index f36d42c3..91cdc1b7 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php
index 5df3551d..aae75158 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php
index c717e99e..792dc692 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php
index e847a555..e8dde9b9 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php
index 4f023a90..2a754501 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php
similarity index 93%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php
index 4c2aec21..9efe58f9 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPretty;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php
index bac130cf..b7eb3630 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbSetLax;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php
index 05a88a8a..2e74592b 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php
index 1b96c395..1039c27e 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbStripNulls;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LeastTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LeastTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LeastTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LeastTest.php
index ec8b298d..18872299 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LeastTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LeastTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsIntegers;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotIRegexpTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotIRegexpTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotIRegexpTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotIRegexpTest.php
index b6a469f4..72e05ef8 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotIRegexpTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotIRegexpTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\NotIRegexp;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotRegexpTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotRegexpTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotRegexpTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotRegexpTest.php
index 7c9e2523..7ed7d50d 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotRegexpTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotRegexpTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\NotRegexp;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarToTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarToTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarToTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarToTest.php
index 9a3b53ea..8132113a 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarToTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotSimilarToTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\NotSimilarTo;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php
index 4b1086f9..ea702025 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDecimals;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Numrange;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/OverlapsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/OverlapsTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/OverlapsTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/OverlapsTest.php
index 0576b030..e5cd5e8e 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/OverlapsTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/OverlapsTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Overlaps;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpCountTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpCountTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpCountTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpCountTest.php
index 88b871b2..aed1f93d 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpCountTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpCountTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpInstrTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpInstrTest.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpInstrTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpInstrTest.php
index 9961699b..0003deaf 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpInstrTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpInstrTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php
index 01e8b8c0..808549d3 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpMatchTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpMatchTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpMatchTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpMatchTest.php
index 303b9ea3..eb718418 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpMatchTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpMatchTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php
index eae39219..7126cdb8 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpSubstrTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpSubstrTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpSubstrTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpSubstrTest.php
index 8abb2f28..e1eabeef 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpSubstrTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpSubstrTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpTest.php
index 24d5a907..7ecf7efe 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Regexp;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ReturnsValueForJsonValueTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ReturnsValueForJsonValueTest.php
similarity index 92%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ReturnsValueForJsonValueTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ReturnsValueForJsonValueTest.php
index 3bccce92..9545c5ff 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ReturnsValueForJsonValueTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ReturnsValueForJsonValueTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ReturnsValueForJsonValue;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php
index 3997c1fc..acf08016 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsIntegers;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowToJsonTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowToJsonTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowToJsonTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowToJsonTest.php
index 84bef437..e811a835 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowToJsonTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowToJsonTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarToTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarToTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarToTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarToTest.php
index 717ddb16..47d19d8d 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarToTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SimilarToTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\SimilarTo;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SplitPartTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SplitPartTest.php
similarity index 92%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SplitPartTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SplitPartTest.php
index bc711039..53797b29 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SplitPartTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SplitPartTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\SplitPart;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StartsWithTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StartsWithTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StartsWithTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StartsWithTest.php
index ceb8c176..94f0dcbe 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StartsWithTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StartsWithTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StartsWith;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StrConcatTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StrConcatTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StrConcatTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StrConcatTest.php
index c75939df..737c0110 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StrConcatTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StrConcatTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StrConcat;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringAggTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringAggTest.php
similarity index 97%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringAggTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringAggTest.php
index 746dd3df..948c74e0 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringAggTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringAggTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StringAgg;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringToArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringToArrayTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringToArrayTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringToArrayTest.php
index daef1a99..8fc77088 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringToArrayTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringToArrayTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StringToArray;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TestCase.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TestCase.php
similarity index 98%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TestCase.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TestCase.php
index 62b42b71..afacdd80 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TestCase.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TestCase.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Doctrine\DBAL\DriverManager;
use Doctrine\ORM\Configuration;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TheRightExistsOnTheLeftTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TheRightExistsOnTheLeftTest.php
similarity index 92%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TheRightExistsOnTheLeftTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TheRightExistsOnTheLeftTest.php
index a9f0cd71..30c7e145 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TheRightExistsOnTheLeftTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TheRightExistsOnTheLeftTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Arr;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonTest.php
index 0639501c..ebe5c92f 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToJson;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonbTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonbTest.php
similarity index 94%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonbTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonbTest.php
index 2057a7b4..dc4b2082 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonbTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToJsonbTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToJsonb;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsqueryTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsqueryTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsqueryTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsqueryTest.php
index 33bb2e59..428c69be 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsqueryTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsqueryTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsvectorTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsvectorTest.php
similarity index 96%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsvectorTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsvectorTest.php
index cf02ac61..a64d39d5 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsvectorTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTsvectorTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsmatchTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsmatchTest.php
similarity index 93%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsmatchTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsmatchTest.php
index 4fa23094..6e25568a 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsmatchTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsmatchTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToTsquery;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php
index f2a974ae..a4b95911 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Tsrange;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php
similarity index 91%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php
index 13903db4..7abaffd3 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Tstzrange;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnaccentTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnaccentTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnaccentTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnaccentTest.php
index 01586341..7361b67e 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnaccentTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnaccentTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\BaseVariadicFunction;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnnestTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnnestTest.php
similarity index 90%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnnestTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnnestTest.php
index 55c98721..51870404 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnnestTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/UnnestTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Unnest;
diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/XmlAggTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/XmlAggTest.php
similarity index 95%
rename from tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/XmlAggTest.php
rename to tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/XmlAggTest.php
index 5f7cfbb4..4d3b6fd9 100644
--- a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/XmlAggTest.php
+++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/XmlAggTest.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace Tests\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
+namespace Tests\Unit\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
use Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsTexts;
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\XmlAgg;
diff --git a/tests/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php b/tests/Unit/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php
similarity index 100%
rename from tests/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php
rename to tests/Unit/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php
diff --git a/tests/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php b/tests/Unit/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php
similarity index 100%
rename from tests/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php
rename to tests/Unit/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php
diff --git a/tests/MartinGeorgiev/Utils/PostgresJsonToPHPArrayTransformerTest.php b/tests/Unit/MartinGeorgiev/Utils/PostgresJsonToPHPArrayTransformerTest.php
similarity index 100%
rename from tests/MartinGeorgiev/Utils/PostgresJsonToPHPArrayTransformerTest.php
rename to tests/Unit/MartinGeorgiev/Utils/PostgresJsonToPHPArrayTransformerTest.php