UndefinedVariableSolutionProviderTest.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace Facade\Ignition\Tests\Solutions;
  3. use Facade\Ignition\Exceptions\ViewException;
  4. use Facade\Ignition\SolutionProviders\UndefinedVariableSolutionProvider;
  5. use Facade\Ignition\Support\ComposerClassMap;
  6. use Facade\Ignition\Tests\TestCase;
  7. use Illuminate\Support\Facades\View;
  8. use Illuminate\Support\Str;
  9. class UndefinedVariableSolutionProviderTest extends TestCase
  10. {
  11. public function setUp(): void
  12. {
  13. parent::setUp();
  14. View::addLocation(__DIR__.'/../stubs/views');
  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(UndefinedVariableSolutionProvider::class)->canSolve($this->getUndefinedVariableException());
  26. $this->assertTrue($canSolve);
  27. }
  28. /** @test */
  29. public function it_can_recommend_fixing_a_variable_name_typo()
  30. {
  31. $viewData = [
  32. 'footerDescription' => 'foo',
  33. ];
  34. try {
  35. view('undefined-variable-1', $viewData)->render();
  36. } catch (ViewException $exception) {
  37. $viewException = $exception;
  38. }
  39. $canSolve = app(UndefinedVariableSolutionProvider::class)->canSolve($viewException);
  40. $this->assertTrue($canSolve);
  41. /** @var \Facade\IgnitionContracts\Solution $solution */
  42. $solutions = app(UndefinedVariableSolutionProvider::class)->getSolutions($viewException);
  43. $this->assertTrue(Str::contains($solutions[0]->getSolutionDescription(), 'Did you mean `$footerDescription`?'));
  44. }
  45. protected function getUndefinedVariableException(): ViewException
  46. {
  47. return new ViewException('Undefined variable: notSet (View: ./views/welcome.blade.php)');
  48. }
  49. }