SQLSrvUserFactoryTest   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 149
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 10
eloc 76
c 3
b 0
f 0
dl 0
loc 149
rs 10

10 Methods

Rating   Name   Duplication   Size   Complexity  
A testItSrvGrantOptionsMultiple() 0 21 1
A testItSrvGrantOptionOnAll() 0 14 1
A testItSrvGrantOptionOnTable() 0 16 1
A testItSrvCreate() 0 14 1
A testItSrvCreateWithNameInvalidThrownException() 0 6 1
A testItSrvDrop() 0 12 1
A testItSrvGrantOptionOnDatabase() 0 15 1
A getPermissionValid() 0 11 1
A getNameInvalid() 0 4 1
A getMappingPermission() 0 3 1
1
<?php declare(strict_types=1);
2
/*
3
 * This file is part of FlexPHP.
4
 *
5
 * (c) Freddie Gar <[email protected]>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
namespace FlexPHP\Database\Tests\Unit\Factories\User;
11
12
use FlexPHP\Database\Exception\UserDatabaseException;
13
use FlexPHP\Database\Factories\User\SQLSrvUserFactory;
14
use FlexPHP\Database\Tests\TestCase;
15
use FlexPHP\Database\User;
16
17
class SQLSrvUserFactoryTest extends TestCase
18
{
19
    /**
20
     * @dataProvider getNameInvalid
21
     */
22
    public function testItSrvCreateWithNameInvalidThrownException(string $name): void
23
    {
24
        $this->expectException(UserDatabaseException::class);
25
        $user = new User($name, 'password');
26
        $user->setPlatform('SQLSrv');
27
        $user->toSqlCreate();
28
    }
29
30
    public function testItSrvCreate(): void
31
    {
32
        $name = 'jon';
33
        $password = 'p4sw00rd';
34
35
        $user = new User($name, $password);
36
        $user->setPlatform('SQLSrv');
37
        $this->assertEquals(<<<T
38
CREATE LOGIN $name WITH PASSWORD = '$password';
39
GO
40
CREATE USER $name FOR LOGIN $name;
41
GO
42
T
43
, $user->toSqlCreate());
44
    }
45
46
    public function testItSrvDrop(): void
47
    {
48
        $name = 'jon';
49
        $password = 'p4sw00rd';
50
51
        $user = new User($name, $password);
52
        $user->setPlatform('SQLSrv');
53
        $this->assertEquals(<<<T
54
DROP USER $name;
55
GO
56
T
57
, $user->toSqlDrop());
58
    }
59
60
    /**
61
     * @dataProvider getPermissionValid
62
     */
63
    public function testItSrvGrantOptionOnAll(string $permission): void
64
    {
65
        $name = 'jon';
66
        $password = 'p4sw00rd';
67
        $mappingPermission = $this->getMappingPermission($permission);
68
69
        $user = new User($name, $password);
70
        $user->setPlatform('SQLSrv');
71
        $user->setGrant($permission);
72
        $this->assertEquals(<<<T
73
GRANT $mappingPermission TO $name;
74
GO
75
T
76
, $user->toSqlPrivileges());
77
    }
78
79
    /**
80
     * @dataProvider getPermissionValid
81
     */
82
    public function testItSrvGrantOptionOnDatabase(string $permission): void
83
    {
84
        $name = 'jon';
85
        $password = 'p4sw00rd';
86
        $database = 'db';
87
        $mappingPermission = $this->getMappingPermission($permission);
88
89
        $user = new User($name, $password);
90
        $user->setPlatform('SQLSrv');
91
        $user->setGrant($permission, $database);
92
        $this->assertEquals(<<<T
93
GRANT $mappingPermission ON $database TO $name;
94
GO
95
T
96
, $user->toSqlPrivileges());
97
    }
98
99
    /**
100
     * @dataProvider getPermissionValid
101
     */
102
    public function testItSrvGrantOptionOnTable(string $permission): void
103
    {
104
        $name = 'jon';
105
        $password = 'p4sw00rd';
106
        $database = 'db';
107
        $table = 'table';
108
        $mappingPermission = $this->getMappingPermission($permission);
109
110
        $user = new User($name, $password);
111
        $user->setPlatform('SQLSrv');
112
        $user->setGrant($permission, $database, $table);
113
        $this->assertEquals(<<<T
114
GRANT $mappingPermission ON $database.$table TO $name;
115
GO
116
T
117
, $user->toSqlPrivileges());
118
    }
119
120
    public function testItSrvGrantOptionsMultiple(): void
121
    {
122
        $name = 'jon';
123
        $password = 'p4sw00rd';
124
        $database = 'db';
125
        $table = 'table';
126
        $permissions = [
127
            'CREATE',
128
            'UPDATE',
129
        ];
130
131
        $user = new User($name, $password);
132
        $user->setPlatform('SQLSrv');
133
        $user->setGrants($permissions, $database, $table);
134
        $this->assertEquals(<<<T
135
GRANT CREATE ON $database.$table TO $name;
136
GO
137
GRANT UPDATE ON $database.$table TO $name;
138
GO
139
T
140
, $user->toSqlPrivileges());
141
    }
142
143
    public function getMappingPermission(string $permission): string
144
    {
145
        return SQLSrvUserFactory::MAPPING_PERMISSION[$permission];
146
    }
147
148
    public function getNameInvalid(): array
149
    {
150
        return [
151
            ['jon doe'],
152
        ];
153
    }
154
155
    public function getPermissionValid(): array
156
    {
157
        return [
158
            ['ALL PRIVILEGES'],
159
            ['CREATE'],
160
            ['DROP'],
161
            ['DELETE'],
162
            ['INSERT'],
163
            ['SELECT'],
164
            ['UPDATE'],
165
            ['GRANT OPTION'],
166
        ];
167
    }
168
}
169