Passed
Push — fix-8379 ( 574918...cc7769 )
by Maxime
05:28
created

DBTest::replaceParameterDataProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 14
nc 1
nop 0
dl 0
loc 25
rs 9.7998
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\ORM\Tests;
4
5
use SilverStripe\Control\Director;
6
use SilverStripe\Core\Environment;
7
use SilverStripe\Core\Injector\Injector;
8
use SilverStripe\Core\Kernel;
9
use SilverStripe\ORM\DB;
10
use SilverStripe\Dev\SapphireTest;
11
12
class DBTest extends SapphireTest
13
{
14
15
    public function testValidAlternativeDatabaseName()
16
    {
17
        /** @var Kernel $kernel */
18
        $kernel = Injector::inst()->get(Kernel::class);
19
        $prefix = Environment::getEnv('SS_DATABASE_PREFIX') ?: 'ss_';
20
21
        $kernel->setEnvironment(Kernel::DEV);
22
        $this->assertTrue(DB::valid_alternative_database_name($prefix . 'tmpdb1234567'));
23
        $this->assertFalse(DB::valid_alternative_database_name($prefix . 'tmpdb12345678'));
24
        $this->assertFalse(DB::valid_alternative_database_name('tmpdb1234567'));
25
        $this->assertFalse(DB::valid_alternative_database_name('random'));
26
        $this->assertFalse(DB::valid_alternative_database_name(''));
27
28
        $kernel->setEnvironment(Kernel::LIVE);
29
        $this->assertFalse(DB::valid_alternative_database_name($prefix . 'tmpdb1234567'));
30
31
        $kernel->setEnvironment(Kernel::DEV);
32
    }
33
34
    public function replaceParameterDataProvider()
35
    {
36
        return [
37
            // Test the escape parameter
38
            ['select ? from dummy', 0, 'ID', false, 'select \'ID\' from dummy'],
39
            ['select ? from dummy', 0, 'ID', true, 'select ID from dummy'],
40
            ['select * from dummy where ID = ?', 0, 123, false, 'select * from dummy where ID = 123'],
41
            ['select * from dummy where enabled = ?', 0, false, false, 'select * from dummy where enabled = 0'],
42
            ['select * from dummy where enabled = ?', 0, true, false, 'select * from dummy where enabled = 1'],
43
44
            // Make sure we don't substitute ? in strings
45
            [
46
                'select * from dummy where Title like \'?\' AND ID = ?',
47
                0, '1', false,
48
                'select * from dummy where Title like \'?\' AND ID = \'1\''
49
            ],
50
            [
51
                'select * from dummy where Title like \'Start of ?\' AND ID = ?',
52
                0, '1', false,
53
                'select * from dummy where Title like \'Start of ?\' AND ID = \'1\''
54
            ],
55
56
            // Make sure we replace ? in the right order
57
            ['select ? from ?', 0, 'ID', true, 'select ID from ?'],
58
            ['select ? from ?', 1, 'DummyTbl', true, 'select ? from DummyTbl'],
59
        ];
60
    }
61
62
    /**
63
     * @dataProvider replaceParameterDataProvider
64
     */
65
    public function testReplaceParameter($sql, $paramIdx, $replacement, $skipEscaping, $expected)
66
    {
67
        $actual = DB::replace_parameter($sql, $paramIdx, $replacement, $skipEscaping);
68
        $this->assertEquals($expected, $actual);
69
    }
70
}
71