packages/ztd-query-core/tests/Unit/Platform/SessionFactoryTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Platform;
6
7use PHPUnit\Framework\Attributes\CoversNothing;
8use PHPUnit\Framework\TestCase;
9use Tests\Fake\FakeConnection;
10use Tests\Fake\FakeSchemaReflector;
11use Tests\Fake\FakeSessionFactory;
12use ZtdQuery\Config\ZtdConfig;
13
14#[CoversNothing]
15final class SessionFactoryTest extends TestCase
16{
17    public function testCreateAnswersASessionThatIsAlreadyOn(): void
18    {
19        $session = (new FakeSessionFactory())->create(new FakeConnection([]), ZtdConfig::default());
20
21        self::assertTrue($session->isEnabled());
22    }
23
24    public function testCreateReadsEveryTableTheDatabaseAlreadyHas(): void
25    {
26        $factory = new FakeSessionFactory(new FakeSchemaReflector([
27            'users' => 'CREATE TABLE users (id INT NOT NULL PRIMARY KEY)',
28        ]));
29
30        $session = $factory->create(new FakeConnection([]), ZtdConfig::default());
31
32        self::assertNotNull($session->tableDefinition('users'));
33    }
34
35    public function testCreateAnswersASessionThatHasSimulatedNothingYet(): void
36    {
37        $factory = new FakeSessionFactory(new FakeSchemaReflector([
38            'users' => 'CREATE TABLE users (id INT NOT NULL PRIMARY KEY)',
39        ]));
40
41        $session = $factory->create(new FakeConnection([]), ZtdConfig::default());
42
43        self::assertFalse($session->lastInsertId());
44    }
45}
46