From 5bcc2896057964d3c51892b1111d7310c3c6b05c Mon Sep 17 00:00:00 2001 From: Konstantin Lapkovsky Date: Mon, 4 Dec 2023 15:46:24 +0400 Subject: [PATCH] chore: revert logic of data assertion. --- src/Tests/ModelTestState.php | 50 ++++++++++--------- tests/AuthTestTraitTest.php | 9 ---- tests/ModelTestStateTest.php | 24 +++++---- .../test_models}/assertion_fixture.json | 0 4 files changed, 40 insertions(+), 43 deletions(-) rename tests/fixtures/{ModelTestStateTest/changes/test_models/changes_equals_fixture => ModelTestState/changes/test_models}/assertion_fixture.json (100%) diff --git a/src/Tests/ModelTestState.php b/src/Tests/ModelTestState.php index 438e80f9..c1cc69f2 100644 --- a/src/Tests/ModelTestState.php +++ b/src/Tests/ModelTestState.php @@ -8,9 +8,12 @@ use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; use PHPUnit\Framework\Assert; +use RonasIT\Support\Traits\FixturesTrait; class ModelTestState extends Assert { + use FixturesTrait; + protected Collection $state; protected Model $model; protected array $jsonFields; @@ -22,38 +25,33 @@ public function __construct(string $modelClassName) $this->jsonFields = $this->getModelJSONFields(); } - public function getState(): Collection + public function assertNotChanged(): void { - return $this->state; - } - - public function getFixturePath(string $fixture): string - { - $table = $this->model->getTable(); + $changes = $this->getChanges(); - return "changes/{$table}/{$fixture}"; - } - - public function getExpectedEmptyState(): array - { - return [ + $this->assertEquals([ 'updated' => [], 'created' => [], 'deleted' => [] - ]; + ], $changes); } - public function getChanges(): array + public function assertChangesEqualsFixture(string $fixture, bool $exportMode = false): void + { + $changes = $this->getChanges(); + + $this->assertEqualsFixture($fixture, $changes, $exportMode); + } + + protected function getChanges(): array { $updatedData = $this->getDataSet($this->model->getTable()); $updatedRecords = []; $deletedRecords = []; - $this->getState()->each(function ($originItem) use (&$updatedData, &$updatedRecords, &$deletedRecords) { - $updatedItemIndex = $updatedData->search(function ($updatedItem) use ($originItem) { - return $updatedItem['id'] === $originItem['id']; - }); + $this->state->each(function ($originItem) use (&$updatedData, &$updatedRecords, &$deletedRecords) { + $updatedItemIndex = $updatedData->search(fn ($updatedItem) => $updatedItem['id'] === $originItem['id']); if ($updatedItemIndex === false) { $deletedRecords[] = $originItem; @@ -106,11 +104,17 @@ protected function getModelJSONFields(): array protected function isJsonCast(string $cast): bool { - if ($cast === 'array') { - return true; - } + return ($cast === 'array') || (class_exists($cast) && is_subclass_of($cast, CastsAttributes::class)); + } + + public function getFixturePath(string $fixtureName): string + { + $class = get_class($this); + $explodedClass = explode('\\', $class); + $className = Arr::last($explodedClass); + $table = $this->model->getTable(); - return class_exists($cast) && is_subclass_of($cast, CastsAttributes::class); + return base_path("tests/fixtures/{$className}/changes/{$table}/{$fixtureName}"); } protected function getDataSet(string $table, string $orderField = 'id'): Collection diff --git a/tests/AuthTestTraitTest.php b/tests/AuthTestTraitTest.php index b7e2de0d..9084abe4 100644 --- a/tests/AuthTestTraitTest.php +++ b/tests/AuthTestTraitTest.php @@ -11,15 +11,6 @@ class AuthTestTraitTest extends HelpersTestCase { use FixturesTrait, MockTrait, AuthTestTrait; - public function setUp(): void - { - parent::setUp(); - - self::$tables = []; - - putenv('FAIL_EXPORT_JSON=false'); - } - public function testActingViaSession() { $userId = 1; diff --git a/tests/ModelTestStateTest.php b/tests/ModelTestStateTest.php index 235ee95a..1bbdf670 100644 --- a/tests/ModelTestStateTest.php +++ b/tests/ModelTestStateTest.php @@ -29,16 +29,14 @@ public function testInitialization() $this->mockGettingDataset($datasetMock); $modelTestState = new ModelTestState(TestModel::class); - $reflectionClass = new ReflectionClass($modelTestState); - $jsonFieldsProperty = $reflectionClass->getProperty('jsonFields'); - $jsonFieldsProperty->setAccessible(true); - $jsonFields = $jsonFieldsProperty->getValue($modelTestState); + $jsonFields = $this->getProtectedProperty($reflectionClass, 'jsonFields', $modelTestState); + $state = $this->getProtectedProperty($reflectionClass, 'state', $modelTestState); $this->assertNotEmpty($jsonFields); $this->assertEquals(['json_field', 'castable_field'], $jsonFields); - $this->assertEquals($originRecords, $modelTestState->getState()); + $this->assertEquals($originRecords, $state); } public function testAssertChangesEqualsFixture() @@ -48,11 +46,7 @@ public function testAssertChangesEqualsFixture() $this->mockGettingDatasetForChanges($changedDatasetMock, $initialDatasetMock); $modelTestState = new ModelTestState(TestModel::class); - - $this->assertEqualsFixture( - $modelTestState->getFixturePath('changes_equals_fixture/assertion_fixture.json'), - $modelTestState->getChanges() - ); + $modelTestState->assertChangesEqualsFixture('assertion_fixture.json'); } public function testAssertNoChanges() @@ -61,6 +55,14 @@ public function testAssertNoChanges() $this->mockGettingDataset($datasetMock); $modelTestState = new ModelTestState(TestModel::class); - $this->assertEquals($modelTestState->getExpectedEmptyState(), $modelTestState->getChanges()); + $modelTestState->assertNotChanged(); + } + + protected function getProtectedProperty(ReflectionClass $reflectionClass, string $methodName, $objectInstance) + { + $property = $reflectionClass->getProperty($methodName); + $property->setAccessible(true); + + return $property->getValue($objectInstance); } } diff --git a/tests/fixtures/ModelTestStateTest/changes/test_models/changes_equals_fixture/assertion_fixture.json b/tests/fixtures/ModelTestState/changes/test_models/assertion_fixture.json similarity index 100% rename from tests/fixtures/ModelTestStateTest/changes/test_models/changes_equals_fixture/assertion_fixture.json rename to tests/fixtures/ModelTestState/changes/test_models/assertion_fixture.json