packages/sql-fixture/tests/Unit/Fixture/TableOverridesTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Fixture;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\Test;
9use PHPUnit\Framework\TestCase;
10use SqlFixture\Fixture\TableOverrides;
11
12#[CoversClass(TableOverrides::class)]
13final class TableOverridesTest extends TestCase
14{
15    #[Test]
16    public function testOfKeepsTheValuesGiven(): void
17    {
18        self::assertSame(
19            ['status' => 'paid', 'total' => 10],
20            TableOverrides::of(['status' => 'paid', 'total' => 10])->toArray()
21        );
22    }
23
24    #[Test]
25    public function testToArrayDropsArgumentsLeftUnset(): void
26    {
27        self::assertSame(
28            ['status' => 'paid'],
29            TableOverrides::of(['status' => 'paid', 'total' => null])->toArray()
30        );
31    }
32
33    #[Test]
34    public function testKeepsFalseAndZeroWhichAreRealValues(): void
35    {
36        self::assertSame(
37            ['flag' => false, 'total' => 0, 'name' => ''],
38            TableOverrides::of(['flag' => false, 'total' => 0, 'name' => ''])->toArray()
39        );
40    }
41
42    #[Test]
43    public function testWithNullSetsAColumnDeliberately(): void
44    {
45        self::assertSame(
46            ['status' => 'paid', 'note' => null],
47            TableOverrides::of(['status' => 'paid'])->withNull('note')->toArray()
48        );
49    }
50
51    #[Test]
52    public function testWithNullTakesSeveralColumns(): void
53    {
54        self::assertSame(
55            ['a' => null, 'b' => null],
56            TableOverrides::of()->withNull('a', 'b')->toArray()
57        );
58    }
59
60    #[Test]
61    public function testWithNullReturnsANewInstance(): void
62    {
63        $base = TableOverrides::of(['status' => 'paid']);
64
65        self::assertNotSame($base, $base->withNull('note'));
66        self::assertSame(['status' => 'paid'], $base->toArray());
67    }
68
69    #[Test]
70    public function testAnEmptySetOfOverridesIsEmpty(): void
71    {
72        self::assertSame([], TableOverrides::of()->toArray());
73    }
74
75    #[Test]
76    public function testWithNullKeepsEveryColumnAlreadyMarked(): void
77    {
78        self::assertSame(
79            ['a' => null, 'b' => null],
80            TableOverrides::of()->withNull('a')->withNull('b')->toArray()
81        );
82    }
83
84    #[Test]
85    public function testWithNullReindexesColumnsSpreadFromAKeyedArray(): void
86    {
87        self::assertSame(
88            ['a' => null, 'b' => null],
89            TableOverrides::of()->withNull(...['first' => 'a', 'second' => 'b'])->toArray()
90        );
91    }
92}
93