Completed
Push — master ( 90d1c0...1b76ed )
by Razon
01:57
created

TargetTest::createTarget()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 2
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
nc 1
nop 0
1
<?php
2
namespace RazonYang\Yii2\Setting\Tests\Unit;
3
4
use yii\log\Logger;
5
use Codeception\Test\Unit;
6
use RazonYang\Yii2\Log\Db\Target;
7
use Yii;
8
9
class TargetTest extends Unit
10
{
11
    private function createTarget(): Target
12
    {
13
        return new Target([
14
            'logTable' => 'log',
15
        ]);
16
    }
17
18
    public function testGetRequestId(): void
19
    {
20
        $target = $this->createTarget();
21
        $method = new \ReflectionMethod(Target::class, 'getRequestId');
22
        $method->setAccessible(true);
23
        $this->assertEquals($this->getRequestId(), $method->invoke($target));
24
    }
25
26
    private function getRequestId(): string
27
    {
28
        return dechex($_SERVER['REQUEST_TIME_FLOAT'] * 1000000);
29
    }
30
31
    /**
32
     * @dataProvider dataProviderMessage
33
     */
34
    public function testExport(array ... $messages): void
35
    {
36
        $target = $this->createTarget();
37
        $target->messages = $messages + [];
38
        $target->export();
39
40
        foreach ($messages as $message) {
41
            list($text, $level, $category, $timestamp) = $message;
42
            $sql = 'SELECT message, level, category FROM log WHERE request_id = :request_id AND level = :level AND message = :message AND category = :category AND log_time = :log_time';
43
            $parameters = [
44
                ':request_id' => $this->getRequestId(),
45
                ':level' => $level,
46
                ':message' => $text,
47
                ':category' => $category,
48
                ':log_time' => $timestamp,
49
            ];
50
51
            $row = $target->db->createCommand($sql)->bindValues($parameters)->queryOne();
52
            $this->assertNotFalse($row);
53
        }
54
    }
55
56
    public function dataProviderMessage(): array
57
    {
58
        return [
59
            [
60
                ['error message', Logger::LEVEL_ERROR, 'error', microtime(true)],
61
                ['warning message', Logger::LEVEL_WARNING, 'warning', microtime(true)],
62
            ],
63
            [
64
                ['error2', Logger::LEVEL_ERROR, 'error', microtime(true)],
65
            ],
66
        ];
67
    }
68
}
69