Passed
Pull Request — master (#12)
by Gabriel
11:49
created

LogCallsTest::testCanUseCollectionAsTraversable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\PsrLogTestDoubles\Tests;
6
7
use PHPUnit\Framework\TestCase;
8
use Psr\Log\LogLevel;
9
use WMDE\PsrLogTestDoubles\LogCall;
10
use WMDE\PsrLogTestDoubles\LogCalls;
11
12
/**
13
 * @covers \WMDE\PsrLogTestDoubles\LogCalls
14
 * @covers \WMDE\PsrLogTestDoubles\LogCall
15
 *
16
 * @license GNU GPL v2+
17
 * @author Jeroen De Dauw < [email protected] >
18
 */
19
class LogCallsTest extends TestCase {
20
21
	public function testWhenThereAreNoLogCalls_getMessagesReturnsEmptyArray(): void {
22
		$this->assertSame( [], ( new LogCalls() )->getMessages() );
23
	}
24
25
	public function testWhenMultipleThingsAreLogged_getLogMessagesReturnsAllMessages(): void {
26
		$logCalls = new LogCalls(
27
			new LogCall( LogLevel::INFO, 'And so it begins', [ 'year' => 2258 ] ),
28
			new LogCall( LogLevel::ALERT, "There's a hole in your mind" ),
29
			new LogCall( LogLevel::INFO, 'And so it begins' )
30
		);
31
32
		$this->assertSame(
33
			[
34
				'And so it begins',
35
				"There's a hole in your mind",
36
				'And so it begins'
37
			],
38
			$logCalls->getMessages()
39
		);
40
	}
41
42
	public function testCanUseCollectionAsTraversable(): void {
43
		$this->assertEquals(
44
			[
45
				new LogCall( LogLevel::INFO, 'And so it begins' )
46
			],
47
			iterator_to_array(
48
				new LogCalls( new LogCall( LogLevel::INFO, 'And so it begins' ) )
49
			)
50
		);
51
	}
52
53
	public function testWhenThereAreNoLogCalls_getFirstCallReturnsNull(): void {
54
		$this->assertNull( ( new LogCalls() )->getFirstCall() );
55
	}
56
57
	public function testWhenMultipleThingsAreLogged_getFirstCallReturnsTheFirst(): void {
58
		$logCalls = new LogCalls(
59
			new LogCall( LogLevel::INFO, 'And so it begins', [ 'year' => 2258 ] ),
60
			new LogCall( LogLevel::ALERT, "There's a hole in your mind" )
61
		);
62
63
		$this->assertSame( LogLevel::INFO, $logCalls->getFirstCall()->getLevel() );
64
		$this->assertSame( 'And so it begins', $logCalls->getFirstCall()->getMessage() );
65
		$this->assertSame( [ 'year' => 2258 ], $logCalls->getFirstCall()->getContext() );
66
	}
67
68
	public function testImplementsCountable(): void {
69
		$logCalls = new LogCalls(
70
			new LogCall( LogLevel::INFO, 'And so it begins', [ 'year' => 2258 ] ),
71
			new LogCall( LogLevel::ALERT, "There's a hole in your mind" ),
72
			new LogCall( LogLevel::INFO, 'And so it begins' )
73
		);
74
75
		$this->assertCount( 3, $logCalls );
76
	}
77
78
	public function testGetLastCallReturnsLastCall(): void {
79
		$logCalls = new LogCalls(
80
			new LogCall( LogLevel::INFO, 'And so it begins', [ 'year' => 2258 ] ),
81
			new LogCall( LogLevel::ALERT, "There's a hole in your mind" )
82
		);
83
84
		$this->assertSame(
85
			"There's a hole in your mind",
86
			$logCalls->getLastCall()->getMessage()
87
		);
88
	}
89
90
	public function testWhenThereAreNoLogCalls_getLastCallReturnsNull(): void {
91
		$this->assertNull( ( new LogCalls() )->getLastCall() );
92
	}
93
94
	public function testFilter(): void {
95
		$logCalls = new LogCalls(
96
			new LogCall( LogLevel::INFO, 'And so it begins', [ 'year' => 2258 ] ),
97
			new LogCall( LogLevel::ALERT, "There's a hole in your mind" ),
98
			new LogCall( LogLevel::INFO, 'And so it begins' ),
99
			new LogCall( LogLevel::CRITICAL, 'Enemy sighted' ),
100
		);
101
102
		$this->assertEquals(
103
			new LogCalls(
104
				new LogCall( LogLevel::INFO, 'And so it begins', [ 'year' => 2258 ] ),
105
				new LogCall( LogLevel::INFO, 'And so it begins' ),
106
			),
107
			$logCalls->filter( fn( LogCall $call ) => $call->getLevel() === LogLevel::INFO )
108
		);
109
	}
110
111
	public function testGetErrors(): void {
112
		$logCalls = new LogCalls(
113
			new LogCall( LogLevel::INFO, 'And so it begins', [ 'year' => 2258 ] ),
114
			new LogCall( LogLevel::ALERT, "There's a hole in your mind" ),
115
			new LogCall( LogLevel::INFO, 'And so it begins' ),
116
			new LogCall( LogLevel::CRITICAL, 'Enemy sighted' ),
117
		);
118
119
		$this->assertEquals(
120
			new LogCalls(
121
				new LogCall( LogLevel::ALERT, "There's a hole in your mind" ),
122
				new LogCall( LogLevel::CRITICAL, 'Enemy sighted' ),
123
			),
124
			$logCalls->getErrors()
125
		);
126
	}
127
128
	public function testMap(): void {
129
		$logCalls = new LogCalls(
130
			new LogCall( LogLevel::INFO, 'And so it begins', [ 'year' => 2258 ] ),
131
			new LogCall( LogLevel::ALERT, "There's a hole in your mind", [ 'year' => 2260 ] ),
132
		);
133
134
		$this->assertEquals(
135
			new LogCalls(
136
				new LogCall( LogLevel::INFO, 'And so it begins' ),
137
				new LogCall( LogLevel::ALERT, "There's a hole in your mind" ),
138
			),
139
			$logCalls->map( fn( LogCall $call ) => $call->withoutContext() )
140
		);
141
	}
142
143
	public function testWithoutContexts(): void {
144
		$logCalls = new LogCalls(
145
			new LogCall( LogLevel::INFO, 'And so it begins', [ 'year' => 2258 ] ),
146
			new LogCall( LogLevel::ALERT, "There's a hole in your mind", [ 'year' => 2260 ] ),
147
		);
148
149
		$this->assertEquals(
150
			new LogCalls(
151
				new LogCall( LogLevel::INFO, 'And so it begins' ),
152
				new LogCall( LogLevel::ALERT, "There's a hole in your mind" ),
153
			),
154
			$logCalls->withoutContexts()
155
		);
156
	}
157
158
}
159