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