Passed
Push — main ( 7d9f09...bbfba8 )
by Peter
02:36
created

LockTest::constructValidationProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 6
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace QB\PostgreSQL\Clause;
6
7
use PHPUnit\Framework\TestCase;
8
9
class LockTest extends TestCase
10
{
11
    /**
12
     * @return array[]
13
     */
14
    public function toStringProvider(): array
15
    {
16
        return [
17
            [Lock::FOR_UPDATE, [], null, 'FOR UPDATE'],
18
            [Lock::FOR_SHARE, [], null, 'FOR SHARE'],
19
            [Lock::FOR_NO_KEY_UPDATE, [], null, 'FOR NO KEY UPDATE'],
20
            [Lock::FOR_KEY_SHARE, [], null, 'FOR KEY SHARE'],
21
            [Lock::FOR_UPDATE, [], Lock::MODIFIER_NOWAIT, "FOR UPDATE NOWAIT"],
22
            [Lock::FOR_SHARE, [], Lock::MODIFIER_SKIP_LOCKED, "FOR SHARE SKIP LOCKED"],
23
            [Lock::FOR_UPDATE, ['foo', 'bar'], null, "FOR UPDATE OF foo, bar"],
24
            [Lock::FOR_SHARE, ['foo', 'bar'], Lock::MODIFIER_NOWAIT, "FOR SHARE OF foo, bar NOWAIT"],
25
        ];
26
    }
27
28
    /**
29
     * @dataProvider toStringProvider
30
     *
31
     * @param string|null $for
32
     * @param array       $tables
33
     * @param string|null $modifier
34
     * @param string      $expectedSql
35
     */
36
    public function testToString(?string $for, array $tables, ?string $modifier, string $expectedSql)
37
    {
38
        $lock = new Lock($for, $tables, $modifier);
39
        $sql  = (string)$lock;
40
41
        $this->assertSame($expectedSql, $sql);
42
    }
43
44
    /**
45
     * @return array[]
46
     */
47
    public function constructValidationProvider(): array
48
    {
49
        return [
50
            'lock in share more invalid' => [Lock::LOCK_IN_SHARE_MODE, [], null],
51
            'invalid for'                => ['foo', [], null],
52
            'invalid modifier'           => [Lock::FOR_SHARE, [], 'foo'],
53
        ];
54
    }
55
56
    /**
57
     * @dataProvider constructValidationProvider
58
     *
59
     * @suppress     PhanNoopNew
60
     *
61
     * @param string|null $for
62
     * @param array       $tables
63
     * @param string|null $modifier
64
     */
65
    public function testConstructValidation(?string $for, array $tables, ?string $modifier)
66
    {
67
        $this->expectException(\InvalidArgumentException::class);
68
69
        new Lock($for, $tables, $modifier);
70
    }
71
}
72