From 6dafe33c9e62720f222f87b79c2c9bb02991f618 Mon Sep 17 00:00:00 2001 From: eparusov Date: Tue, 10 Dec 2024 10:10:50 +0300 Subject: [PATCH 1/6] #124: Implemented helper to generate test state --- src/Tests/ModelTestState.php | 3 ++- src/Tests/TableTestState.php | 15 +++++++++++---- tests/TestCase.php | 10 ++++++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/Tests/ModelTestState.php b/src/Tests/ModelTestState.php index 5418452..93c551f 100644 --- a/src/Tests/ModelTestState.php +++ b/src/Tests/ModelTestState.php @@ -7,13 +7,14 @@ class ModelTestState extends TableTestState { - public function __construct(string $modelClassName) + public function __construct(string $modelClassName, bool $globalExportMode = false) { $model = new $modelClassName(); parent::__construct( tableName: $model->getTable(), jsonFields: $this->getModelJSONFields($model), + globalExportMode: $globalExportMode, connectionName: $model->getConnectionName($model), ); } diff --git a/src/Tests/TableTestState.php b/src/Tests/TableTestState.php index c70f7a4..0203ddf 100644 --- a/src/Tests/TableTestState.php +++ b/src/Tests/TableTestState.php @@ -14,15 +14,21 @@ class TableTestState extends Assert use FixturesTrait; protected string $tableName; - protected Collection $state; - protected ?string $connectionName; protected array $jsonFields; + protected ?string $connectionName; + protected bool $globalExportMode; + protected Collection $state; - public function __construct(string $tableName, array $jsonFields = [], ?string $connectionName = null) - { + public function __construct( + string $tableName, + array $jsonFields, + bool $globalExportMode = false, + ?string $connectionName = null, + ) { $this->tableName = $tableName; $this->jsonFields = $jsonFields; $this->connectionName = $connectionName ?? DB::getDefaultConnection(); + $this->globalExportMode = $globalExportMode; $this->state = $this->getDataSet($tableName); } @@ -40,6 +46,7 @@ public function assertNotChanged(): void public function assertChangesEqualsFixture(string $fixture, bool $exportMode = false): void { $changes = $this->getChanges(); + $exportMode = $this->globalExportMode || $exportMode; $this->assertEqualsFixture($fixture, $changes, $exportMode); } diff --git a/tests/TestCase.php b/tests/TestCase.php index 35cf919..1b07ee5 100755 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -112,4 +112,14 @@ protected function rollbackTransaction(): void $connection->disconnect(); } } + + protected function prepareModelTestState(string $modelClassName): ModelTestState + { + return new ModelTestState($modelClassName, $this->globalExportMode); + } + + protected function prepareTableTestState(string $tableName, array $jsonFields = [], ?string $connectionName = null): TableTestState + { + return new TableTestState($tableName, $jsonFields, $this->globalExportMode, $connectionName); + } } From f649354999834b351fdda475bcbf04561ffcfb7f Mon Sep 17 00:00:00 2001 From: eparusov Date: Tue, 10 Dec 2024 10:16:35 +0300 Subject: [PATCH 2/6] refactor: __construct --- src/Tests/TableTestState.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tests/TableTestState.php b/src/Tests/TableTestState.php index 0203ddf..8f073da 100644 --- a/src/Tests/TableTestState.php +++ b/src/Tests/TableTestState.php @@ -21,7 +21,7 @@ class TableTestState extends Assert public function __construct( string $tableName, - array $jsonFields, + array $jsonFields = [], bool $globalExportMode = false, ?string $connectionName = null, ) { From 644ac5eaf892afcf167bf3089bbb727b982fde77 Mon Sep 17 00:00:00 2001 From: eparusov Date: Tue, 17 Dec 2024 11:28:56 +0300 Subject: [PATCH 3/6] refactor: testState --- src/Tests/TableTestState.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Tests/TableTestState.php b/src/Tests/TableTestState.php index 8f073da..4b37525 100644 --- a/src/Tests/TableTestState.php +++ b/src/Tests/TableTestState.php @@ -46,7 +46,6 @@ public function assertNotChanged(): void public function assertChangesEqualsFixture(string $fixture, bool $exportMode = false): void { $changes = $this->getChanges(); - $exportMode = $this->globalExportMode || $exportMode; $this->assertEqualsFixture($fixture, $changes, $exportMode); } From 85b2278dc2489fbf2072e6deaaab7880f21061e0 Mon Sep 17 00:00:00 2001 From: eparusov Date: Tue, 17 Dec 2024 13:27:03 +0300 Subject: [PATCH 4/6] refactor: test --- tests/ModelTestStateTest.php | 22 ++++++++++++++++++++++ tests/TableTestStateTest.php | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/tests/ModelTestStateTest.php b/tests/ModelTestStateTest.php index 3fc9b81..c6e0992 100644 --- a/tests/ModelTestStateTest.php +++ b/tests/ModelTestStateTest.php @@ -37,6 +37,28 @@ public function testInitialization() $this->assertEquals($originRecords, $state); } + public function testInitializationViaPrepareModelTestState() + { + $datasetMock = collect($this->getJsonFixture('initialization/dataset.json')); + $this->mockGettingDataset($datasetMock); + + $mock = $this->getMockBuilder(TestCase::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $reflection = new ReflectionClass($mock); + + $this->assertFalse($reflection->getProperty('globalExportMode')->getValue($mock)); + + $setGlobalExportMode = $reflection->getMethod('setGlobalExportMode'); + $setGlobalExportMode->invoke($mock); + + $prepareModelTestState = $reflection->getMethod('prepareModelTestState'); + $prepareModelTestState->invoke($mock, TestModel::class); + + $this->assertTrue($reflection->getProperty('globalExportMode')->getValue($mock)); + } + public function testAssertChangesEqualsFixture() { $initialDatasetMock = collect($this->getJsonFixture('changes_equals_fixture/initial_dataset.json')); diff --git a/tests/TableTestStateTest.php b/tests/TableTestStateTest.php index 1b1680a..8a879f2 100644 --- a/tests/TableTestStateTest.php +++ b/tests/TableTestStateTest.php @@ -26,6 +26,28 @@ public function testInitialization() $this->assertEquals($originRecords, $state); } + public function testInitializationViaPrepareTableTestState() + { + $datasetMock = collect($this->getJsonFixture('initialization/dataset.json')); + $this->mockGettingDataset($datasetMock); + + $mock = $this->getMockBuilder(TestCase::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $reflection = new ReflectionClass($mock); + + $this->assertFalse($reflection->getProperty('globalExportMode')->getValue($mock)); + + $setGlobalExportMode = $reflection->getMethod('setGlobalExportMode'); + $setGlobalExportMode->invoke($mock); + + $prepareTableTestState = $reflection->getMethod('prepareTableTestState'); + $prepareTableTestState->invoke($mock, 'test_models'); + + $this->assertTrue($reflection->getProperty('globalExportMode')->getValue($mock)); + } + public function testAssertChangesEqualsFixture() { $initialDatasetMock = collect($this->getJsonFixture('changes_equals_fixture/initial_dataset.json')); From f533533bae96a88dc4c31bf78b8779bc23effde6 Mon Sep 17 00:00:00 2001 From: eparusov Date: Tue, 24 Dec 2024 17:53:27 +0300 Subject: [PATCH 5/6] refactor: logic --- src/Tests/TableTestState.php | 3 ++- tests/ModelTestStateTest.php | 14 +++++++------- tests/TableTestStateTest.php | 14 +++++++------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/Tests/TableTestState.php b/src/Tests/TableTestState.php index 4b37525..207eea2 100644 --- a/src/Tests/TableTestState.php +++ b/src/Tests/TableTestState.php @@ -13,10 +13,11 @@ class TableTestState extends Assert { use FixturesTrait; + public bool $globalExportMode; + protected string $tableName; protected array $jsonFields; protected ?string $connectionName; - protected bool $globalExportMode; protected Collection $state; public function __construct( diff --git a/tests/ModelTestStateTest.php b/tests/ModelTestStateTest.php index c6e0992..306156c 100644 --- a/tests/ModelTestStateTest.php +++ b/tests/ModelTestStateTest.php @@ -42,21 +42,21 @@ public function testInitializationViaPrepareModelTestState() $datasetMock = collect($this->getJsonFixture('initialization/dataset.json')); $this->mockGettingDataset($datasetMock); - $mock = $this->getMockBuilder(TestCase::class) + $mock = $this + ->getMockBuilder(TestCase::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $reflection = new ReflectionClass($mock); - $this->assertFalse($reflection->getProperty('globalExportMode')->getValue($mock)); + $reflection->getMethod('setGlobalExportMode')->invoke($mock); - $setGlobalExportMode = $reflection->getMethod('setGlobalExportMode'); - $setGlobalExportMode->invoke($mock); + $prepareModelTestState = $reflection->getMethod('prepareModelTestState')->invoke($mock, TestModel::class); - $prepareModelTestState = $reflection->getMethod('prepareModelTestState'); - $prepareModelTestState->invoke($mock, TestModel::class); + $testCaseGlobalExportMode = $reflection->getProperty('globalExportMode')->getValue($mock); - $this->assertTrue($reflection->getProperty('globalExportMode')->getValue($mock)); + $this->assertTrue($testCaseGlobalExportMode); + $this->assertEquals($prepareModelTestState->globalExportMode, $testCaseGlobalExportMode); } public function testAssertChangesEqualsFixture() diff --git a/tests/TableTestStateTest.php b/tests/TableTestStateTest.php index 8a879f2..c86c170 100644 --- a/tests/TableTestStateTest.php +++ b/tests/TableTestStateTest.php @@ -31,21 +31,21 @@ public function testInitializationViaPrepareTableTestState() $datasetMock = collect($this->getJsonFixture('initialization/dataset.json')); $this->mockGettingDataset($datasetMock); - $mock = $this->getMockBuilder(TestCase::class) + $mock = $this + ->getMockBuilder(TestCase::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $reflection = new ReflectionClass($mock); - $this->assertFalse($reflection->getProperty('globalExportMode')->getValue($mock)); + $reflection->getMethod('setGlobalExportMode')->invoke($mock); - $setGlobalExportMode = $reflection->getMethod('setGlobalExportMode'); - $setGlobalExportMode->invoke($mock); + $prepareTableTestState = $reflection->getMethod('prepareTableTestState')->invoke($mock, 'test_models'); - $prepareTableTestState = $reflection->getMethod('prepareTableTestState'); - $prepareTableTestState->invoke($mock, 'test_models'); + $testCaseGlobalExportMode = $reflection->getProperty('globalExportMode')->getValue($mock); - $this->assertTrue($reflection->getProperty('globalExportMode')->getValue($mock)); + $this->assertTrue($testCaseGlobalExportMode); + $this->assertEquals($prepareTableTestState->globalExportMode, $testCaseGlobalExportMode); } public function testAssertChangesEqualsFixture() From d1abf056f5a5feb5c12e93a86dfe66c461a9216c Mon Sep 17 00:00:00 2001 From: eparusov Date: Thu, 26 Dec 2024 08:42:41 +0300 Subject: [PATCH 6/6] refactor: TestState --- tests/ModelTestStateTest.php | 22 ++++++++++--------- tests/TableTestStateTest.php | 22 ++++++++++--------- .../Traits/TableTestStateMockTrait.php | 19 ++++++++++++++++ 3 files changed, 43 insertions(+), 20 deletions(-) diff --git a/tests/ModelTestStateTest.php b/tests/ModelTestStateTest.php index 306156c..c7857af 100644 --- a/tests/ModelTestStateTest.php +++ b/tests/ModelTestStateTest.php @@ -37,25 +37,27 @@ public function testInitialization() $this->assertEquals($originRecords, $state); } - public function testInitializationViaPrepareModelTestState() + public function testInitializationViaPrepareModelTestStateWithGlobalExportMode() { $datasetMock = collect($this->getJsonFixture('initialization/dataset.json')); $this->mockGettingDataset($datasetMock); - $mock = $this - ->getMockBuilder(TestCase::class) - ->disableOriginalConstructor() - ->getMockForAbstractClass(); + $testCaseGlobalExportMode = true; - $reflection = new ReflectionClass($mock); + $prepareModelTestState = $this->getTestState('prepareModelTestState', TestModel::class, $testCaseGlobalExportMode); - $reflection->getMethod('setGlobalExportMode')->invoke($mock); + $this->assertEquals($prepareModelTestState->globalExportMode, $testCaseGlobalExportMode); + } + + public function testInitializationViaPrepareModelTestStateWithoutGlobalExportMode() + { + $datasetMock = collect($this->getJsonFixture('initialization/dataset.json')); + $this->mockGettingDataset($datasetMock); - $prepareModelTestState = $reflection->getMethod('prepareModelTestState')->invoke($mock, TestModel::class); + $testCaseGlobalExportMode = false; - $testCaseGlobalExportMode = $reflection->getProperty('globalExportMode')->getValue($mock); + $prepareModelTestState = $this->getTestState('prepareModelTestState', TestModel::class, $testCaseGlobalExportMode); - $this->assertTrue($testCaseGlobalExportMode); $this->assertEquals($prepareModelTestState->globalExportMode, $testCaseGlobalExportMode); } diff --git a/tests/TableTestStateTest.php b/tests/TableTestStateTest.php index c86c170..bd68e8e 100644 --- a/tests/TableTestStateTest.php +++ b/tests/TableTestStateTest.php @@ -26,25 +26,27 @@ public function testInitialization() $this->assertEquals($originRecords, $state); } - public function testInitializationViaPrepareTableTestState() + public function testInitializationViaPrepareTableTestStateWithGlobalExportMode() { $datasetMock = collect($this->getJsonFixture('initialization/dataset.json')); $this->mockGettingDataset($datasetMock); - $mock = $this - ->getMockBuilder(TestCase::class) - ->disableOriginalConstructor() - ->getMockForAbstractClass(); + $testCaseGlobalExportMode = true; - $reflection = new ReflectionClass($mock); + $prepareTableTestState = $this->getTestState('prepareTableTestState', 'test_models', $testCaseGlobalExportMode); - $reflection->getMethod('setGlobalExportMode')->invoke($mock); + $this->assertEquals($prepareTableTestState->globalExportMode, $testCaseGlobalExportMode); + } + + public function testInitializationViaPrepareTableTestStateWithoutGlobalExportMode() + { + $datasetMock = collect($this->getJsonFixture('initialization/dataset.json')); + $this->mockGettingDataset($datasetMock); - $prepareTableTestState = $reflection->getMethod('prepareTableTestState')->invoke($mock, 'test_models'); + $testCaseGlobalExportMode = false; - $testCaseGlobalExportMode = $reflection->getProperty('globalExportMode')->getValue($mock); + $prepareTableTestState = $this->getTestState('prepareTableTestState', 'test_models', $testCaseGlobalExportMode); - $this->assertTrue($testCaseGlobalExportMode); $this->assertEquals($prepareTableTestState->globalExportMode, $testCaseGlobalExportMode); } diff --git a/tests/support/Traits/TableTestStateMockTrait.php b/tests/support/Traits/TableTestStateMockTrait.php index 5500e99..239c06d 100644 --- a/tests/support/Traits/TableTestStateMockTrait.php +++ b/tests/support/Traits/TableTestStateMockTrait.php @@ -5,6 +5,9 @@ use Illuminate\Database\Query\Builder; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; +use ReflectionClass; +use RonasIT\Support\Tests\TableTestState; +use RonasIT\Support\Tests\TestCase; trait TableTestStateMockTrait { @@ -46,4 +49,20 @@ protected function mockGettingDatasetForChanges(Collection $responseMock, Collec ->method('get') ->willReturnOnConsecutiveCalls($initialState, $responseMock); } + + protected function getTestState(string $methodName, string $entity, bool $testCaseGlobalExportMode): TableTestState + { + $testCaseMock = $this + ->getMockBuilder(TestCase::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $testCase = new ReflectionClass($testCaseMock); + + if ($testCaseGlobalExportMode) { + $testCase->getMethod('setGlobalExportMode')->invoke($testCaseMock); + } + + return $testCase->getMethod($methodName)->invoke($testCaseMock, $entity); + } }