Completed
Push — master ( 77ea51...fa9965 )
by Jonathan
02:40
created

DatabaseSandbox::setSandboxEnabled()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace PHPChunkit;
6
7
/**
8
 * @testClass PHPChunkit\Test\DatabaseSandboxTest
9
 */
10
class DatabaseSandbox
11
{
12
    const SANDBOXED_DATABASE_NAME_PATTERN = '%s_%s';
13
14
    /**
15
     * @var bool
16
     */
17
    private $sandboxEnabled = true;
18
19
    /**
20
     * @var array
21
     */
22
    private $databaseNames = [];
23
24
    /**
25
     * @var array
26
     */
27
    private $sandboxDatabaseNames = [];
28
29 7
    public function __construct(bool $sandboxEnabled = false, array $databaseNames = [])
30
    {
31 7
        $this->sandboxEnabled = $sandboxEnabled;
32 7
        $this->databaseNames = $databaseNames;
33 7
    }
34
35 1
    public function getSandboxEnabled() : bool
36
    {
37 1
        return $this->sandboxEnabled;
38
    }
39
40 2
    public function setSandboxEnabled(bool $sandboxEnabled)
41
    {
42 2
        $this->sandboxEnabled = $sandboxEnabled;
43 2
    }
44
45 2
    public function getDatabaseNames() : array
46
    {
47 2
        return $this->databaseNames;
48
    }
49
50 3
    public function setDatabaseNames(array $databaseNames)
51
    {
52 3
        $this->databaseNames = $databaseNames;
53 3
    }
54
55 1
    public function getTestDatabaseNames() : array
56
    {
57 1
        $databaseNames = [];
58
59 1
        foreach ($this->databaseNames as $databaseName) {
60 1
            $databaseNames[$databaseName] = sprintf(self::SANDBOXED_DATABASE_NAME_PATTERN,
61 1
                $databaseName, 'test'
62
            );
63
        }
64
65 1
        return $databaseNames;
66
    }
67
68 1
    public function getSandboxedDatabaseNames() : array
69
    {
70 1
        $this->initialize();
71
72 1
        return $this->sandboxDatabaseNames;
73
    }
74
75
    protected function generateUniqueId() : string
76
    {
77
        return uniqid();
78
    }
79
80 1
    private function initialize()
81
    {
82 1
        if (empty($this->sandboxDatabaseNames)) {
83 1
            $this->sandboxDatabaseNames = $this->generateDatabaseNames();
84
        }
85 1
    }
86
87 1
    private function generateDatabaseNames() : array
88
    {
89 1
        $databaseNames = [];
90
91 1
        foreach ($this->databaseNames as $databaseName) {
92 1
            if ($this->sandboxEnabled) {
93 1
                $databaseNames[$databaseName] = sprintf(self::SANDBOXED_DATABASE_NAME_PATTERN,
94 1
                    $databaseName, $this->generateUniqueId()
95
                );
96
            } else {
97
                $databaseNames[$databaseName] = sprintf(self::SANDBOXED_DATABASE_NAME_PATTERN,
98 1
                    $databaseName, 'test'
99
                );
100
            }
101
        }
102
103 1
        return $databaseNames;
104
    }
105
}
106