ReleaseRadarServiceTest.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace Tests\Feature\Services;
  3. use App\Facades\Settings;
  4. use App\Services\ReleaseRadarService;
  5. use Illuminate\Foundation\Testing\WithoutMiddleware;
  6. use Tests\FeatureTestCase;
  7. use Illuminate\Support\Facades\Http;
  8. use Tests\Data\HttpRequestTestData;
  9. /**
  10. * @covers \App\Services\ReleaseRadarService
  11. */
  12. class ReleaseRadarServiceTest extends FeatureTestCase
  13. {
  14. use WithoutMiddleware;
  15. /**
  16. * @test
  17. */
  18. public function test_manualScan_returns_no_new_release()
  19. {
  20. $url = config('2fauth.latestReleaseUrl');
  21. Http::preventStrayRequests();
  22. Http::fake([
  23. $url => Http::response(HttpRequestTestData::LATEST_RELEASE_BODY_NO_NEW_RELEASE, 200),
  24. ]);
  25. $releaseRadarService = new ReleaseRadarService();
  26. $release = $releaseRadarService->manualScan();
  27. $this->assertFalse($release);
  28. $this->assertDatabaseHas('options', [
  29. 'key' => 'lastRadarScan',
  30. ]);
  31. $this->assertDatabaseMissing('options', [
  32. 'key' => 'latestRelease',
  33. 'value' => HttpRequestTestData::TAG_NAME
  34. ]);
  35. }
  36. /**
  37. * @test
  38. */
  39. public function test_manualScan_returns_new_release()
  40. {
  41. $url = config('2fauth.latestReleaseUrl');
  42. Http::preventStrayRequests();
  43. Http::fake([
  44. $url => Http::response(HttpRequestTestData::LATEST_RELEASE_BODY_NEW_RELEASE, 200),
  45. ]);
  46. $releaseRadarService = new ReleaseRadarService();
  47. $release = $releaseRadarService->manualScan();
  48. $this->assertEquals(HttpRequestTestData::NEW_TAG_NAME, $release);
  49. $this->assertDatabaseHas('options', [
  50. 'key' => 'latestRelease',
  51. 'value' => HttpRequestTestData::NEW_TAG_NAME
  52. ]);
  53. $this->assertDatabaseHas('options', [
  54. 'key' => 'lastRadarScan',
  55. ]);
  56. }
  57. /**
  58. * @test
  59. */
  60. public function test_manualScan_succeed_when_something_fails()
  61. {
  62. $url = config('2fauth.latestReleaseUrl');
  63. // We do not fake the http request so an exception will be thrown
  64. Http::preventStrayRequests();
  65. $releaseRadarService = new ReleaseRadarService();
  66. $release = $releaseRadarService->manualScan();
  67. $this->assertFalse($release);
  68. }
  69. /**
  70. * @test
  71. */
  72. public function test_manualScan_succeed_when_github_is_unreachable()
  73. {
  74. $url = config('2fauth.latestReleaseUrl');
  75. Http::preventStrayRequests();
  76. Http::fake([
  77. $url => Http::response(null, 400),
  78. ]);
  79. $releaseRadarService = new ReleaseRadarService();
  80. $release = $releaseRadarService->manualScan();
  81. $this->assertFalse($release);
  82. }
  83. /**
  84. * @test
  85. */
  86. public function test_scheduleScan_runs_after_one_week()
  87. {
  88. $url = config('2fauth.latestReleaseUrl');
  89. Http::preventStrayRequests();
  90. Http::fake([
  91. $url => Http::response(HttpRequestTestData::LATEST_RELEASE_BODY_NEW_RELEASE, 200),
  92. ]);
  93. Settings::set('lastRadarScan', time() - (60 * 60 * 24 * 7) - 1);
  94. $releaseRadarService = $this->mock(ReleaseRadarService::class)->makePartial();
  95. $releaseRadarService->shouldAllowMockingProtectedMethods()
  96. ->shouldReceive('newRelease')
  97. ->once();
  98. $releaseRadarService->scheduledScan();
  99. }
  100. /**
  101. * @test
  102. */
  103. public function test_scheduleScan_does_not_run_before_one_week()
  104. {
  105. Settings::set('lastRadarScan', time() - (60 * 60 * 24 * 7) + 2);
  106. $releaseRadarService = $this->mock(ReleaseRadarService::class)->makePartial();
  107. $releaseRadarService->shouldAllowMockingProtectedMethods()
  108. ->shouldNotReceive('newRelease');
  109. $releaseRadarService->scheduledScan();
  110. }
  111. }