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