diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..00c8082 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# Release Notes + +## [v2.2.0](https://github.com/lapaliv/laravel-bulk-upsert/compare/2.1.1...2.2.0) - 2023-12-10 + +* SQLite support has been added. in https://github.com/lapaliv/laravel-bulk-upsert/pull/41 diff --git a/README.md b/README.md index 077491f..5fec0c2 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ The documentation for version 1.x you can see [here](https://github.com/lapaliv/ - Database: - MySQL: __5.7+__ - PostgreSQL __9.6+__ + - SQLite __3.32+__ - PHP: __8.0+__ - Laravel: __8.0+__ @@ -768,8 +769,8 @@ class BulkRow { * Bulk touching * Bulk updating without updating timestamps * Supporting `DB::raw()` as a value -* Supporting `SQLite` * Support a custom database driver +* Update rows and return the number of updated ones ### Tests diff --git a/src/Drivers/MySql/MySqlDriverDelete.php b/src/Drivers/MySql/MySqlDriverDeleteFeature.php similarity index 95% rename from src/Drivers/MySql/MySqlDriverDelete.php rename to src/Drivers/MySql/MySqlDriverDeleteFeature.php index 2117493..038ac4d 100644 --- a/src/Drivers/MySql/MySqlDriverDelete.php +++ b/src/Drivers/MySql/MySqlDriverDeleteFeature.php @@ -10,7 +10,7 @@ /** * @internal */ -class MySqlDriverDelete +class MySqlDriverDeleteFeature { public function __construct(private MixedValueToSqlConverter $mixedValueToSqlConverter) { diff --git a/src/Drivers/MySql/MySqlDriverInsertWithResult.php b/src/Drivers/MySql/MySqlDriverInsertWithResultFeature.php similarity index 97% rename from src/Drivers/MySql/MySqlDriverInsertWithResult.php rename to src/Drivers/MySql/MySqlDriverInsertWithResultFeature.php index c67d6fc..e3481ed 100644 --- a/src/Drivers/MySql/MySqlDriverInsertWithResult.php +++ b/src/Drivers/MySql/MySqlDriverInsertWithResultFeature.php @@ -16,7 +16,7 @@ /** * @internal */ -class MySqlDriverInsertWithResult +class MySqlDriverInsertWithResultFeature { public function __construct( private MixedValueToSqlConverter $mixedValueToSqlConverter, diff --git a/src/Drivers/MySql/MySqlDriverQuietInsert.php b/src/Drivers/MySql/MySqlDriverQuietInsertFeature.php similarity index 95% rename from src/Drivers/MySql/MySqlDriverQuietInsert.php rename to src/Drivers/MySql/MySqlDriverQuietInsertFeature.php index a152fdb..fe23756 100644 --- a/src/Drivers/MySql/MySqlDriverQuietInsert.php +++ b/src/Drivers/MySql/MySqlDriverQuietInsertFeature.php @@ -14,7 +14,7 @@ /** * @internal */ -class MySqlDriverQuietInsert +class MySqlDriverQuietInsertFeature { public function __construct( private MixedValueToSqlConverter $mixedValueToSqlConverter, diff --git a/src/Drivers/MySql/MySqlDriverUpdate.php b/src/Drivers/MySql/MySqlDriverUpdateFeature.php similarity index 95% rename from src/Drivers/MySql/MySqlDriverUpdate.php rename to src/Drivers/MySql/MySqlDriverUpdateFeature.php index 38346cc..5cde618 100644 --- a/src/Drivers/MySql/MySqlDriverUpdate.php +++ b/src/Drivers/MySql/MySqlDriverUpdateFeature.php @@ -10,7 +10,7 @@ /** * @internal */ -class MySqlDriverUpdate +class MySqlDriverUpdateFeature { public function __construct(private MixedValueToSqlConverter $mixedValueToSqlConverter) { diff --git a/src/Drivers/MySqlBulkDriver.php b/src/Drivers/MySqlBulkDriver.php index 8e33fc9..ea728a4 100644 --- a/src/Drivers/MySqlBulkDriver.php +++ b/src/Drivers/MySqlBulkDriver.php @@ -8,10 +8,10 @@ use Lapaliv\BulkUpsert\Builders\UpdateBulkBuilder; use Lapaliv\BulkUpsert\Contracts\BulkDriver; use Lapaliv\BulkUpsert\Contracts\BulkInsertResult; -use Lapaliv\BulkUpsert\Drivers\MySql\MySqlDriverDelete; -use Lapaliv\BulkUpsert\Drivers\MySql\MySqlDriverInsertWithResult; -use Lapaliv\BulkUpsert\Drivers\MySql\MySqlDriverQuietInsert; -use Lapaliv\BulkUpsert\Drivers\MySql\MySqlDriverUpdate; +use Lapaliv\BulkUpsert\Drivers\MySql\MySqlDriverDeleteFeature; +use Lapaliv\BulkUpsert\Drivers\MySql\MySqlDriverInsertWithResultFeature; +use Lapaliv\BulkUpsert\Drivers\MySql\MySqlDriverQuietInsertFeature; +use Lapaliv\BulkUpsert\Drivers\MySql\MySqlDriverUpdateFeature; use Throwable; /** @@ -20,10 +20,10 @@ class MySqlBulkDriver implements BulkDriver { public function __construct( - private MySqlDriverInsertWithResult $insertWithResult, - private MySqlDriverQuietInsert $quietInsert, - private MySqlDriverUpdate $update, - private MySqlDriverDelete $delete, + private MySqlDriverInsertWithResultFeature $insertWithResultFeature, + private MySqlDriverQuietInsertFeature $quietInsertFeature, + private MySqlDriverUpdateFeature $updateFeature, + private MySqlDriverDeleteFeature $deleteFeature, ) { // } @@ -36,7 +36,7 @@ public function insertWithResult( InsertBuilder $builder, ?string $primaryKeyName, ): BulkInsertResult { - return $this->insertWithResult->handle($connection, $builder, $primaryKeyName); + return $this->insertWithResultFeature->handle($connection, $builder, $primaryKeyName); } /** @@ -44,7 +44,7 @@ public function insertWithResult( */ public function quietInsert(ConnectionInterface $connection, InsertBuilder $builder): void { - $this->quietInsert->handle($connection, $builder); + $this->quietInsertFeature->handle($connection, $builder); } /** @@ -52,11 +52,11 @@ public function quietInsert(ConnectionInterface $connection, InsertBuilder $buil */ public function update(ConnectionInterface $connection, UpdateBulkBuilder $builder): int { - return $this->update->handle($connection, $builder); + return $this->updateFeature->handle($connection, $builder); } public function forceDelete(ConnectionInterface $connection, DeleteBulkBuilder $builder): int { - return $this->delete->handle($connection, $builder); + return $this->deleteFeature->handle($connection, $builder); } } diff --git a/src/Drivers/PostgreSql/PostgreSqlDriverDelete.php b/src/Drivers/PostgreSql/PostgreSqlDriverDeleteFeature.php similarity index 95% rename from src/Drivers/PostgreSql/PostgreSqlDriverDelete.php rename to src/Drivers/PostgreSql/PostgreSqlDriverDeleteFeature.php index 16b0053..2d57a6c 100644 --- a/src/Drivers/PostgreSql/PostgreSqlDriverDelete.php +++ b/src/Drivers/PostgreSql/PostgreSqlDriverDeleteFeature.php @@ -10,7 +10,7 @@ /** * @internal */ -class PostgreSqlDriverDelete +class PostgreSqlDriverDeleteFeature { public function __construct(private MixedValueToSqlConverter $mixedValueToSqlConverter) { diff --git a/src/Drivers/PostgreSql/PostgreSqlDriverInsertWithResult.php b/src/Drivers/PostgreSql/PostgreSqlDriverInsertWithResultFeature.php similarity index 92% rename from src/Drivers/PostgreSql/PostgreSqlDriverInsertWithResult.php rename to src/Drivers/PostgreSql/PostgreSqlDriverInsertWithResultFeature.php index 617f6ef..179f672 100644 --- a/src/Drivers/PostgreSql/PostgreSqlDriverInsertWithResult.php +++ b/src/Drivers/PostgreSql/PostgreSqlDriverInsertWithResultFeature.php @@ -9,7 +9,10 @@ use Lapaliv\BulkUpsert\Entities\BulkPostgreSqlInsertResult; use Lapaliv\BulkUpsert\Grammars\PostgreSqlGrammar; -class PostgreSqlDriverInsertWithResult +/** + * @internal + */ +class PostgreSqlDriverInsertWithResultFeature { public function __construct( private MixedValueToSqlConverter $mixedValueToSqlConverter, diff --git a/src/Drivers/PostgreSql/PostgreSqlDriverQuietInsert.php b/src/Drivers/PostgreSql/PostgreSqlDriverQuietInsertFeature.php similarity index 91% rename from src/Drivers/PostgreSql/PostgreSqlDriverQuietInsert.php rename to src/Drivers/PostgreSql/PostgreSqlDriverQuietInsertFeature.php index fc5c7d4..5d72ea8 100644 --- a/src/Drivers/PostgreSql/PostgreSqlDriverQuietInsert.php +++ b/src/Drivers/PostgreSql/PostgreSqlDriverQuietInsertFeature.php @@ -7,7 +7,10 @@ use Lapaliv\BulkUpsert\Converters\MixedValueToSqlConverter; use Lapaliv\BulkUpsert\Grammars\PostgreSqlGrammar; -class PostgreSqlDriverQuietInsert +/** + * @internal + */ +class PostgreSqlDriverQuietInsertFeature { public function __construct( private MixedValueToSqlConverter $mixedValueToSqlConverter, diff --git a/src/Drivers/PostgreSql/PostgreSqlDriverUpdate.php b/src/Drivers/PostgreSql/PostgreSqlDriverUpdateFeature.php similarity index 95% rename from src/Drivers/PostgreSql/PostgreSqlDriverUpdate.php rename to src/Drivers/PostgreSql/PostgreSqlDriverUpdateFeature.php index b597551..a116266 100644 --- a/src/Drivers/PostgreSql/PostgreSqlDriverUpdate.php +++ b/src/Drivers/PostgreSql/PostgreSqlDriverUpdateFeature.php @@ -10,7 +10,7 @@ /** * @internal */ -class PostgreSqlDriverUpdate +class PostgreSqlDriverUpdateFeature { public function __construct(private MixedValueToSqlConverter $mixedValueToSqlConverter) { diff --git a/src/Drivers/PostgreSqlBulkDriver.php b/src/Drivers/PostgreSqlBulkDriver.php index 57d85ba..849b941 100644 --- a/src/Drivers/PostgreSqlBulkDriver.php +++ b/src/Drivers/PostgreSqlBulkDriver.php @@ -8,18 +8,18 @@ use Lapaliv\BulkUpsert\Builders\UpdateBulkBuilder; use Lapaliv\BulkUpsert\Contracts\BulkDriver; use Lapaliv\BulkUpsert\Contracts\BulkInsertResult; -use Lapaliv\BulkUpsert\Drivers\PostgreSql\PostgreSqlDriverDelete; -use Lapaliv\BulkUpsert\Drivers\PostgreSql\PostgreSqlDriverInsertWithResult; -use Lapaliv\BulkUpsert\Drivers\PostgreSql\PostgreSqlDriverQuietInsert; -use Lapaliv\BulkUpsert\Drivers\PostgreSql\PostgreSqlDriverUpdate; +use Lapaliv\BulkUpsert\Drivers\PostgreSql\PostgreSqlDriverDeleteFeature; +use Lapaliv\BulkUpsert\Drivers\PostgreSql\PostgreSqlDriverInsertWithResultFeature; +use Lapaliv\BulkUpsert\Drivers\PostgreSql\PostgreSqlDriverQuietInsertFeature; +use Lapaliv\BulkUpsert\Drivers\PostgreSql\PostgreSqlDriverUpdateFeature; class PostgreSqlBulkDriver implements BulkDriver { public function __construct( - private PostgreSqlDriverInsertWithResult $insertWithResult, - private PostgreSqlDriverQuietInsert $quietInsert, - private PostgreSqlDriverUpdate $update, - private PostgreSqlDriverDelete $delete, + private PostgreSqlDriverInsertWithResultFeature $insertWithResultFeature, + private PostgreSqlDriverQuietInsertFeature $quietInsertFeature, + private PostgreSqlDriverUpdateFeature $updateFeature, + private PostgreSqlDriverDeleteFeature $deleteFeature, ) { // } @@ -29,21 +29,21 @@ public function insertWithResult( InsertBuilder $builder, ?string $primaryKeyName, ): BulkInsertResult { - return $this->insertWithResult->handle($connection, $builder); + return $this->insertWithResultFeature->handle($connection, $builder); } public function quietInsert(ConnectionInterface $connection, InsertBuilder $builder): void { - $this->quietInsert->handle($connection, $builder); + $this->quietInsertFeature->handle($connection, $builder); } public function update(ConnectionInterface $connection, UpdateBulkBuilder $builder): int { - return $this->update->handle($connection, $builder); + return $this->updateFeature->handle($connection, $builder); } public function forceDelete(ConnectionInterface $connection, DeleteBulkBuilder $builder): int { - return $this->delete->handle($connection, $builder); + return $this->deleteFeature->handle($connection, $builder); } } diff --git a/src/Drivers/SqLite/SqLiteDriverForceDeleteFeature.php b/src/Drivers/SqLite/SqLiteDriverForceDeleteFeature.php new file mode 100644 index 0000000..fb8d031 --- /dev/null +++ b/src/Drivers/SqLite/SqLiteDriverForceDeleteFeature.php @@ -0,0 +1,33 @@ +mixedValueToSqlConverter); + + $result = $connection->delete($grammar->delete($builder), $grammar->getBindings()); + + unset($grammar); + + return $result; + } +} diff --git a/src/Drivers/SqLite/SqLiteDriverInsertWithResultFeature.php b/src/Drivers/SqLite/SqLiteDriverInsertWithResultFeature.php new file mode 100644 index 0000000..1945a3d --- /dev/null +++ b/src/Drivers/SqLite/SqLiteDriverInsertWithResultFeature.php @@ -0,0 +1,51 @@ +selectOne( + sprintf( + 'select max(%s) as id from %s', + $primaryKeyName, + $builder->getInto() + ) + ); + + $lastPrimaryBeforeInserting = $lastRow->id ?? 0; + } + + $grammar = new SqLiteGrammar($this->mixedValueToSqlConverter); + $sql = $grammar->insert($builder); + $bindings = $grammar->getBindings(); + $connection->insert($sql, $bindings); + + unset($grammar); + + return new BulkSqLiteInsertResult( + is_numeric($lastPrimaryBeforeInserting) + ? (int) $lastPrimaryBeforeInserting + : null + ); + } +} diff --git a/src/Drivers/SqLite/SqLiteDriverQuietInsertFeature.php b/src/Drivers/SqLite/SqLiteDriverQuietInsertFeature.php new file mode 100644 index 0000000..acb54a6 --- /dev/null +++ b/src/Drivers/SqLite/SqLiteDriverQuietInsertFeature.php @@ -0,0 +1,33 @@ +mixedValueToSqlConverter); + + $connection->insert($grammar->insert($builder), $grammar->getBindings()); + + unset($grammar); + } +} diff --git a/src/Drivers/SqLite/SqLiteDriverUpdateFeature.php b/src/Drivers/SqLite/SqLiteDriverUpdateFeature.php new file mode 100644 index 0000000..acbcd13 --- /dev/null +++ b/src/Drivers/SqLite/SqLiteDriverUpdateFeature.php @@ -0,0 +1,33 @@ +mixedValueToSqlConverter); + + $result = $connection->update($grammar->update($builder), $grammar->getBindings()); + + unset($grammar); + + return $result; + } +} diff --git a/src/Drivers/SqLiteBulkDriver.php b/src/Drivers/SqLiteBulkDriver.php new file mode 100644 index 0000000..175e8f9 --- /dev/null +++ b/src/Drivers/SqLiteBulkDriver.php @@ -0,0 +1,49 @@ +insertWithResultFeature->handle($connection, $builder, $primaryKeyName); + } + + public function quietInsert(ConnectionInterface $connection, InsertBuilder $builder): void + { + $this->quietInsertFeature->handle($connection, $builder); + } + + public function update(ConnectionInterface $connection, UpdateBulkBuilder $builder): int + { + return $this->updateFeature->handle($connection, $builder); + } + + public function forceDelete(ConnectionInterface $connection, DeleteBulkBuilder $builder): int + { + return $this->forceDeleteFeature->handle($connection, $builder); + } +} diff --git a/src/Entities/BulkMySqlInsertResult.php b/src/Entities/BulkMySqlInsertResult.php index 07f425b..b7da733 100644 --- a/src/Entities/BulkMySqlInsertResult.php +++ b/src/Entities/BulkMySqlInsertResult.php @@ -4,6 +4,9 @@ use Lapaliv\BulkUpsert\Contracts\BulkInsertResult; +/** + * @internal + */ class BulkMySqlInsertResult implements BulkInsertResult { public function __construct(private ?int $maxPrimaryBeforeInserting) diff --git a/src/Entities/BulkPostgreSqlInsertResult.php b/src/Entities/BulkPostgreSqlInsertResult.php index 175d714..06bffc1 100644 --- a/src/Entities/BulkPostgreSqlInsertResult.php +++ b/src/Entities/BulkPostgreSqlInsertResult.php @@ -4,6 +4,9 @@ use Lapaliv\BulkUpsert\Contracts\BulkInsertResult; +/** + * @internal + */ class BulkPostgreSqlInsertResult implements BulkInsertResult { public function __construct(private array $rows) diff --git a/src/Entities/BulkSqLiteInsertResult.php b/src/Entities/BulkSqLiteInsertResult.php new file mode 100644 index 0000000..ac3cbdb --- /dev/null +++ b/src/Entities/BulkSqLiteInsertResult.php @@ -0,0 +1,26 @@ +maxPrimaryBeforeInserting; + } +} diff --git a/src/Grammars/SqLiteGrammar.php b/src/Grammars/SqLiteGrammar.php new file mode 100644 index 0000000..7d70f5e --- /dev/null +++ b/src/Grammars/SqLiteGrammar.php @@ -0,0 +1,155 @@ +getValues() as $value) { + $item = []; + + foreach ($builder->getColumns() as $column) { + $item[] = $this->mixedValueToSqlConverter->handle($value[$column] ?? null, $this->bindings); + } + $values[] = implode(',', $item); + } + + return sprintf( + 'insert %s into %s (`%s`) values (%s)', + $builder->doNothingAtConflict() ? 'or ignore' : '', + $builder->getInto(), + implode('`,`', $builder->getColumns()), + implode('),(', $values), + ); + } + + public function update(UpdateBulkBuilder $builder): string + { + $sets = []; + + foreach ($builder->getSets() as $field => $set) { + $whens = []; + + if ($set instanceof BuilderCase && count($set->getWhens()) === 1) { + $when = $set->getWhens()[0]; + $sets[] = sprintf( + '`%s` = iif(%s, %s, `%s`)', + $field, + $this->getSqlWhereClause($when->getWheres()), + $this->mixedValueToSqlConverter->handle($when->getThen(), $this->bindings), + $this->mixedValueToSqlConverter->handle($set->getElse(), $this->bindings), + ); + } elseif ($set instanceof BuilderCase) { + foreach ($set->getWhens() as $when) { + $whens[] = sprintf( + 'when %s then %s', + $this->getSqlWhereClause($when->getWheres()), + $this->mixedValueToSqlConverter->handle($when->getThen(), $this->bindings) + ); + } + + $sets[] = sprintf( + '`%s` = case %s else `%s` end', + $field, + implode(' ', $whens), + $this->mixedValueToSqlConverter->handle($set->getElse(), $this->bindings), + ); + } else { + $sets[] = sprintf( + '`%s` = %s', + $field, + $this->mixedValueToSqlConverter->handle($set, $this->bindings), + ); + } + } + + return sprintf( + 'update %s set %s where %s', + $builder->getTable(), + implode(',', $sets), + $this->getSqlWhereClause($builder->getWheres()) + ); + } + + public function delete(DeleteBulkBuilder $builder): string + { + return sprintf( + 'delete from %s where %s', + $builder->getFrom(), + $this->getSqlWhereClause($builder->getWheres()) + ); + } + + public function getBindings(): array + { + return $this->bindings; + } + + private function getSqlWhereClause(array $wheres): string + { + $result = []; + + foreach ($wheres as $where) { + if (!empty($result)) { + $result[] = $where->boolean; + } + + if ($where instanceof BuilderWhereCallback) { + $selectBuilder = new SelectBulkBuilder(); + call_user_func($where->callback, $selectBuilder); + + $result[] = '(' . $this->getSqlWhereClause($selectBuilder->getWheres()) . ')'; + } elseif ($where instanceof BuilderWhereCondition) { + $result[] = sprintf( + '`%s` %s %s', + $where->field, + $where->operator, + $this->mixedValueToSqlConverter->handle($where->value, $this->bindings), + ); + } elseif ($where instanceof BuilderWhereIn) { + $values = []; + + foreach ($where->values as $value) { + $values[] = $this->mixedValueToSqlConverter->handle($value, $this->bindings); + } + + if (count($values) === 1) { + $result[] = sprintf( + '`%s` = %s', + $where->field, + $values[0], + ); + } else { + $result[] = sprintf( + '`%s` in(%s)', + $where->field, + implode(',', $values), + ); + } + } + } + + return implode(' ', $result); + } +} diff --git a/src/Providers/BulkUpsertServiceProvider.php b/src/Providers/BulkUpsertServiceProvider.php index 748ecdb..bf62ed7 100644 --- a/src/Providers/BulkUpsertServiceProvider.php +++ b/src/Providers/BulkUpsertServiceProvider.php @@ -8,6 +8,7 @@ use Lapaliv\BulkUpsert\Contracts\BulkDriverManager; use Lapaliv\BulkUpsert\Drivers\MySqlBulkDriver; use Lapaliv\BulkUpsert\Drivers\PostgreSqlBulkDriver; +use Lapaliv\BulkUpsert\Drivers\SqLiteBulkDriver; use Lapaliv\BulkUpsert\Events\BulkEventDispatcher; use Lapaliv\BulkUpsert\Features\AddWhereClauseToBuilderFeature; use Lapaliv\BulkUpsert\Features\GetDateFieldsFeature; @@ -57,6 +58,10 @@ public function register(): void 'pgsql', $this->app->make(PostgreSqlBulkDriver::class) ); + $driverManager->registerDriver( + 'sqlite', + $this->app->make(SqLiteBulkDriver::class) + ); BulkEventDispatcher::setIlluminateEventDispatcher($this->app->make('events')); } diff --git a/tests/TestCase.php b/tests/TestCase.php index 228d203..e5dc0c8 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -6,18 +6,12 @@ use Illuminate\Database\Capsule\Manager; use Illuminate\Support\Facades\DB; use Lapaliv\BulkUpsert\Providers\BulkUpsertServiceProvider; -use Lapaliv\BulkUpsert\Tests\App\Models\MySqlComment; -use Lapaliv\BulkUpsert\Tests\App\Models\MySqlPost; -use Lapaliv\BulkUpsert\Tests\App\Models\MySqlStory; -use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; -use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlComment; -use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlPost; -use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlStory; -use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; use Mockery\LegacyMockInterface; use Mockery\MockInterface; use Mockery\VerificationDirector; use PDO; +use RuntimeException; +use stdClass; /** * @internal @@ -37,27 +31,39 @@ public static function setUpBeforeClass(): void $dotenv = Dotenv::createMutable(dirname(__DIR__)); $dotenv->load(); + $sqlitePath = self::getSqLitePath(); + + if (file_exists($sqlitePath)) { + unlink($sqlitePath); + } + + if (!is_dir(dirname($sqlitePath))) { + mkdir(dirname($sqlitePath), 0777, true); + } + + if (!touch($sqlitePath)) { + throw new RuntimeException('SQLite database was not created'); + } + self::configureManager(); - MySqlComment::dropTable(); - MySqlPost::dropTable(); - MySqlUser::dropTable(); - MySqlStory::dropTable(); - - PostgreSqlComment::dropTable(); - PostgreSqlPost::dropTable(); - PostgreSqlUser::dropTable(); - PostgreSqlStory::dropTable(); - - MySqlUser::createTable(); - MySqlPost::createTable(); - MySqlComment::createTable(); - MySqlStory::createTable(); - - PostgreSqlUser::createTable(); - PostgreSqlPost::createTable(); - PostgreSqlComment::createTable(); - PostgreSqlStory::createTable(); + // deleting tables + $modelPrefixes = ['MySql', 'PostgreSql', 'SqLite']; + + foreach ($modelPrefixes as $modelPrefix) { + call_user_func(['Lapaliv\BulkUpsert\Tests\App\Models\\' . $modelPrefix . 'Comment', 'dropTable']); + call_user_func(['Lapaliv\BulkUpsert\Tests\App\Models\\' . $modelPrefix . 'Post', 'dropTable']); + call_user_func(['Lapaliv\BulkUpsert\Tests\App\Models\\' . $modelPrefix . 'User', 'dropTable']); + call_user_func(['Lapaliv\BulkUpsert\Tests\App\Models\\' . $modelPrefix . 'Story', 'dropTable']); + } + + // creating tables + foreach ($modelPrefixes as $modelPrefix) { + call_user_func(['Lapaliv\BulkUpsert\Tests\App\Models\\' . $modelPrefix . 'User', 'createTable']); + call_user_func(['Lapaliv\BulkUpsert\Tests\App\Models\\' . $modelPrefix . 'Post', 'createTable']); + call_user_func(['Lapaliv\BulkUpsert\Tests\App\Models\\' . $modelPrefix . 'Comment', 'createTable']); + call_user_func(['Lapaliv\BulkUpsert\Tests\App\Models\\' . $modelPrefix . 'Story', 'createTable']); + } } protected function setUp(): void @@ -71,20 +77,14 @@ protected function setUp(): void $this->app->register(BulkUpsertServiceProvider::class); } - public function assertDatabaseMissing($table, array $data, $connection = null) + public function assertDatabaseMissing($table, array $data, $connection = null): void { $filters = []; $jsons = []; foreach ($data as $key => $value) { if (is_array($value)) { - if ($connection === 'mysql') { - $filters[$key] = DB::connection($connection)->raw( - sprintf("cast('%s' as json)", json_encode($value, JSON_THROW_ON_ERROR)) - ); - } else { - $jsons[$key] = json_encode($value); - } + $jsons[$key] = json_encode($value); } else { $filters[$key] = $value; } @@ -97,23 +97,28 @@ public function assertDatabaseMissing($table, array $data, $connection = null) } foreach ($jsons as $key => $json) { - $hasRows = DB::connection($connection) + $hasRows = false; + DB::connection($connection) ->table($table) ->where($filters) - ->where( - DB::connection($connection)->raw($key . '::text'), - DB::connection($connection)->raw( - sprintf("cast('%s' as json)::text", $json) - ) - ) - ->exists(); + ->orderBy('id') + ->select('id', $key) + ->each( + function (stdClass $row) use ($json, $key, &$hasRows): bool { + if ($row->{$key} === $json) { + $hasRows = true; + } + + return !$hasRows; + } + ); if ($hasRows) { $this->fail( sprintf( 'Failed asserting that a row in the table [%s] matches the attributes %s', $table, - json_encode(array_merge($filters, [$key => $json]), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) + json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) ) ); } @@ -130,20 +135,14 @@ protected function spyShouldNotHaveReceived(LegacyMockInterface|MockInterface $s $spy->shouldNotHaveReceived('__invoke'); } - protected function assertDatabaseHas($table, array $data, $connection = null) + protected function assertDatabaseHas($table, array $data, $connection = null): void { $filters = []; $jsons = []; foreach ($data as $key => $value) { if (is_array($value)) { - if ($connection === 'mysql') { - $filters[$key] = DB::connection($connection)->raw( - sprintf("cast('%s' as json)", json_encode($value, JSON_THROW_ON_ERROR)) - ); - } else { - $jsons[$key] = json_encode($value); - } + $jsons[$key] = json_encode($value); } else { $filters[$key] = $value; } @@ -156,23 +155,31 @@ protected function assertDatabaseHas($table, array $data, $connection = null) } foreach ($jsons as $key => $json) { - $hasRows = DB::connection($connection) + $hasRows = false; + + DB::connection($connection) ->table($table) ->where($filters) - ->where( - DB::connection($connection)->raw($key . '::text'), - DB::connection($connection)->raw( - sprintf("cast('%s' as json)::text", $json) - ) - ) - ->exists(); + ->orderBy('id') + ->select('id', $key) + ->each( + function (stdClass $model) use (&$hasRows, $key, $json): bool { + if ($model->{$key} === $json) { + $hasRows = true; + + return false; + } + + return true; + } + ); if (!$hasRows) { $this->fail( sprintf( 'Failed asserting that a row in the table [%s] matches the attributes %s', $table, - json_encode(array_merge($filters, [$key => $json]), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) + json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) ) ); } @@ -217,9 +224,21 @@ private static function configureManager(): void 'sslmode' => 'prefer', ], 'pgsql'); + $manager->addConnection([ + 'driver' => 'sqlite', + 'database' => self::getSqLitePath(), + 'prefix' => '', + // 'foreign_key_constraints' => true, + ], 'sqlite'); + self::$manager = $manager; self::$manager->setAsGlobal(); self::$manager->bootEloquent(); } + + private static function getSqLitePath(): string + { + return __DIR__ . '/database/database.sqlite'; + } } diff --git a/tests/Unit/Bulk/Create/CreateAndReturnTest.php b/tests/Unit/Bulk/Create/CreateAndReturnTest.php index 8b9c672..1cbf481 100644 --- a/tests/Unit/Bulk/Create/CreateAndReturnTest.php +++ b/tests/Unit/Bulk/Create/CreateAndReturnTest.php @@ -10,6 +10,9 @@ use Lapaliv\BulkUpsert\Tests\App\Models\MySqlStory; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlStory; +use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteStory; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\Story; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; @@ -35,7 +38,9 @@ final class CreateAndReturnTest extends TestCase public function testDatabase(string $model): void { // arrange - $users = $this->userGenerator->makeCollection(2); + $users = $this->userGenerator + ->setModel($model) + ->makeCollection(2); $sut = $model::query() ->bulk() ->uniqueBy(['email']); @@ -53,9 +58,9 @@ public function testDatabase(string $model): void 'posts_count' => $user->posts_count, 'is_admin' => $user->is_admin, 'balance' => $user->balance, - 'birthday' => $user->birthday, + 'birthday' => $user->birthday?->toDateString(), 'phones' => $user->phones, - 'last_visited_at' => $user->last_visited_at, + 'last_visited_at' => $user->last_visited_at?->toDateTimeString(), 'created_at' => Carbon::now()->toDateTimeString(), 'updated_at' => Carbon::now()->toDateTimeString(), 'deleted_at' => $user->deleted_at?->toDateTimeString(), @@ -187,7 +192,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgresql' => [MySqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } @@ -195,7 +201,8 @@ public function storyModelsDataProvider(): array { return [ 'mysql' => [MySqlStory::class], - 'postgresql' => [PostgreSqlStory::class], + 'pgsql' => [PostgreSqlStory::class], + 'sqlite' => [SqLiteStory::class], ]; } } diff --git a/tests/Unit/Bulk/Create/CreateAndTouchTest.php b/tests/Unit/Bulk/Create/CreateAndTouchTest.php index bc52ab3..ff29604 100644 --- a/tests/Unit/Bulk/Create/CreateAndTouchTest.php +++ b/tests/Unit/Bulk/Create/CreateAndTouchTest.php @@ -13,6 +13,9 @@ use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlComment; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlPost; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteComment; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLitePost; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; @@ -88,11 +91,16 @@ public function modelsDataProvider(): array MySqlPost::class, MySqlComment::class, ], - 'postgresql' => [ + 'pgsql' => [ PostgreSqlUser::class, PostgreSqlPost::class, PostgreSqlComment::class, ], + 'sqlite' => [ + SqLiteUser::class, + SqLitePost::class, + SqLiteComment::class, + ], ]; } } diff --git a/tests/Unit/Bulk/Create/CreateBeforeWritingEventDependenciesTest.php b/tests/Unit/Bulk/Create/CreateBeforeWritingEventDependenciesTest.php index db213cf..d6301da 100644 --- a/tests/Unit/Bulk/Create/CreateBeforeWritingEventDependenciesTest.php +++ b/tests/Unit/Bulk/Create/CreateBeforeWritingEventDependenciesTest.php @@ -12,6 +12,7 @@ use Lapaliv\BulkUpsert\Tests\App\Features\UserGenerator; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Observers\Observer; use Lapaliv\BulkUpsert\Tests\App\Support\TestCallback; @@ -310,7 +311,8 @@ function () { $result = []; $models = [ 'mysql' => MySqlUser::class, - 'postgre' => PostgreSqlUser::class, + 'pgsql' => PostgreSqlUser::class, + 'sqlite' => SqLiteUser::class, ]; foreach ($target as $key => $value) { @@ -408,7 +410,8 @@ function () { $result = []; $models = [ 'mysql' => MySqlUser::class, - 'postgre' => PostgreSqlUser::class, + 'pgsql' => PostgreSqlUser::class, + 'sqlite' => SqLiteUser::class, ]; foreach ($target as $key => $value) { diff --git a/tests/Unit/Bulk/Create/CreateBuilderCallbacksTest.php b/tests/Unit/Bulk/Create/CreateBuilderCallbacksTest.php index 76391ac..e869241 100644 --- a/tests/Unit/Bulk/Create/CreateBuilderCallbacksTest.php +++ b/tests/Unit/Bulk/Create/CreateBuilderCallbacksTest.php @@ -12,6 +12,7 @@ use Lapaliv\BulkUpsert\Tests\App\Features\UserGenerator; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Support\TestCallback; use Lapaliv\BulkUpsert\Tests\TestCase; @@ -182,7 +183,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Create/CreateDifferentUniqueByTest.php b/tests/Unit/Bulk/Create/CreateDifferentUniqueByTest.php index 405e07c..80735e4 100644 --- a/tests/Unit/Bulk/Create/CreateDifferentUniqueByTest.php +++ b/tests/Unit/Bulk/Create/CreateDifferentUniqueByTest.php @@ -8,6 +8,7 @@ use Lapaliv\BulkUpsert\Contracts\BulkException; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -88,7 +89,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Create/CreateEventsTest.php b/tests/Unit/Bulk/Create/CreateEventsTest.php index 1e516e9..4a76eec 100644 --- a/tests/Unit/Bulk/Create/CreateEventsTest.php +++ b/tests/Unit/Bulk/Create/CreateEventsTest.php @@ -6,6 +6,7 @@ use Lapaliv\BulkUpsert\Enums\BulkEventEnum; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Observers\Observer; use Lapaliv\BulkUpsert\Tests\App\Support\TestCallback; @@ -338,7 +339,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Create/CreateOrAccumulateTest.php b/tests/Unit/Bulk/Create/CreateOrAccumulateTest.php index 0490f8f..900cfbe 100644 --- a/tests/Unit/Bulk/Create/CreateOrAccumulateTest.php +++ b/tests/Unit/Bulk/Create/CreateOrAccumulateTest.php @@ -7,6 +7,7 @@ use Lapaliv\BulkUpsert\Exceptions\BulkIdentifierDidNotFind; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Observers\Observer; use Lapaliv\BulkUpsert\Tests\TestCase; @@ -192,7 +193,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Create/CreateTest.php b/tests/Unit/Bulk/Create/CreateTest.php index 6ffcffb..007d87c 100644 --- a/tests/Unit/Bulk/Create/CreateTest.php +++ b/tests/Unit/Bulk/Create/CreateTest.php @@ -9,6 +9,7 @@ use Lapaliv\BulkUpsert\Exceptions\BulkIdentifierDidNotFind; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Observers\Observer; use Lapaliv\BulkUpsert\Tests\TestCase; @@ -54,9 +55,9 @@ public function testBase(string $model): void 'posts_count' => $user->posts_count, 'is_admin' => $user->is_admin, 'balance' => $user->balance, - 'birthday' => $user->birthday, + 'birthday' => $user->birthday?->toDateString(), 'phones' => $user->phones, - 'last_visited_at' => $user->last_visited_at, + 'last_visited_at' => $user->last_visited_at?->toDateTimeString(), 'created_at' => Carbon::now()->toDateTimeString(), 'updated_at' => Carbon::now()->toDateTimeString(), 'deleted_at' => $user->deleted_at?->toDateTimeString(), @@ -225,7 +226,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Delete/DatabaseTest.php b/tests/Unit/Bulk/Delete/DatabaseTest.php index 58a3c54..30eadae 100644 --- a/tests/Unit/Bulk/Delete/DatabaseTest.php +++ b/tests/Unit/Bulk/Delete/DatabaseTest.php @@ -10,6 +10,9 @@ use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\Post; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlPost; +use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLitePost; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -54,9 +57,9 @@ public function testDeleteWithSoftDeleting(string $model): void 'posts_count' => $user->posts_count, 'is_admin' => $user->is_admin, 'balance' => $user->balance, - 'birthday' => $user->birthday, + 'birthday' => $user->birthday?->toDateString(), 'phones' => $user->phones, - 'last_visited_at' => $user->last_visited_at, + 'last_visited_at' => $user->last_visited_at?->toDateTimeString(), 'created_at' => Carbon::now()->toDateTimeString(), 'updated_at' => Carbon::now()->toDateTimeString(), 'deleted_at' => Carbon::now()->toDateTimeString(), @@ -97,9 +100,9 @@ public function testForceDeleteWithSoftDeleting(string $model): void 'posts_count' => $user->posts_count, 'is_admin' => $user->is_admin, 'balance' => $user->balance, - 'birthday' => $user->birthday, + 'birthday' => $user->birthday?->toDateString(), 'phones' => $user->phones, - 'last_visited_at' => $user->last_visited_at, + 'last_visited_at' => $user->last_visited_at?->toDateTimeString(), 'created_at' => Carbon::now()->toDateTimeString(), 'updated_at' => Carbon::now()->toDateTimeString(), 'deleted_at' => Carbon::now()->toDateTimeString(), @@ -140,7 +143,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgresql' => [MySqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqliteUser::class], ]; } @@ -155,14 +159,22 @@ public function postModelsDataProvider(): array MySqlPost::class, 'forceDelete', ], - 'postgresql, delete' => [ + 'pgsql, delete' => [ PostgreSqlPost::class, 'delete', ], - 'postgresql, forceDelete' => [ + 'pgsql, forceDelete' => [ PostgreSqlPost::class, 'forceDelete', ], + 'sqlite, delete' => [ + SqlitePost::class, + 'delete', + ], + 'sqlite, forceDelete' => [ + SqlitePost::class, + 'forceDelete', + ], ]; } } diff --git a/tests/Unit/Bulk/Delete/DeleteAccumulatedTest.php b/tests/Unit/Bulk/Delete/DeleteAccumulatedTest.php index 608fe1a..19385e2 100644 --- a/tests/Unit/Bulk/Delete/DeleteAccumulatedTest.php +++ b/tests/Unit/Bulk/Delete/DeleteAccumulatedTest.php @@ -9,6 +9,8 @@ use Lapaliv\BulkUpsert\Tests\App\Models\Post; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlPost; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLitePost; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -116,7 +118,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgresql' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } @@ -128,11 +131,16 @@ public function postModelsDataProvider(): array 'deleteOrAccumulate', 'deleteAccumulated', ], - 'postgresql' => [ + 'pgsql' => [ PostgreSqlPost::class, 'forceDeleteOrAccumulate', 'forceDeleteAccumulated', ], + 'sqlite' => [ + SqLitePost::class, + 'forceDeleteOrAccumulate', + 'forceDeleteAccumulated', + ], ]; } } diff --git a/tests/Unit/Bulk/Delete/DeleteOrAccumulateTest.php b/tests/Unit/Bulk/Delete/DeleteOrAccumulateTest.php index 1734370..53350aa 100644 --- a/tests/Unit/Bulk/Delete/DeleteOrAccumulateTest.php +++ b/tests/Unit/Bulk/Delete/DeleteOrAccumulateTest.php @@ -9,6 +9,8 @@ use Lapaliv\BulkUpsert\Tests\App\Models\Post; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlPost; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLitePost; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -189,7 +191,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgresql' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } @@ -204,14 +207,22 @@ public function postModelsDataProvider(): array MySqlPost::class, 'forceDeleteOrAccumulate', ], - 'postgresql, deleteOrAccumulate' => [ + 'pgsql, deleteOrAccumulate' => [ PostgreSqlPost::class, 'deleteOrAccumulate', ], - 'postgresql, forceDeleteOrAccumulate' => [ + 'pgsql, forceDeleteOrAccumulate' => [ PostgreSqlPost::class, 'forceDeleteOrAccumulate', ], + 'sqlite, deleteOrAccumulate' => [ + SqLitePost::class, + 'deleteOrAccumulate', + ], + 'sqlite, forceDeleteOrAccumulate' => [ + SqLitePost::class, + 'forceDeleteOrAccumulate', + ], ]; } } diff --git a/tests/Unit/Bulk/Delete/FireEventsTest.php b/tests/Unit/Bulk/Delete/FireEventsTest.php index 0be3f21..3814f22 100644 --- a/tests/Unit/Bulk/Delete/FireEventsTest.php +++ b/tests/Unit/Bulk/Delete/FireEventsTest.php @@ -13,6 +13,7 @@ use Lapaliv\BulkUpsert\Tests\App\Models\Post; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlPost; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLitePost; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Observers\Observer; use Lapaliv\BulkUpsert\Tests\App\Support\TestCallback; @@ -319,14 +320,14 @@ public function modelWithSoftDeletingDataProvider(): array BulkEventEnum::DELETED_MANY, BulkEventEnum::FORCE_DELETED_MANY, ], - 'postgresql + -ing events' => [ + 'pgsql + -ing events' => [ PostgreSqlUser::class, BulkEventEnum::FORCE_DELETING, BulkEventEnum::DELETING, BulkEventEnum::DELETING_MANY, BulkEventEnum::FORCE_DELETING_MANY, ], - 'postgresql + -ed events' => [ + 'pgsql + -ed events' => [ PostgreSqlUser::class, BulkEventEnum::FORCE_DELETED, BulkEventEnum::DELETED, @@ -353,20 +354,34 @@ public function modelWithoutSoftDeletingDataProvider(): array BulkEventEnum::DELETED_MANY, BulkEventEnum::FORCE_DELETED_MANY, ], - 'postgresql + -ing events' => [ + 'pgsql + -ing events' => [ PostgreSqlPost::class, BulkEventEnum::FORCE_DELETING, BulkEventEnum::DELETING, BulkEventEnum::DELETING_MANY, BulkEventEnum::FORCE_DELETING_MANY, ], - 'postgresql + -ed events' => [ + 'pgsql + -ed events' => [ PostgreSqlPost::class, BulkEventEnum::FORCE_DELETED, BulkEventEnum::DELETED, BulkEventEnum::DELETED_MANY, BulkEventEnum::FORCE_DELETED_MANY, ], + 'sqlite + -ing events' => [ + SqLitePost::class, + BulkEventEnum::FORCE_DELETING, + BulkEventEnum::DELETING, + BulkEventEnum::DELETING_MANY, + BulkEventEnum::FORCE_DELETING_MANY, + ], + 'sqlite + -ed events' => [ + SqLitePost::class, + BulkEventEnum::FORCE_DELETED, + BulkEventEnum::DELETED, + BulkEventEnum::DELETED_MANY, + BulkEventEnum::FORCE_DELETED_MANY, + ], ]; } } diff --git a/tests/Unit/Bulk/SaveAccumulatedTest.php b/tests/Unit/Bulk/SaveAccumulatedTest.php index 1ecf56d..f287a23 100644 --- a/tests/Unit/Bulk/SaveAccumulatedTest.php +++ b/tests/Unit/Bulk/SaveAccumulatedTest.php @@ -6,6 +6,7 @@ use Lapaliv\BulkUpsert\Tests\App\Collection\UserCollection; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -64,7 +65,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Update/UpdateAfterWritingEventsTest.php b/tests/Unit/Bulk/Update/UpdateAfterWritingEventsTest.php index 5f1d598..7105329 100644 --- a/tests/Unit/Bulk/Update/UpdateAfterWritingEventsTest.php +++ b/tests/Unit/Bulk/Update/UpdateAfterWritingEventsTest.php @@ -12,6 +12,7 @@ use Lapaliv\BulkUpsert\Tests\App\Features\UserGenerator; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Observers\Observer; use Lapaliv\BulkUpsert\Tests\App\Support\TestCallback; @@ -268,7 +269,8 @@ public function userModels(): array { return [ 'mysql' => MySqlUser::class, - 'postgre' => PostgreSqlUser::class, + 'pgsql' => PostgreSqlUser::class, + 'sqlite' => SqLiteUser::class, ]; } } diff --git a/tests/Unit/Bulk/Update/UpdateAndReturnTest.php b/tests/Unit/Bulk/Update/UpdateAndReturnTest.php index b929795..721c626 100644 --- a/tests/Unit/Bulk/Update/UpdateAndReturnTest.php +++ b/tests/Unit/Bulk/Update/UpdateAndReturnTest.php @@ -7,6 +7,7 @@ use Lapaliv\BulkUpsert\Tests\App\Collection\UserCollection; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -163,7 +164,8 @@ public function userModels(): array { return [ 'mysql' => MySqlUser::class, - 'postgre' => PostgreSqlUser::class, + 'pgsql' => PostgreSqlUser::class, + 'sqlite' => SqLiteUser::class, ]; } } diff --git a/tests/Unit/Bulk/Update/UpdateAndTouchTest.php b/tests/Unit/Bulk/Update/UpdateAndTouchTest.php index 3c9403a..60c864b 100644 --- a/tests/Unit/Bulk/Update/UpdateAndTouchTest.php +++ b/tests/Unit/Bulk/Update/UpdateAndTouchTest.php @@ -13,6 +13,8 @@ use Lapaliv\BulkUpsert\Tests\App\Models\Post; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlComment; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlPost; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteComment; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLitePost; use Lapaliv\BulkUpsert\Tests\TestCase; /** @@ -80,7 +82,8 @@ public function modelsDataProvider(): array { return [ 'mysql' => [MySqlPost::class, MySqlComment::class], - 'postgre' => [PostgreSqlPost::class, PostgreSqlComment::class], + 'pgsql' => [PostgreSqlPost::class, PostgreSqlComment::class], + 'sqlite' => [SqLitePost::class, SqLiteComment::class], ]; } } diff --git a/tests/Unit/Bulk/Update/UpdateBeforeWritingEventDependenciesTest.php b/tests/Unit/Bulk/Update/UpdateBeforeWritingEventDependenciesTest.php index 39ec5ff..39d2dec 100644 --- a/tests/Unit/Bulk/Update/UpdateBeforeWritingEventDependenciesTest.php +++ b/tests/Unit/Bulk/Update/UpdateBeforeWritingEventDependenciesTest.php @@ -12,6 +12,7 @@ use Lapaliv\BulkUpsert\Tests\App\Features\UserGenerator; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Observers\Observer; use Lapaliv\BulkUpsert\Tests\App\Support\TestCallback; @@ -597,7 +598,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Update/UpdateBuilderCallbacksTest.php b/tests/Unit/Bulk/Update/UpdateBuilderCallbacksTest.php index 35cbaa8..45aae5e 100644 --- a/tests/Unit/Bulk/Update/UpdateBuilderCallbacksTest.php +++ b/tests/Unit/Bulk/Update/UpdateBuilderCallbacksTest.php @@ -12,6 +12,7 @@ use Lapaliv\BulkUpsert\Tests\App\Features\UserGenerator; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Support\TestCallback; use Lapaliv\BulkUpsert\Tests\TestCase; @@ -219,7 +220,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Update/UpdateDifferentUniqueByTest.php b/tests/Unit/Bulk/Update/UpdateDifferentUniqueByTest.php index fcad7f2..c725573 100644 --- a/tests/Unit/Bulk/Update/UpdateDifferentUniqueByTest.php +++ b/tests/Unit/Bulk/Update/UpdateDifferentUniqueByTest.php @@ -8,6 +8,7 @@ use Lapaliv\BulkUpsert\Contracts\BulkException; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -120,7 +121,8 @@ public function userModels(): array { return [ 'mysql' => MySqlUser::class, - 'postgre' => PostgreSqlUser::class, + 'pgsql' => PostgreSqlUser::class, + 'sqlite' => SqLiteUser::class, ]; } } diff --git a/tests/Unit/Bulk/Update/UpdateEventsTest.php b/tests/Unit/Bulk/Update/UpdateEventsTest.php index 8b28748..61beda8 100644 --- a/tests/Unit/Bulk/Update/UpdateEventsTest.php +++ b/tests/Unit/Bulk/Update/UpdateEventsTest.php @@ -6,6 +6,7 @@ use Lapaliv\BulkUpsert\Enums\BulkEventEnum; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Observers\Observer; use Lapaliv\BulkUpsert\Tests\App\Support\TestCallback; @@ -328,7 +329,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Update/UpdateOnlyAndExceptTest.php b/tests/Unit/Bulk/Update/UpdateOnlyAndExceptTest.php index 614855b..74fa5cf 100644 --- a/tests/Unit/Bulk/Update/UpdateOnlyAndExceptTest.php +++ b/tests/Unit/Bulk/Update/UpdateOnlyAndExceptTest.php @@ -7,6 +7,7 @@ use Lapaliv\BulkUpsert\Contracts\BulkException; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -56,7 +57,7 @@ function (User $user) { 'posts_count' => $user->posts_count, 'is_admin' => $user->is_admin, 'balance' => $user->balance, - 'birthday' => $user->birthday, + 'birthday' => $user->birthday?->toDateString(), 'phones' => $user->phones, 'last_visited_at' => $user->last_visited_at?->toDateTimeString(), 'updated_at' => Carbon::now()->toDateTimeString(), @@ -104,7 +105,7 @@ function (User $user) { 'posts_count' => $user->posts_count, 'is_admin' => $user->is_admin, 'balance' => $user->balance, - 'birthday' => $user->birthday, + 'birthday' => $user->birthday?->toDateString(), 'phones' => $user->phones, 'last_visited_at' => $user->last_visited_at?->toDateTimeString(), 'updated_at' => Carbon::now()->toDateTimeString(), @@ -117,7 +118,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Update/UpdateOrAccumulateTest.php b/tests/Unit/Bulk/Update/UpdateOrAccumulateTest.php index 5c05532..67e8417 100644 --- a/tests/Unit/Bulk/Update/UpdateOrAccumulateTest.php +++ b/tests/Unit/Bulk/Update/UpdateOrAccumulateTest.php @@ -5,6 +5,7 @@ use Lapaliv\BulkUpsert\Contracts\BulkException; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -160,7 +161,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Update/UpdateTest.php b/tests/Unit/Bulk/Update/UpdateTest.php index 411db8b..6f91bb9 100644 --- a/tests/Unit/Bulk/Update/UpdateTest.php +++ b/tests/Unit/Bulk/Update/UpdateTest.php @@ -7,6 +7,7 @@ use Lapaliv\BulkUpsert\Contracts\BulkException; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -126,7 +127,8 @@ public function userModels(): array { return [ 'mysql' => MySqlUser::class, - 'postgre' => PostgreSqlUser::class, + 'pgsql' => PostgreSqlUser::class, + 'sqlite' => SqLiteUser::class, ]; } } diff --git a/tests/Unit/Bulk/Upsert/UpsertAndReturnTest.php b/tests/Unit/Bulk/Upsert/UpsertAndReturnTest.php index 652b83e..6c7913a 100644 --- a/tests/Unit/Bulk/Upsert/UpsertAndReturnTest.php +++ b/tests/Unit/Bulk/Upsert/UpsertAndReturnTest.php @@ -5,6 +5,7 @@ use Lapaliv\BulkUpsert\Tests\App\Collection\UserCollection; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -187,8 +188,9 @@ public function testResultUpdateOnly(string $model): void public function userModelsDataProvider(): array { return [ - // 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'mysql' => [MySqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Upsert/UpsertOrAccumulateTest.php b/tests/Unit/Bulk/Upsert/UpsertOrAccumulateTest.php index 0febbf5..5fda261 100644 --- a/tests/Unit/Bulk/Upsert/UpsertOrAccumulateTest.php +++ b/tests/Unit/Bulk/Upsert/UpsertOrAccumulateTest.php @@ -6,6 +6,7 @@ use Lapaliv\BulkUpsert\Tests\App\Collection\UserCollection; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -144,7 +145,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/Bulk/Upsert/UpsertTest.php b/tests/Unit/Bulk/Upsert/UpsertTest.php index 6f2b94f..0d9d573 100644 --- a/tests/Unit/Bulk/Upsert/UpsertTest.php +++ b/tests/Unit/Bulk/Upsert/UpsertTest.php @@ -7,6 +7,7 @@ use Lapaliv\BulkUpsert\Tests\App\Collection\UserCollection; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\TestCase; use Lapaliv\BulkUpsert\Tests\Unit\UserTestTrait; @@ -97,7 +98,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'pgsql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/BulkBuilderTrait/SelectAndUpdateManyTest.php b/tests/Unit/BulkBuilderTrait/SelectAndUpdateManyTest.php index f477b32..1dbc6dd 100644 --- a/tests/Unit/BulkBuilderTrait/SelectAndUpdateManyTest.php +++ b/tests/Unit/BulkBuilderTrait/SelectAndUpdateManyTest.php @@ -5,6 +5,7 @@ use JsonException; use Lapaliv\BulkUpsert\Tests\App\Models\MySqlUser; use Lapaliv\BulkUpsert\Tests\App\Models\PostgreSqlUser; +use Lapaliv\BulkUpsert\Tests\App\Models\SqLiteUser; use Lapaliv\BulkUpsert\Tests\App\Models\User; use Lapaliv\BulkUpsert\Tests\App\Observers\Observer; use Lapaliv\BulkUpsert\Tests\TestCase; @@ -41,7 +42,7 @@ public function testWithoutEvents(string $model): void 'balance' => $fakeUser->balance, 'birthday' => $fakeUser->birthday, 'phones' => $fakeUser->phones, - 'last_visited_at' => $fakeUser->last_visited_at, + 'last_visited_at' => $fakeUser->last_visited_at?->toDateTimeString(), ]; $sut = $model::query() ->whereIn('email', $users->pluck('email')); @@ -62,7 +63,7 @@ function (User $user) use ($values) { 'posts_count' => $values['posts_count'], 'is_admin' => $values['is_admin'], 'balance' => $values['balance'], - 'birthday' => $values['birthday'], + 'birthday' => $values['birthday']?->toDateString(), 'phones' => $values['phones'], 'last_visited_at' => $values['last_visited_at'], ], @@ -96,7 +97,7 @@ public function testWithEventsById(string $model): void 'balance' => $fakeUser->balance, 'birthday' => $fakeUser->birthday, 'phones' => $fakeUser->phones, - 'last_visited_at' => $fakeUser->last_visited_at, + 'last_visited_at' => $fakeUser->last_visited_at?->toDateTimeString(), ]; $model::observe(Observer::class); $sut = $model::query() @@ -118,7 +119,7 @@ function (User $user) use ($values) { 'posts_count' => $values['posts_count'], 'is_admin' => $values['is_admin'], 'balance' => $values['balance'], - 'birthday' => $values['birthday'], + 'birthday' => $values['birthday']?->toDateString(), 'phones' => $values['phones'], 'last_visited_at' => $values['last_visited_at'], ], @@ -152,7 +153,7 @@ public function testWithEventsByEmail(string $model): void 'balance' => $fakeUser->balance, 'birthday' => $fakeUser->birthday, 'phones' => $fakeUser->phones, - 'last_visited_at' => $fakeUser->last_visited_at, + 'last_visited_at' => $fakeUser->last_visited_at?->toDateTimeString(), ]; $model::observe(Observer::class); $sut = $model::query() @@ -174,7 +175,7 @@ function (User $user) use ($values) { 'posts_count' => $values['posts_count'], 'is_admin' => $values['is_admin'], 'balance' => $values['balance'], - 'birthday' => $values['birthday'], + 'birthday' => $values['birthday']?->toDateString(), 'phones' => $values['phones'], 'last_visited_at' => $values['last_visited_at'], ], @@ -188,7 +189,8 @@ public function userModelsDataProvider(): array { return [ 'mysql' => [MySqlUser::class], - 'postgre' => [PostgreSqlUser::class], + 'psql' => [PostgreSqlUser::class], + 'sqlite' => [SqLiteUser::class], ]; } } diff --git a/tests/Unit/UserTestTrait.php b/tests/Unit/UserTestTrait.php index 8c88235..f1e3f73 100644 --- a/tests/Unit/UserTestTrait.php +++ b/tests/Unit/UserTestTrait.php @@ -35,7 +35,7 @@ protected function userWasCreated(User $user): void 'balance' => $user->balance, 'birthday' => $user->birthday?->toDateString(), 'phones' => $user->phones, - 'last_visited_at' => $user->last_visited_at, + 'last_visited_at' => $user->last_visited_at?->toDateTimeString(), 'created_at' => Carbon::now()->toDateTimeString(), 'updated_at' => Carbon::now()->toDateTimeString(), 'deleted_at' => $user->deleted_at?->toDateTimeString(), @@ -54,7 +54,7 @@ protected function userExists(User $user): void 'balance' => $user->balance, 'birthday' => $user->birthday?->toDateString(), 'phones' => $user->phones, - 'last_visited_at' => $user->last_visited_at, + 'last_visited_at' => $user->last_visited_at?->toDateTimeString(), 'created_at' => $user->created_at->toDateTimeString(), 'updated_at' => $user->updated_at->toDateTimeString(), 'deleted_at' => $user->deleted_at?->toDateTimeString(), @@ -80,7 +80,7 @@ protected function userWasSoftDeleted(User $user): void 'balance' => $user->balance, 'birthday' => $user->birthday?->toDateString(), 'phones' => $user->phones, - 'last_visited_at' => $user->last_visited_at, + 'last_visited_at' => $user->last_visited_at?->toDateTimeString(), 'created_at' => $user->created_at->toDateTimeString(), 'updated_at' => $user->updated_at->toDateTimeString(), ], $user->getConnectionName()); @@ -102,9 +102,9 @@ protected function userWasUpdated(User $user): void 'posts_count' => $user->posts_count, 'is_admin' => $user->is_admin, 'balance' => $user->balance, - 'birthday' => $user->birthday, + 'birthday' => $user->birthday?->toDateString(), 'phones' => $user->phones, - 'last_visited_at' => $user->last_visited_at, + 'last_visited_at' => $user->last_visited_at?->toDateTimeString(), 'created_at' => $user->created_at->toDateTimeString(), 'updated_at' => Carbon::now()->toDateTimeString(), 'deleted_at' => $user->deleted_at?->toDateTimeString(), diff --git a/tests/app/Factories/SqLiteCommentFactory.php b/tests/app/Factories/SqLiteCommentFactory.php new file mode 100644 index 0000000..07f2a06 --- /dev/null +++ b/tests/app/Factories/SqLiteCommentFactory.php @@ -0,0 +1,29 @@ + SqLiteUser::factory(), + 'post_id' => SqLitePost::factory(), + ]); + } +} diff --git a/tests/app/Factories/SqLitePostFactory.php b/tests/app/Factories/SqLitePostFactory.php new file mode 100644 index 0000000..e5383ac --- /dev/null +++ b/tests/app/Factories/SqLitePostFactory.php @@ -0,0 +1,19 @@ +dropIfExists(self::table()); - } catch (Throwable) { - // - } + self::getSchema()->dropIfExists(self::table()); } protected static function getSchema(): Builder diff --git a/tests/app/Models/SqLiteComment.php b/tests/app/Models/SqLiteComment.php new file mode 100644 index 0000000..b9f9a86 --- /dev/null +++ b/tests/app/Models/SqLiteComment.php @@ -0,0 +1,36 @@ +belongsTo(SqLiteUser::class, 'user_id'); + } + + public function post(): BelongsTo|PostBuilder + { + return $this->belongsTo(SqLitePost::class, 'post_id', 'id'); + } + + public static function newFactory(): SqLiteCommentFactory + { + return new SqLiteCommentFactory(); + } +} diff --git a/tests/app/Models/SqLitePost.php b/tests/app/Models/SqLitePost.php new file mode 100644 index 0000000..ca359d2 --- /dev/null +++ b/tests/app/Models/SqLitePost.php @@ -0,0 +1,30 @@ +hasMany(SqLiteComment::class, 'post_id', 'id'); + } + + public static function newFactory(): SqLitePostFactory + { + return new SqLitePostFactory(); + } +} diff --git a/tests/app/Models/SqLiteStory.php b/tests/app/Models/SqLiteStory.php new file mode 100644 index 0000000..b542226 --- /dev/null +++ b/tests/app/Models/SqLiteStory.php @@ -0,0 +1,18 @@ +hasMany(SqLiteComment::class, 'user_id'); + } + + protected static function newFactory(): SqLiteUserFactory + { + return new SqLiteUserFactory(); + } +} diff --git a/tests/database/.gitignore b/tests/database/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/tests/database/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore