UnknownValidationSolutionProviderTest.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace Facade\Ignition\Tests\Solutions;
  3. use BadMethodCallException;
  4. use Exception;
  5. use Facade\Ignition\SolutionProviders\UnknownValidationSolutionProvider;
  6. use Facade\Ignition\Tests\TestCase;
  7. use Illuminate\Support\Facades\Validator;
  8. class UnknownValidationSolutionProviderTest extends TestCase
  9. {
  10. /** @test */
  11. public function it_can_solve_the_exception()
  12. {
  13. if (version_compare($this->app->version(), '5.6.3', '<')) {
  14. $this->markTestSkipped('Laravel version < 5.6.3 do not support bad method call solutions');
  15. }
  16. $canSolve = app(UnknownValidationSolutionProvider::class)->canSolve($this->getBadMethodCallException());
  17. $this->assertTrue($canSolve);
  18. }
  19. /**
  20. * @test
  21. * @dataProvider rulesProvider
  22. *
  23. * @param $invalidRule
  24. * @param $recommendedRule
  25. */
  26. public function it_can_recommend_changing_the_rule($invalidRule, $recommendedRule)
  27. {
  28. if (version_compare($this->app->version(), '5.6.3', '<')) {
  29. $this->markTestSkipped('Laravel version < 5.6.3 do not support bad method call solutions');
  30. }
  31. Validator::extend('foo', function ($attribute, $value, $parameters, $validator) {
  32. return $value == 'foo';
  33. });
  34. Validator::extendImplicit('bar_a', function ($attribute, $value, $parameters, $validator) {
  35. return $value == 'bar';
  36. });
  37. /** @var \Facade\IgnitionContracts\Solution $solution */
  38. $solution = app(UnknownValidationSolutionProvider::class)->getSolutions($this->getBadMethodCallException($invalidRule))[0];
  39. $this->assertEquals("Did you mean `{$recommendedRule}` ?", $solution->getSolutionDescription());
  40. $this->assertEquals('Unknown Validation Rule', $solution->getSolutionTitle());
  41. }
  42. protected function getBadMethodCallException(string $rule = 'number'): BadMethodCallException
  43. {
  44. $default = new BadMethodCallException('Not a validation rule exception!');
  45. try {
  46. $validator = Validator::make(['number' => 10], ['number' => "{$rule}"]);
  47. $validator->validate();
  48. return $default;
  49. } catch (BadMethodCallException $badMethodCallException) {
  50. return $badMethodCallException;
  51. } catch (Exception $exception) {
  52. return $default;
  53. }
  54. }
  55. /**
  56. * Return a data set.
  57. *
  58. * @return array
  59. */
  60. public function rulesProvider(): array
  61. {
  62. return [
  63. ['number', 'numeric'],
  64. ['unik', 'unique'],
  65. ['fooo', 'foo'],
  66. ['bar_b', 'bar_a'],
  67. ];
  68. }
  69. }