InvalidRouteActionSolutionProviderTest.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace Facade\Ignition\Tests\Solutions;
  3. use Facade\Ignition\SolutionProviders\InvalidRouteActionSolutionProvider;
  4. use Facade\Ignition\Support\ComposerClassMap;
  5. use Facade\Ignition\Tests\stubs\Controllers\TestTypoController;
  6. use Facade\Ignition\Tests\TestCase;
  7. use Illuminate\Support\Facades\Route;
  8. use Illuminate\Support\Str;
  9. use UnexpectedValueException;
  10. class InvalidRouteActionSolutionProviderTest extends TestCase
  11. {
  12. public function setUp(): void
  13. {
  14. parent::setUp();
  15. $this->app->bind(
  16. ComposerClassMap::class,
  17. function () {
  18. return new ComposerClassMap(__DIR__.'/../../vendor/autoload.php');
  19. }
  20. );
  21. }
  22. /** @test */
  23. public function it_can_solve_the_exception()
  24. {
  25. $canSolve = app(InvalidRouteActionSolutionProvider::class)->canSolve($this->getInvalidRouteActionException());
  26. $this->assertTrue($canSolve);
  27. }
  28. /** @test */
  29. public function it_can_recommend_changing_the_routes_method()
  30. {
  31. Route::get('/test', TestTypoController::class);
  32. /** @var \Facade\IgnitionContracts\Solution $solution */
  33. $solution = app(InvalidRouteActionSolutionProvider::class)->getSolutions($this->getInvalidRouteActionException())[0];
  34. $this->assertTrue(Str::contains($solution->getSolutionDescription(), 'Did you mean `TestTypoController`'));
  35. }
  36. /** @test */
  37. public function it_wont_recommend_another_controller_class_if_the_names_are_too_different()
  38. {
  39. Route::get('/test', TestTypoController::class);
  40. $invalidController = 'UnrelatedTestTypoController';
  41. /** @var \Facade\IgnitionContracts\Solution $solution */
  42. $solution = app(InvalidRouteActionSolutionProvider::class)->getSolutions($this->getInvalidRouteActionException($invalidController))[0];
  43. $this->assertFalse(Str::contains($solution->getSolutionDescription(), 'Did you mean `TestTypoController`'));
  44. }
  45. protected function getInvalidRouteActionException(string $controller = 'TestTypooController'): UnexpectedValueException
  46. {
  47. return new UnexpectedValueException("Invalid route action: [{$controller}]");
  48. }
  49. }