ValidateOptionsTest.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace Test\Michel\Resolver;
  3. use Michel\Resolver\Option;
  4. use Michel\Resolver\OptionsResolver;
  5. use Michel\UniTester\TestCase;
  6. class ValidateOptionsTest extends TestCase
  7. {
  8. protected function setUp(): void
  9. {
  10. // TODO: Implement setUp() method.
  11. }
  12. protected function tearDown(): void
  13. {
  14. // TODO: Implement tearDown() method.
  15. }
  16. protected function execute(): void
  17. {
  18. $this->testNotValid();
  19. $this->testValid();
  20. }
  21. public function testNotValid(): void
  22. {
  23. $resolver = new OptionsResolver([
  24. Option::mixed('action')->validator(static function ($value) {
  25. return filter_var($value, FILTER_VALIDATE_URL) !== false;
  26. }),
  27. Option::mixed('method')->setOptional('POST'),
  28. ]);
  29. $this->expectException(\InvalidArgumentException::class, function () use ($resolver) {
  30. $resolver->resolve([
  31. 'action' => null,
  32. ]);
  33. });
  34. }
  35. public function testValid(): void
  36. {
  37. $resolver = new OptionsResolver([
  38. Option::mixed('action')->validator(static function ($value) {
  39. return filter_var($value, FILTER_VALIDATE_URL) !== false;
  40. }),
  41. Option::mixed('method')->setOptional('POST'),
  42. ]);
  43. $options = $resolver->resolve([
  44. 'action' => 'https://www.depohub.org',
  45. ]);
  46. $this->assertStrictEquals($options, ['action' => 'https://www.depohub.org', 'method' => 'POST']);
  47. }
  48. }