LogTest.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. namespace Facade\Ignition\Tests;
  3. use Facade\FlareClient\Flare;
  4. use Facade\Ignition\Tests\Mocks\FakeClient;
  5. use Illuminate\Support\Facades\Log;
  6. use Illuminate\Support\Facades\Route;
  7. class LogTest extends TestCase
  8. {
  9. /** @var \Facade\Ignition\Tests\Mocks\FakeClient */
  10. protected $fakeClient;
  11. public function setUp(): void
  12. {
  13. parent::setUp();
  14. $this->app['config']['logging.channels.flare'] = [
  15. 'driver' => 'flare',
  16. ];
  17. $this->app['config']['logging.default'] = 'flare';
  18. $this->app['config']['flare.key'] = 'some-key';
  19. $this->fakeClient = new FakeClient();
  20. $currentClient = $this->app->make(Flare::class);
  21. $middleware = $currentClient->getMiddleware();
  22. $this->app->singleton(Flare::class, function () use ($middleware) {
  23. $flare = new Flare($this->fakeClient, null, null);
  24. foreach ($middleware as $singleMiddleware) {
  25. $flare->registerMiddleware($singleMiddleware);
  26. }
  27. return $flare;
  28. });
  29. $this->useTime('2019-01-01 12:34:56');
  30. }
  31. /** @test */
  32. public function it_reports_exceptions_using_the_flare_api()
  33. {
  34. Route::get('exception', function () {
  35. whoops();
  36. });
  37. $this->get('/exception');
  38. $this->fakeClient->assertRequestsSent(1);
  39. }
  40. /** @test */
  41. public function it_does_not_report_normal_log_messages()
  42. {
  43. Log::info('this is a log message');
  44. Log::debug('this is a log message');
  45. $this->fakeClient->assertRequestsSent(0);
  46. }
  47. /** @test */
  48. public function it_reports_log_messages_above_the_specified_minimum_level()
  49. {
  50. Log::error('this is a log message');
  51. Log::emergency('this is a log message');
  52. Log::critical('this is a log message');
  53. $this->fakeClient->assertRequestsSent(3);
  54. }
  55. /** @test */
  56. public function it_reports_different_log_levels_when_configured()
  57. {
  58. $this->app['config']['logging.channels.flare.level'] = 'debug';
  59. Log::debug('this is a log message');
  60. Log::error('this is a log message');
  61. Log::emergency('this is a log message');
  62. Log::critical('this is a log message');
  63. $this->fakeClient->assertRequestsSent(4);
  64. }
  65. /** @test */
  66. public function it_can_log_null_values()
  67. {
  68. Log::info(null);
  69. Log::debug(null);
  70. Log::error(null);
  71. Log::emergency(null);
  72. Log::critical(null);
  73. $this->fakeClient->assertRequestsSent(3);
  74. }
  75. /** @test */
  76. public function it_adds_log_messages_to_the_report()
  77. {
  78. Route::get('exception', function () {
  79. Log::info('info log');
  80. Log::debug('debug log');
  81. Log::notice('notice log');
  82. whoops();
  83. });
  84. $this->get('/exception');
  85. $this->fakeClient->assertRequestsSent(1);
  86. $arguments = $this->fakeClient->requests[0]['arguments'];
  87. $logs = $arguments['context']['logs'];
  88. $this->assertCount(3, $logs);
  89. }
  90. public function provideMessageLevels()
  91. {
  92. return [
  93. ['info'],
  94. ['notice'],
  95. ['debug'],
  96. ['warning'],
  97. ['error'],
  98. ['critical'],
  99. ['emergency'],
  100. ];
  101. }
  102. /**
  103. * @test
  104. * @dataProvider provideMessageLevels
  105. */
  106. public function it_can_report_an_exception_with_logs($logLevel)
  107. {
  108. $this->app['config']['flare.send_logs_as_events'] = false;
  109. Log::log($logLevel, 'log');
  110. Route::get('exception', function () {
  111. whoops();
  112. });
  113. $this->get('/exception');
  114. $arguments = $this->fakeClient->requests[0]['arguments'];
  115. $logs = $arguments['context']['logs'];
  116. $this->assertCount(1, $logs);
  117. $this->assertEquals($logLevel, $logs[0]['level']);
  118. $this->assertEquals('log', $logs[0]['message']);
  119. $this->assertEquals([], $logs[0]['context']);
  120. }
  121. /** @test */
  122. public function it_can_report_an_exception_with_logs_with_metadata()
  123. {
  124. $this->app['config']['flare.send_logs_as_events'] = false;
  125. Log::info('log', [
  126. 'meta' => 'data',
  127. ]);
  128. Route::get('exception', function () {
  129. whoops();
  130. });
  131. $this->get('/exception');
  132. $arguments = $this->fakeClient->requests[0]['arguments'];
  133. $logs = $arguments['context']['logs'];
  134. $this->assertEquals(['meta' => 'data'], $logs[0]['context']);
  135. }
  136. }