From 8366e9835bc3f02aeb0edfb4bf59b9b4fa97d1fb Mon Sep 17 00:00:00 2001 From: Olivier Laviale Date: Thu, 16 Mar 2023 14:18:58 +0100 Subject: [PATCH] Use ActiveRecord's SchemaBuilder --- MIGRATION.md | 4 +- README.md | 31 ++---- composer.json | 2 +- config/services.yml | 7 +- lib/Config.php | 41 ------- lib/ConfigBuilder.php | 117 +++++++------------- lib/Console/InstallCommand.php | 9 +- lib/Console/ListConnectionsCommand.php | 5 +- lib/Console/ListModelsCommand.php | 5 +- lib/ContainerExtension.php | 3 +- lib/Factory.php | 7 +- lib/Hooks.php | 2 + tests/app/all/config/activerecord.php | 11 +- tests/app/all/config/services.yml | 2 +- tests/app/default/config/activerecord.php | 10 +- tests/app/localhost/config/activerecord.php | 2 +- tests/lib/Acme/Article.php | 2 - tests/lib/Acme/NodeModel.php | 3 + tests/lib/Acme/SampleRecord.php | 2 - tests/lib/ConfigBuilderTest.php | 96 +++++++--------- tests/lib/ConfigTest.php | 45 -------- tests/lib/ContainerTest.php | 2 +- tests/lib/HooksTest.php | 25 +++-- tests/lib/SetStateHelper.php | 39 ------- 24 files changed, 144 insertions(+), 328 deletions(-) delete mode 100644 lib/Config.php delete mode 100644 tests/lib/ConfigTest.php delete mode 100644 tests/lib/SetStateHelper.php diff --git a/MIGRATION.md b/MIGRATION.md index a12fd76..ca6d5f0 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -4,11 +4,11 @@ ### New Requirements -None +- PHP 8.1+ ### New features -- Added a `ConfigBuild`, to follow ICanBoogie/Config changes. +- Added a `ConfigBuilder`, to follow ICanBoogie/Config changes. Use ActiveRecord's `ConfigBuilder`. - Added the console commands `activerecord:connections:list` and `activerecord:models:list`, with aliases `activerecord:connections` and `activerecord:models` respectively. - Configures `StaticModelResolver`. diff --git a/README.md b/README.md index af75644..de22952 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,9 @@ connections and models, as well as getters for the connection provider and the m $config ->add_connection( @@ -99,10 +90,10 @@ return fn(ConfigBuilder $config) => $config ) ->add_model( id: 'nodes', - schema: new Schema([ - 'id' => SchemaColumn::serial(primary: true), - 'title' => SchemaColumn::varchar(), - ]) + activerecord_class: Node::class, + schema_builder: fn(SchemaBuilder $b) => $b + ->add_serial('id',primary: true) + ->add_varchar('title') ); ``` diff --git a/composer.json b/composer.json index 8adfd83..bb486db 100644 --- a/composer.json +++ b/composer.json @@ -44,7 +44,7 @@ "extra": { "icanboogie": { "config-constructor": { - "ICanBoogie\\Binding\\ActiveRecord\\Config": "ICanBoogie\\Binding\\ActiveRecord\\ConfigBuilder" + "ICanBoogie\\ActiveRecord\\Config": "ICanBoogie\\Binding\\ActiveRecord\\ConfigBuilder" }, "config-path": "config" } diff --git a/config/services.yml b/config/services.yml index d49bd5a..ec2f445 100644 --- a/config/services.yml +++ b/config/services.yml @@ -2,10 +2,10 @@ services: _defaults: autowire: true - ICanBoogie\Binding\ActiveRecord\Config: + ICanBoogie\ActiveRecord\Config: factory: [ '@ICanBoogie\ConfigProvider', config_for_class ] arguments: - - ICanBoogie\Binding\ActiveRecord\Config + - ICanBoogie\ActiveRecord\Config ICanBoogie\ActiveRecord\ConnectionProvider: class: ICanBoogie\ActiveRecord\ConnectionCollection @@ -19,6 +19,9 @@ services: alias: ICanBoogie\ActiveRecord\ModelCollection public: true # required by StaticModelProvider + ICanBoogie\ActiveRecord\ModelIterator: + alias: ICanBoogie\ActiveRecord\ModelCollection + ICanBoogie\ActiveRecord\ModelResolver: alias: ICanBoogie\ActiveRecord\ModelCollection public: true # required by StaticModelResolver diff --git a/lib/Config.php b/lib/Config.php deleted file mode 100644 index f88b07a..0000000 --- a/lib/Config.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace ICanBoogie\Binding\ActiveRecord; - -use ICanBoogie\ActiveRecord; -use ICanBoogie\ActiveRecord\Model; - -final class Config -{ - public const DEFAULT_CONNECTION_ID = 'primary'; - - /** - * @param array{ - * connections: array>, - * models: array>, - * } $an_array - */ - public static function __set_state(array $an_array): self - { - return new self(...$an_array); - } - - /** - * @param array> $connections - * @param array> $models - */ - public function __construct( - public readonly array $connections, - public readonly array $models, - ) { - } -} diff --git a/lib/ConfigBuilder.php b/lib/ConfigBuilder.php index 30058e0..244228c 100644 --- a/lib/ConfigBuilder.php +++ b/lib/ConfigBuilder.php @@ -11,53 +11,35 @@ namespace ICanBoogie\Binding\ActiveRecord; +use Closure; use ICanBoogie\ActiveRecord; -use ICanBoogie\ActiveRecord\ConnectionOptions; +use ICanBoogie\ActiveRecord\Config; +use ICanBoogie\ActiveRecord\Config\ConnectionDefinition; use ICanBoogie\ActiveRecord\Model; -use ICanBoogie\ActiveRecord\Schema; -use ICanBoogie\ActiveRecord\Table; +use ICanBoogie\ActiveRecord\Query; +use ICanBoogie\ActiveRecord\SchemaBuilder; use ICanBoogie\Config\Builder; -use InvalidArgumentException; -use LogicException; - -use function array_filter; -use function preg_match; /** * @implements Builder */ final class ConfigBuilder implements Builder { - private const REGEXP_TIMEZONE = '/^[-+]\d{2}:\d{2}$/'; - public static function get_fragment_filename(): string { return 'activerecord'; } - /** - * @param array $array - * - * @return array - */ - private static function filter_non_null(array $array): array + private readonly ActiveRecord\ConfigBuilder $inner; + + public function __construct() { - return array_filter($array, fn(mixed $v): bool => $v !== null); + $this->inner = new ActiveRecord\ConfigBuilder(); } - /** - * @var array> - */ - private array $connections = []; - - /** - * @var array> - */ - private array $models = []; - public function build(): Config { - return new Config($this->connections, $this->models); + return $this->inner->build(); } /** @@ -69,67 +51,54 @@ public function add_connection( string|null $username = null, string|null $password = null, string|null $table_name_prefix = null, - string $charset_and_collate = ConnectionOptions::DEFAULT_CHARSET_AND_COLLATE, - string $time_zone = ConnectionOptions::DEFAULT_TIMEZONE, + string $charset_and_collate = ConnectionDefinition::DEFAULT_CHARSET_AND_COLLATE, + string $time_zone = ConnectionDefinition::DEFAULT_TIMEZONE, ): self { - $this->assert_time_zone($time_zone); - - $this->connections[$id] = self::filter_non_null([ // @phpstan-ignore-line - 'dsn' => $dsn, - 'username' => $username, - 'password' => $password, - 'options' => self::filter_non_null([ - ConnectionOptions::ID => $id, - ConnectionOptions::TABLE_NAME_PREFIX => $table_name_prefix, - ConnectionOptions::CHARSET_AND_COLLATE => $charset_and_collate, - ConnectionOptions::TIMEZONE => $time_zone, - ]) - ]); + $this->inner->add_connection( + id: $id, + dsn: $dsn, + username: $username, + password: $password, + table_name_prefix: $table_name_prefix, + charset_and_collate: $charset_and_collate, + time_zone: $time_zone + ); return $this; } - private function assert_time_zone(string $time_zone): void - { - $pattern = self::REGEXP_TIMEZONE; - - if (!preg_match($pattern, $time_zone)) { - throw new InvalidArgumentException("Time zone doesn't match pattern '$pattern': $time_zone"); - } - } - + /** + * @param (Closure(SchemaBuilder $schema): SchemaBuilder) $schema_builder + * @param class-string $activerecord_class + * @param class-string>|null $model_class + * @param class-string>|null $query_class + */ public function add_model( string $id, - Schema $schema, + Closure $schema_builder, string $activerecord_class, - string $connection = 'primary', + string $connection = Config::DEFAULT_CONNECTION_ID, string|null $name = null, string|null $alias = null, string|null $extends = null, string|null $implements = null, string|null $model_class = null, string|null $query_class = null, - mixed $belongs_to = null, - mixed $has_many = null, + Closure $association_builder = null, ): self { - if ($activerecord_class === ActiveRecord::class) { - throw new LogicException("\$activerecord_class must be an extension of ICanBoogie\ActiveRecord"); - } - - $this->models[$id] = self::filter_non_null([ // @phpstan-ignore-line - Table::SCHEMA => $schema, - Table::CONNECTION => $connection, - Table::NAME => $name, - Table::ALIAS => $alias, - Table::EXTENDING => $extends, - Table::IMPLEMENTING => $implements, - Model::ID => $id, - Model::ACTIVERECORD_CLASS => $activerecord_class, - Model::CLASSNAME => $model_class, - Model::QUERY_CLASS => $query_class, - Model::BELONGS_TO => $belongs_to, - Model::HAS_MANY => $has_many, - ]); + $this->inner->add_model( + id: $id, + schema_builder: $schema_builder, + activerecord_class: $activerecord_class, + connection: $connection, + name: $name, + alias: $alias, + extends: $extends, + implements: $implements, + model_class: $model_class, + query_class: $query_class, + association_builder: $association_builder, + ); return $this; } diff --git a/lib/Console/InstallCommand.php b/lib/Console/InstallCommand.php index 65f32da..684fe3f 100644 --- a/lib/Console/InstallCommand.php +++ b/lib/Console/InstallCommand.php @@ -2,6 +2,7 @@ namespace ICanBoogie\Binding\ActiveRecord\Console; +use ICanBoogie\ActiveRecord\ModelIterator; use ICanBoogie\ActiveRecord\ModelProvider; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; @@ -15,9 +16,9 @@ final class InstallCommand extends Command protected static $defaultDescription = "Install models"; public function __construct( - private readonly ModelProvider $models - ) - { + private readonly ModelProvider $models, + private readonly ModelIterator $iterator, + ) { parent::__construct(); } @@ -62,7 +63,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int return $tried[$id] = false; }; - foreach ($this->models as $id => $_) { + foreach ($this->iterator->model_iterator() as $id => $_) { $recursive_install($id); } diff --git a/lib/Console/ListConnectionsCommand.php b/lib/Console/ListConnectionsCommand.php index a76c9c8..d92b384 100644 --- a/lib/Console/ListConnectionsCommand.php +++ b/lib/Console/ListConnectionsCommand.php @@ -2,8 +2,7 @@ namespace ICanBoogie\Binding\ActiveRecord\Console; -use ICanBoogie\ActiveRecord\ConnectionOptions; -use ICanBoogie\Binding\ActiveRecord\Config; +use ICanBoogie\ActiveRecord\Config; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputInterface; @@ -27,7 +26,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int foreach ($this->config->connections as $id => $attributes) { $rows[] = [ $id, - $attributes[ConnectionOptions::TABLE_NAME_PREFIX] ?? "", + $attributes->table_name_prefix ?? "", ]; } diff --git a/lib/Console/ListModelsCommand.php b/lib/Console/ListModelsCommand.php index a08adf4..1779e7f 100644 --- a/lib/Console/ListModelsCommand.php +++ b/lib/Console/ListModelsCommand.php @@ -2,8 +2,7 @@ namespace ICanBoogie\Binding\ActiveRecord\Console; -use ICanBoogie\ActiveRecord\Model; -use ICanBoogie\Binding\ActiveRecord\Config; +use ICanBoogie\ActiveRecord\Config; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputInterface; @@ -27,7 +26,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int foreach ($this->config->models as $model_id => $attributes) { $rows[] = [ $model_id, - $attributes[Model::CONNECTION], + $attributes->connection, ]; } diff --git a/lib/ContainerExtension.php b/lib/ContainerExtension.php index d424ac1..577afe5 100644 --- a/lib/ContainerExtension.php +++ b/lib/ContainerExtension.php @@ -11,6 +11,7 @@ namespace ICanBoogie\Binding\ActiveRecord; +use ICanBoogie\ActiveRecord\Config; use ICanBoogie\ActiveRecord\Connection; use ICanBoogie\ActiveRecord\ConnectionProvider; use ICanBoogie\ActiveRecord\Model; @@ -69,7 +70,7 @@ private function register_connections(ContainerBuilder $container): void private function register_models(ContainerBuilder $container): void { foreach ($this->config->models as $id => $model) { - $class = $model[Model::CLASSNAME] ?? Model::class; + $class = $model->model_class ?? Model::class; assert(is_string($class)); diff --git a/lib/Factory.php b/lib/Factory.php index 38967ce..7271351 100644 --- a/lib/Factory.php +++ b/lib/Factory.php @@ -11,22 +11,17 @@ namespace ICanBoogie\Binding\ActiveRecord; +use ICanBoogie\ActiveRecord\Config; use ICanBoogie\ActiveRecord\ConnectionCollection; use ICanBoogie\ActiveRecord\ConnectionProvider; use ICanBoogie\ActiveRecord\ModelCollection; use ICanBoogie\ActiveRecord\ModelProvider; -use ICanBoogie\Application; /** * Builds container services. */ final class Factory { - public static function build_config(Application $app): Config - { - return $app->configs->config_for_class(Config::class); - } - public static function build_connections(Config $config): ConnectionProvider { return new ConnectionCollection($config->connections); diff --git a/lib/Hooks.php b/lib/Hooks.php index f7a26d8..1980a7f 100644 --- a/lib/Hooks.php +++ b/lib/Hooks.php @@ -70,6 +70,8 @@ public static function active_record_validate(ActiveRecord $record): array|Valid /** * Returns the records cache associated with the model. + * + * @param Model $model */ public static function model_lazy_get_activerecord_cache(Model $model): RuntimeActiveRecordCache { diff --git a/tests/app/all/config/activerecord.php b/tests/app/all/config/activerecord.php index 65ad4c5..0aede61 100644 --- a/tests/app/all/config/activerecord.php +++ b/tests/app/all/config/activerecord.php @@ -2,8 +2,8 @@ namespace ICanBoogie\Binding\ActiveRecord; -use ICanBoogie\ActiveRecord\Schema; -use ICanBoogie\ActiveRecord\SchemaColumn; +use ICanBoogie\ActiveRecord\Config; +use ICanBoogie\ActiveRecord\SchemaBuilder; use Test\ICanBoogie\Binding\ActiveRecord\Acme\Node; use Test\ICanBoogie\Binding\ActiveRecord\Acme\NodeModel; @@ -11,10 +11,9 @@ ->add_connection(Config::DEFAULT_CONNECTION_ID, 'sqlite::memory:') ->add_model( id: 'nodes', - schema: new Schema([ - 'id' => SchemaColumn::serial(primary: true), - 'title' => SchemaColumn::varchar(), - ]), + schema_builder: fn(SchemaBuilder $schema) => $schema + ->add_serial('id', primary: true) + ->add_varchar('title'), activerecord_class: Node::class, model_class: NodeModel::class, ); diff --git a/tests/app/all/config/services.yml b/tests/app/all/config/services.yml index cafd665..0912d7c 100644 --- a/tests/app/all/config/services.yml +++ b/tests/app/all/config/services.yml @@ -3,7 +3,7 @@ services: public: true test.active_record.config: - alias: ICanBoogie\Binding\ActiveRecord\Config + alias: ICanBoogie\ActiveRecord\Config test.active_record.connections: alias: ICanBoogie\ActiveRecord\ConnectionProvider diff --git a/tests/app/default/config/activerecord.php b/tests/app/default/config/activerecord.php index 5b29b57..db6e5fb 100644 --- a/tests/app/default/config/activerecord.php +++ b/tests/app/default/config/activerecord.php @@ -2,18 +2,16 @@ namespace ICanBoogie\Binding\ActiveRecord; -use ICanBoogie\ActiveRecord\Schema; -use ICanBoogie\ActiveRecord\SchemaColumn; +use ICanBoogie\ActiveRecord\SchemaBuilder; use Test\ICanBoogie\Binding\ActiveRecord\Acme\Article; return fn(ConfigBuilder $config) => $config ->add_connection('cache', 'sqlite::memory:') ->add_model( id: 'articles', - schema: new Schema([ - 'body' => SchemaColumn::text(), - 'date' => SchemaColumn::datetime(), - ]), + schema_builder: fn(SchemaBuilder $schema) => $schema + ->add_text('body') + ->add_datetime('date'), activerecord_class: Article::class, extends: 'nodes' ); diff --git a/tests/app/localhost/config/activerecord.php b/tests/app/localhost/config/activerecord.php index 6118e9e..6778c1e 100644 --- a/tests/app/localhost/config/activerecord.php +++ b/tests/app/localhost/config/activerecord.php @@ -1,5 +1,5 @@ $config; diff --git a/tests/lib/Acme/Article.php b/tests/lib/Acme/Article.php index 96a9f4d..7714b8f 100644 --- a/tests/lib/Acme/Article.php +++ b/tests/lib/Acme/Article.php @@ -2,8 +2,6 @@ namespace Test\ICanBoogie\Binding\ActiveRecord\Acme; -use DateTimeInterface; - class Article extends Node { public string $body; diff --git a/tests/lib/Acme/NodeModel.php b/tests/lib/Acme/NodeModel.php index 56da529..7353abe 100644 --- a/tests/lib/Acme/NodeModel.php +++ b/tests/lib/Acme/NodeModel.php @@ -13,6 +13,9 @@ use ICanBoogie\ActiveRecord\Model; +/** + * @extends Model + */ class NodeModel extends Model { } diff --git a/tests/lib/Acme/SampleRecord.php b/tests/lib/Acme/SampleRecord.php index 5553cc4..bd406f7 100644 --- a/tests/lib/Acme/SampleRecord.php +++ b/tests/lib/Acme/SampleRecord.php @@ -15,8 +15,6 @@ class SampleRecord extends ActiveRecord { - public const MODEL_ID = 'dummy'; - public string $email; /** diff --git a/tests/lib/ConfigBuilderTest.php b/tests/lib/ConfigBuilderTest.php index 9fbeb2c..5184362 100644 --- a/tests/lib/ConfigBuilderTest.php +++ b/tests/lib/ConfigBuilderTest.php @@ -11,11 +11,9 @@ namespace Test\ICanBoogie\Binding\ActiveRecord; -use ICanBoogie\ActiveRecord\ConnectionOptions; -use ICanBoogie\ActiveRecord\Schema; -use ICanBoogie\ActiveRecord\SchemaColumn; -use ICanBoogie\Binding\ActiveRecord\Config; -use ICanBoogie\Binding\ActiveRecord\ConfigBuilder; +use ICanBoogie\ActiveRecord\Config; +use ICanBoogie\ActiveRecord\ConfigBuilder; +use ICanBoogie\ActiveRecord\SchemaBuilder; use PHPUnit\Framework\TestCase; use Test\ICanBoogie\Binding\ActiveRecord\Acme\Article; use Test\ICanBoogie\Binding\ActiveRecord\Acme\Node; @@ -40,17 +38,15 @@ public function test_build(): void $this->assertEquals( new Config([ - 'primary' => [ - 'dsn' => 'mysql:dbname=myblog;host=mysql5-20', - 'username' => "olvlvl", - 'password' => "p455w0rd", - 'options' => [ - ConnectionOptions::ID => 'primary', - ConnectionOptions::TABLE_NAME_PREFIX => 'myblog_', - ConnectionOptions::CHARSET_AND_COLLATE => 'bin/general_ci', - ConnectionOptions::TIMEZONE => '+02:00', - ] - ] + 'primary' => new Config\ConnectionDefinition( + id: 'primary', + dsn: 'mysql:dbname=myblog;host=mysql5-20', + username: "olvlvl", + password: "p455w0rd", + table_name_prefix: 'myblog_', + charset_and_collate: 'bin/general_ci', + time_zone: '+02:00', + ) ], []), $config ); @@ -58,50 +54,32 @@ public function test_build(): void public function test_integration(): void { + $expected = (new ConfigBuilder()) + ->add_connection(Config::DEFAULT_CONNECTION_ID, 'sqlite::memory:') + ->add_connection('cache', 'sqlite::memory:') + ->add_model( + id: 'nodes', + schema_builder: fn(SchemaBuilder $b) => $b + ->add_serial('id', primary: true) + ->add_varchar('title'), + activerecord_class: Node::class, + model_class: NodeModel::class, + ) + ->add_model( + id: 'articles', + schema_builder: fn(SchemaBuilder $b) => $b + ->add_text('body') + ->add_datetime('date'), + activerecord_class: Article::class, + extends: 'nodes', + ) + ->build(); + + $actual = app()->configs->config_for_class(Config::class); + $this->assertEquals( - new Config( - [ - 'primary' => [ - 'dsn' => 'sqlite::memory:', - 'options' => [ - '#id' => 'primary', - '#charset_and_collate' => 'utf8/general_ci', - '#timezone' => '+00:00', - ], - ], - 'cache' => [ - 'dsn' => 'sqlite::memory:', - 'options' => [ - '#id' => 'cache', - '#charset_and_collate' => 'utf8/general_ci', - '#timezone' => '+00:00', - ], - ], - ], - [ - 'nodes' => [ - 'schema' => new Schema([ - 'id' => SchemaColumn::serial(primary: true), - 'title' => SchemaColumn::varchar(), - ]), - 'connection' => 'primary', - 'id' => 'nodes', - 'class' => NodeModel::class, - 'activerecord_class' => Node::class, - ], - 'articles' => [ - 'schema' => new Schema([ - 'body' => SchemaColumn::text(), - 'date' => SchemaColumn::datetime(), - ]), - 'connection' => 'primary', - 'id' => 'articles', - 'extends' => 'nodes', - 'activerecord_class' => Article::class, - ], - ] - ), - app()->configs->config_for_class(Config::class) + $expected, + $actual ); } } diff --git a/tests/lib/ConfigTest.php b/tests/lib/ConfigTest.php deleted file mode 100644 index af53928..0000000 --- a/tests/lib/ConfigTest.php +++ /dev/null @@ -1,45 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Test\ICanBoogie\Binding\ActiveRecord; - -use ICanBoogie\ActiveRecord\ConnectionOptions; -use ICanBoogie\Binding\ActiveRecord\Config; -use PHPUnit\Framework\TestCase; - -final class ConfigTest extends TestCase -{ - public function test_export(): void - { - $config = new Config( - [ - 'primary' => [ - 'dsn' => 'mysql:dbname=myblog;host=mysql5-20', - 'username' => "olvlvl", - 'password' => "p455w0rd", - 'options' => [ - ConnectionOptions::ID => 'primary', - ConnectionOptions::TABLE_NAME_PREFIX => 'myblog_', - ConnectionOptions::CHARSET_AND_COLLATE => 'bin/general_ci', - ConnectionOptions::TIMEZONE => '+02:00', - ] - ] - ], - [ - // @TOOD: Models - ] - ); - - $actual = SetStateHelper::export_import($config); - - $this->assertEquals($config, $actual); - } -} diff --git a/tests/lib/ContainerTest.php b/tests/lib/ContainerTest.php index 7f6d125..cfd1314 100644 --- a/tests/lib/ContainerTest.php +++ b/tests/lib/ContainerTest.php @@ -15,7 +15,7 @@ use ICanBoogie\ActiveRecord\ConnectionProvider; use ICanBoogie\ActiveRecord\Model; use ICanBoogie\ActiveRecord\ModelProvider; -use ICanBoogie\Binding\ActiveRecord\Config; +use ICanBoogie\ActiveRecord\Config; use PHPUnit\Framework\TestCase; use Test\ICanBoogie\Binding\ActiveRecord\Acme\NodeModel; diff --git a/tests/lib/HooksTest.php b/tests/lib/HooksTest.php index e55773a..5b03cc8 100644 --- a/tests/lib/HooksTest.php +++ b/tests/lib/HooksTest.php @@ -12,15 +12,17 @@ namespace Test\ICanBoogie\Binding\ActiveRecord; use ICanBoogie\ActiveRecord\ActiveRecordCache; +use ICanBoogie\ActiveRecord\Config; use ICanBoogie\ActiveRecord\ConnectionProvider; use ICanBoogie\ActiveRecord\Model; +use ICanBoogie\ActiveRecord\ModelDefinition; use ICanBoogie\ActiveRecord\ModelCollection; use ICanBoogie\ActiveRecord\Schema; use ICanBoogie\ActiveRecord\SchemaColumn; -use ICanBoogie\Binding\ActiveRecord\Config; use ICanBoogie\Binding\ActiveRecord\Hooks; use ICanBoogie\Validate\ValidationErrors; use PHPUnit\Framework\TestCase; +use Test\ICanBoogie\Binding\ActiveRecord\Acme\Node; use Test\ICanBoogie\Binding\ActiveRecord\Acme\SampleRecord; use function ICanBoogie\app; @@ -38,14 +40,19 @@ public function test_should_return_activerecord_cache(): void ->service_for_class(ConnectionProvider::class) ->connection_for_id(Config::DEFAULT_CONNECTION_ID); - $model = new Model($models, [ - - Model::CONNECTION => $connection, - Model::NAME => 'model' . uniqid(), - Model::SCHEMA => new Schema([ - 'id' => SchemaColumn::serial() - ]) - ]); + $model = new Model( + $connection, + $models, + new ModelDefinition( + id: 'nodes', + connection: Config::DEFAULT_CONNECTION_ID, + schema: new Schema([ + 'id' => SchemaColumn::serial(primary: true) + ]), + activerecord_class: Node::class, + name: 'nodes' + ) + ); $cache = Hooks::model_lazy_get_activerecord_cache($model); $this->assertInstanceOf(ActiveRecordCache::class, $cache); diff --git a/tests/lib/SetStateHelper.php b/tests/lib/SetStateHelper.php deleted file mode 100644 index 0c0af47..0000000 --- a/tests/lib/SetStateHelper.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Test\ICanBoogie\Binding\ActiveRecord; - -use function file_put_contents; -use function uniqid; -use function var_export; - -final class SetStateHelper -{ - private const SANDBOX = __DIR__ . '/sandbox'; - - /** - * @template T of object - * - * @param T $object - * - * @return T - */ - public static function export_import(object $object): object - { - $code = '