From 813bd2a9400b683ba390d1f57a475f83315cf500 Mon Sep 17 00:00:00 2001 From: lotyp Date: Thu, 9 May 2024 15:05:13 +0300 Subject: [PATCH] test: add json tests for empty array and null --- .../Driver/Common/Typecast/JsonTest.php | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/tests/ORM/Functional/Driver/Common/Typecast/JsonTest.php b/tests/ORM/Functional/Driver/Common/Typecast/JsonTest.php index d8c6e930..0cdb6d18 100644 --- a/tests/ORM/Functional/Driver/Common/Typecast/JsonTest.php +++ b/tests/ORM/Functional/Driver/Common/Typecast/JsonTest.php @@ -153,6 +153,72 @@ public function testStore(): void $this->assertSame(['some' => 'data'], $result->settingsNullable); } + public function testStoresEmptyArraySettings(): void + { + $e = new User(); + $e->email = 'test@email.com'; + $e->settings = []; + $e->settingsNullable = []; + + $this->captureWriteQueries(); + $em = new EntityManager($this->orm); + $em->persist($e); + $em->run(); + $this->assertNumWrites(1); + + $this->captureWriteQueries(); + $em = new EntityManager($this->orm); + $em->persist($e); + $em->run(); + $this->assertNumWrites(0); + + $this->assertEquals(3, $e->id); + + $this->assertTrue($this->orm->getHeap()->has($e)); + $this->assertSame(Node::MANAGED, $this->orm->getHeap()->get($e)->getStatus()); + + $this->orm = $this->orm->with(heap: new Heap()); + + $selector = new Select($this->orm, User::class); + $result = $selector->where('id', 3)->fetchOne(); + $this->assertSame('test@email.com', $result->email); + $this->assertSame([], $result->settings); + $this->assertSame([], $result->settingsNullable); + } + + public function testStoresNullSettings(): void + { + $e = new User(); + $e->email = 'test@email.com'; + $e->settings = []; + $e->settingsNullable = null; + + $this->captureWriteQueries(); + $em = new EntityManager($this->orm); + $em->persist($e); + $em->run(); + $this->assertNumWrites(1); + + $this->captureWriteQueries(); + $em = new EntityManager($this->orm); + $em->persist($e); + $em->run(); + $this->assertNumWrites(0); + + $this->assertEquals(3, $e->id); + + $this->assertTrue($this->orm->getHeap()->has($e)); + $this->assertSame(Node::MANAGED, $this->orm->getHeap()->get($e)->getStatus()); + + $this->orm = $this->orm->with(heap: new Heap()); + + $selector = new Select($this->orm, User::class); + $result = $selector->where('id', 3)->fetchOne(); + $this->assertSame('test@email.com', $result->email); + $this->assertSame([], $result->settings); + $this->assertSame(null, $result->settingsNullable); + } + public function testStoreJsonSerializable(): void { $e = new User();