1+ <?php
2+ namespace Ajaaleixo \Middleware \CorrelationId \Test ;
3+
4+ use Ajaaleixo \Middleware \CorrelationId \CorrelationIdMiddleware ;
5+ use Illuminate \Http \Request ;
6+ use Illuminate \Http \Response ;
7+ use Illuminate \Support \Facades \Log ;
8+ use Webpatser \Uuid \Uuid ;
9+
10+ class MiddlewareTest extends TestCase
11+ {
12+ protected $ correlationIdMiddleware ;
13+
14+ public function setUp ()
15+ {
16+ parent ::setUp ();
17+
18+ $ this ->correlationIdMiddleware = new CorrelationIdMiddleware ($ this ->app );
19+ }
20+
21+ /** @test */
22+ public function has_macros_when_middleware_runs ()
23+ {
24+ // Prepare
25+ $ request = $ this ->makeRequestWithCorrelationHeader ();
26+
27+ // Test
28+ $ this ->runMiddleware ($ this ->correlationIdMiddleware , $ request );
29+
30+ // Assert
31+ $ this ->assertTrue ($ request ->hasMacro ('hasCorrelationId ' ));
32+ $ this ->assertTrue ($ request ->hasMacro ('getCorrelationId ' ));
33+ $ this ->assertTrue ($ request ->hasMacro ('setCorrelationId ' ));
34+ }
35+
36+ /** @test */
37+ public function correlation_propagates_to_logs ()
38+ {
39+ // Prepare
40+ $ request = $ this ->makeRequestWithCorrelationHeader ();
41+ $ correlationId = $ request ->header ('x-correlation-id ' );
42+ $ logMessage = 'This is my n log entry ' ;
43+ $ correlationParam = config ('correlationid.param_name ' );
44+
45+ // Test
46+ $ this ->runMiddleware ($ this ->correlationIdMiddleware , $ request );
47+ Log::info ($ logMessage );
48+
49+ $ lastLogLine = $ this ->getLastLogLine ();
50+ $ this ->assertContains ($ logMessage , $ lastLogLine );
51+ $ this ->assertContains ($ correlationId , $ lastLogLine );
52+ $ this ->assertContains ($ correlationParam , $ lastLogLine );
53+ }
54+
55+ /** @test */
56+ public function correlation_does_not_propagate_to_logs ()
57+ {
58+ // Prepare
59+ $ request = $ this ->makeRequestWithoutCorrelationHeader ();
60+ $ this ->app ['config ' ]->set ('correlationid.propagates ' , false );
61+ $ logMessage = 'This is a log without correlation id ' ;
62+ $ correlationParam = config ('correlationid.param_name ' );
63+
64+ // Test
65+ $ this ->runMiddleware ($ this ->correlationIdMiddleware , $ request );
66+ Log::info ($ logMessage );
67+
68+ $ lastLogLine = $ this ->getLastLogLine ();
69+ $ this ->assertContains ($ logMessage , $ lastLogLine );
70+ $ this ->assertNotContains ($ correlationParam , $ lastLogLine );
71+ }
72+
73+ protected function runMiddleware ($ middleware , $ request )
74+ {
75+ return $ middleware ->handle ($ request , function () {
76+ return (new Response ())->setContent ('<html></html> ' );
77+ });
78+ }
79+
80+ protected function makeRequestWithCorrelationHeader ()
81+ {
82+ $ request = new Request ();
83+ $ request ->headers ->add ([config ('correlationid.header_name ' ) => (string ) Uuid::generate (4 )]);
84+
85+ return $ request ;
86+ }
87+
88+ protected function makeRequestWithoutCorrelationHeader ()
89+ {
90+ return new Request ();
91+ }
92+
93+ protected function getLastLogLine ()
94+ {
95+ $ content = file_get_contents ($ this ->app ['config ' ]['logging ' ]['channels ' ]['single ' ]['path ' ]);
96+ $ arrayContent = explode ("\n" , $ content );
97+
98+ return $ arrayContent [count ($ arrayContent )-2 ];
99+ }
100+ }
0 commit comments