testCreateLogWithSubArrayMessage()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 6
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 11
rs 10
1
<?php
2
3
namespace SimpleLog\Test;
4
5
use PHPUnit\Framework\TestCase;
6
use SimpleLog\Message\DefaultInlineMessage;
7
8
class DefaultInlineMessageTest extends TestCase
9
{
10
    public const DATE_FORMAT = '[\d]{4}-[\d]{2}-[\d]{2}';
11
    public const TIME_FORMAT = '[\d]{2}:[\d]{2}:[\d]{2}';
12
    public const DATE_TIME_FORMAT = self::DATE_FORMAT . ' - ' . self::TIME_FORMAT;
13
14
    public function testSimpleMessage(): void
15
    {
16
        $message = (new DefaultInlineMessage())->createMessage('Some log message', [])->getMessage();
17
18
        $this->assertMatchesRegularExpression($this->getSampleContent(), $message);
19
20
        $message = (new DefaultInlineMessage())
21
            ->createMessage(new MessageObject('Some log message'), [])->getMessage();
22
23
        $this->assertMatchesRegularExpression($this->getSampleContent(), $message);
24
    }
25
26
    protected function getSampleContent(): string
27
    {
28
        return '#\[' . self::DATE_TIME_FORMAT . '] Some log message#';
29
    }
30
31
    public function testSimpleMessageWithArray(): void
32
    {
33
        $content = [
34
            'message key' => 'some message',
35
            'another key' => 'some another message',
36
            'no key message',
37
        ];
38
        $message = (new DefaultInlineMessage())->createMessage($content, [])->getMessage();
39
40
        $this->assertMatchesRegularExpression($this->getArrayMessageContent(), $message);
41
    }
42
43
    protected function getArrayMessageContent(): string
44
    {
45
        return '#\['
46
            . self::DATE_TIME_FORMAT
47
            . ']'
48
            . '  \| message key:some message \| another key:some another message \| no key message#';
49
    }
50
51
    /**
52
     * simple create log object and create log message from array with sub arrays data in given directory
53
     */
54
    public function testCreateLogWithSubArrayMessage(): void
55
    {
56
        $content = [
57
            'sub array' => [
58
                'key' => 'val',
59
                'key 2' => 'val 2',
60
            ],
61
        ];
62
        $message = (new DefaultInlineMessage())->createMessage($content, [])->getMessage();
63
64
        $this->assertMatchesRegularExpression($this->getSubArrayMessageContent(), $message);
65
    }
66
67
    protected function getSubArrayMessageContent(): string
68
    {
69
        return '#\[' . self::DATE_TIME_FORMAT . ']  \| sub array: \| key:val \| key 2:val 2#';
70
    }
71
72
    public function testMessageWithContext(): void
73
    {
74
        $context = ['context' => 'some value'];
75
        $message = (new DefaultInlineMessage())
76
            ->createMessage('Some log message with {context}', $context)->getMessage();
77
78
        $this->assertMatchesRegularExpression($this->getSampleContentWithContext(), $message);
79
    }
80
81
    protected function getSampleContentWithContext(): string
82
    {
83
        return '#\[' . self::DATE_TIME_FORMAT . '] Some log message with some value#';
84
    }
85
86
    public function testMessageWithError(): void
87
    {
88
        if (\PHP_VERSION < '8.0.0') {
89
            $this->expectExceptionMessage(
90
                'Incorrect message type. Must be string, array or object with __toString method.'
91
            );
92
            $this->expectException(\Psr\Log\InvalidArgumentException::class);
93
        } else {
94
            $this->expectExceptionMessage(
95
                'method_exists(): Argument #1 ($object_or_class) must be of type object|string, int given'
96
            );
97
            $this->expectException(\TypeError::class);
98
        }
99
100
        (new DefaultInlineMessage())->createMessage(32432, [])->getMessage();
101
    }
102
}
103