packages/ztd-query-core/tests/Unit/Shadow/ParentKeyLookupTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Shadow;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Shadow\ParentKeyLookup;
11use ZtdQuery\Shadow\Row\RowMatch;
12use ZtdQuery\Shadow\ShadowStore;
13
14#[CoversClass(ParentKeyLookup::class)]
15#[UsesClass(RowMatch::class)]
16#[UsesClass(ShadowStore::class)]
17#[UsesClass(\ZtdQuery\Schema\RowSet::class)]
18final class ParentKeyLookupTest extends TestCase
19{
20 public function testExistsWhenSomeRowStillCarriesTheValues(): void
21 {
22 $store = new ShadowStore();
23 $store->set('order', [['id' => 1], ['id' => 2]]);
24
25 self::assertTrue((new ParentKeyLookup())->exists($store, 'order', ['id'], [2]));
26 }
27
28 public function testDoesNotExistWhenNoRowCarriesTheValues(): void
29 {
30 $store = new ShadowStore();
31 $store->set('order', [['id' => 1]]);
32
33 self::assertFalse((new ParentKeyLookup())->exists($store, 'order', ['id'], [2]));
34 }
35
36 public function testDoesNotExistWhenTheTableHasNoRowsAtAll(): void
37 {
38 self::assertFalse((new ParentKeyLookup())->exists(new ShadowStore(), 'order', ['id'], [1]));
39 }
40
41 public function testExistsOnlyWhenOneRowCarriesEveryColumnOfACompositeKey(): void
42 {
43 $store = new ShadowStore();
44 $store->set('order', [['shop_id' => 1, 'no' => 9], ['shop_id' => 2, 'no' => 8]]);
45
46 self::assertTrue((new ParentKeyLookup())->exists($store, 'order', ['shop_id', 'no'], [2, 8]));
47 self::assertFalse((new ParentKeyLookup())->exists($store, 'order', ['shop_id', 'no'], [1, 8]));
48 }
49}
50