diff --git a/.travis.yml b/.travis.yml index 8854d01..6a14eb5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,22 +1,52 @@ language: php -php: - - 7.2 - - 7.3 +cache: + directories: + - $HOME/.composer/cache/files -env: - matrix: - - COMPOSER_FLAGS="--prefer-lowest" - - COMPOSER_FLAGS="" +matrix: + include: + - php: 7.2 + env: LARAVEL='5.8.*' TESTBENCH='3.8.*' COMPOSER_FLAGS='--prefer-lowest' + - php: 7.2 + env: LARAVEL='5.8.*' TESTBENCH='3.8.*' COMPOSER_FLAGS='--prefer-stable' + - php: 7.3 + env: LARAVEL='5.8.*' TESTBENCH='3.8.*' COMPOSER_FLAGS='--prefer-lowest' + - php: 7.3 + env: LARAVEL='5.8.*' TESTBENCH='3.8.*' COMPOSER_FLAGS='--prefer-stable' + - php: 7.4snapshot + env: LARAVEL='5.8.*' TESTBENCH='3.8.*' COMPOSER_FLAGS='--prefer-lowest' + - php: 7.4snapshot + env: LARAVEL='5.8.*' TESTBENCH='3.8.*' COMPOSER_FLAGS='--prefer-stable' + - php: 7.2 + env: LARAVEL='^6.0' TESTBENCH='^4.0' COMPOSER_FLAGS='--prefer-lowest' + - php: 7.2 + env: LARAVEL='^6.0' TESTBENCH='^4.0' COMPOSER_FLAGS='--prefer-stable' + - php: 7.3 + env: LARAVEL='^6.0' TESTBENCH='^4.0' COMPOSER_FLAGS='--prefer-lowest' + - php: 7.3 + env: LARAVEL='^6.0' TESTBENCH='^4.0' COMPOSER_FLAGS='--prefer-stable' + - php: 7.4snapshot + env: LARAVEL='^6.0' TESTBENCH='^4.0' COMPOSER_FLAGS='--prefer-lowest' + - php: 7.4snapshot + env: LARAVEL='^6.0' TESTBENCH='^4.0' COMPOSER_FLAGS='--prefer-stable' + fast_finish: true + allow_failures: + - php: 7.4snapshot -before_script: +before_install: + - composer config discard-changes true - travis_retry composer self-update - - travis_retry composer update ${COMPOSER_FLAGS} --no-interaction --prefer-source - - composer require --dev scrutinizer/ocular --no-interaction - - composer require --dev php-coveralls/php-coveralls --no-interaction + - travis_retry composer require --dev "laravel/framework:${LARAVEL}" --no-interaction --no-update + - travis_retry composer require --dev "orchestra/testbench:${TESTBENCH}" --no-interaction --no-update + - travis_retry composer require --dev scrutinizer/ocular --no-interaction --no-update + - travis_retry composer require --dev php-coveralls/php-coveralls --no-interaction --no-update + +install: + - travis_retry composer update ${COMPOSER_FLAGS} --prefer-dist --no-suggest --no-interaction script: - - vendor/bin/phpunit + - vendor/bin/phpunit --coverage-text --coverage-clover=build/clover.xml after_script: - php vendor/bin/ocular code-coverage:upload --format=php-clover build/clover.xml diff --git a/README.md b/README.md index 96b9eaf..0917b2a 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ By using the `HasEnums` trait, you'll be able to work with the `status` field li $model = TestModel::create([ 'status' => StatusEnum::DRAFT(), ]); +``` You can set the value of an enum field with its textual value: diff --git a/composer.json b/composer.json index 19e2d09..7d04f99 100644 --- a/composer.json +++ b/composer.json @@ -24,14 +24,24 @@ ], "require": { "php": "^7.2", - "illuminate/console": "^5.8", - "illuminate/support": "^5.8", + "illuminate/console": "^5.8 || ^6.0", + "illuminate/support": "^5.8 || ^6.0", "spatie/enum": "^2.3" }, "require-dev": { - "orchestra/testbench": "^3.8", + "orchestra/testbench": "^3.8 || ^4.0", "phpunit/phpunit": "^8.0" }, + "config": { + "sort-packages": true + }, + "extra": { + "laravel": { + "providers": [ + "Spatie\\Enum\\Laravel\\EnumServiceProvider" + ] + } + }, "autoload": { "psr-4": { "Spatie\\Enum\\Laravel\\": "src" @@ -43,16 +53,7 @@ } }, "scripts": { - "test": "vendor/bin/phpunit" - }, - "config": { - "sort-packages": true - }, - "extra": { - "laravel": { - "providers": [ - "Spatie\\Enum\\Laravel\\EnumServiceProvider" - ] - } + "test": "vendor/bin/phpunit", + "test-coverage": "vendor/bin/phpunit --coverage-html=build" } } diff --git a/phpunit.xml.dist b/phpunit.xml.dist index c7c19ce..700c3b7 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -20,9 +20,4 @@ src/ - - - - - diff --git a/src/Rules/Enum.php b/src/Rules/Enum.php index 2e08ee3..e8779d2 100644 --- a/src/Rules/Enum.php +++ b/src/Rules/Enum.php @@ -48,7 +48,7 @@ public function passes($attribute, $value): bool public function message(): string { - return Lang::trans('enum::validation.'.$this->rule, [ + return Lang::get('enum::validation.'.$this->rule, [ 'attribute' => $this->attribute, 'value' => $this->value, 'enum' => $this->enum, @@ -59,7 +59,7 @@ public function message(): string protected function getDisplayableOtherValues(): array { return array_map(function ($value): string { - return $this->getTranslation($value) ?? $value; + return $this->getValueTranslation($value) ?? $value; }, $this->getOtherValues()); } @@ -68,9 +68,9 @@ protected function getDisplayableOtherValues(): array * * @return string|null */ - protected function getTranslation($value): ?string + protected function getValueTranslation($value): ?string { - return Arr::get(Lang::trans('enum::validation.enums'), $this->enum.'.'.Str::slug($this->enum::make($value)->getName(), '_')); + return Arr::get(Lang::get('enum::validation.enums'), $this->enum.'.'.Str::slug($this->enum::make($value)->getName(), '_')); } protected function getOtherValues(): array diff --git a/tests/Rules/EnumIndexTest.php b/tests/Rules/EnumIndexTest.php index 9580add..07d5e8e 100644 --- a/tests/Rules/EnumIndexTest.php +++ b/tests/Rules/EnumIndexTest.php @@ -3,6 +3,7 @@ namespace Spatie\Enum\Laravel\Tests\Rules; use Illuminate\Support\Facades\Lang; +use Illuminate\Support\Facades\Validator; use Spatie\Enum\Laravel\Tests\TestCase; use Spatie\Enum\Laravel\Rules\EnumIndex; use Spatie\Enum\Laravel\Tests\Extra\StatusEnum; @@ -45,4 +46,32 @@ public function it_passes_other_to_the_validation_message() $rule->passes('attribute', 'foobar'); $this->assertEquals('0, 1, 2', $rule->message()); } + + /** @test */ + public function it_can_resolve_validator_extension_and_pass_validation() + { + $validator = Validator::make([ + 'attribute' => 1, + ], [ + 'attribute' => 'enum_index:'.StatusEnum::class, + ]); + + $this->assertTrue($validator->passes()); + + $this->assertTrue($validator->validateEnumIndex('attribute', 1, [StatusEnum::class], $validator)); + } + + /** @test */ + public function it_can_resolve_validator_extension_and_fail_validation() + { + $validator = Validator::make([ + 'attribute' => 5, + ], [ + 'attribute' => 'enum_index:'.StatusEnum::class, + ]); + + $this->assertFalse($validator->passes()); + + $this->assertFalse($validator->validateEnumIndex('attribute', 5, [StatusEnum::class], $validator)); + } } diff --git a/tests/Rules/EnumNameTest.php b/tests/Rules/EnumNameTest.php index 0854ecd..deb827e 100644 --- a/tests/Rules/EnumNameTest.php +++ b/tests/Rules/EnumNameTest.php @@ -3,6 +3,7 @@ namespace Spatie\Enum\Laravel\Tests\Rules; use Illuminate\Support\Facades\Lang; +use Illuminate\Support\Facades\Validator; use Spatie\Enum\Laravel\Rules\EnumName; use Spatie\Enum\Laravel\Tests\TestCase; use Spatie\Enum\Laravel\Tests\Extra\StatusEnum; @@ -45,4 +46,32 @@ public function it_passes_other_to_the_validation_message() $rule->passes('attribute', 'foobar'); $this->assertEquals('DRAFT, PUBLISHED, ARCHIVED', $rule->message()); } + + /** @test */ + public function it_can_resolve_validator_extension_and_pass_validation() + { + $validator = Validator::make([ + 'attribute' => 'draft', + ], [ + 'attribute' => 'enum_name:'.StatusEnum::class, + ]); + + $this->assertTrue($validator->passes()); + + $this->assertTrue($validator->validateEnumName('attribute', 'draft', [StatusEnum::class], $validator)); + } + + /** @test */ + public function it_can_resolve_validator_extension_and_fail_validation() + { + $validator = Validator::make([ + 'attribute' => 'drafted', + ], [ + 'attribute' => 'enum_name:'.StatusEnum::class, + ]); + + $this->assertFalse($validator->passes()); + + $this->assertFalse($validator->validateEnumName('attribute', 'drafted', [StatusEnum::class], $validator)); + } } diff --git a/tests/Rules/EnumTest.php b/tests/Rules/EnumTest.php index 9a3b5d1..07162c9 100644 --- a/tests/Rules/EnumTest.php +++ b/tests/Rules/EnumTest.php @@ -2,6 +2,7 @@ namespace Spatie\Enum\Laravel\Tests\Rules; +use Illuminate\Support\Facades\Validator; use InvalidArgumentException; use Spatie\Enum\Laravel\Rules\Enum; use Illuminate\Support\Facades\Lang; @@ -126,4 +127,36 @@ public function it_passes_translated_other_to_the_validation_message() $rule->passes('attribute', 'foobar'); $this->assertEquals('entwurf, veröffentlicht, archiviert', $rule->message()); } + + /** @test */ + public function it_can_resolve_validator_extension_and_pass_validation() + { + $validator = Validator::make([ + 'attribute' => 1, + ], [ + 'attribute' => 'enum:'.StatusEnum::class, + ]); + + $this->assertTrue($validator->passes()); + + $this->assertTrue($validator->validateEnum('attribute', 1, [StatusEnum::class], $validator)); + $this->assertTrue($validator->validateEnum('attribute', 'draft', [StatusEnum::class], $validator)); + $this->assertTrue($validator->validateEnum('attribute', 'stored archive', [StatusEnum::class], $validator)); + } + + /** @test */ + public function it_can_resolve_validator_extension_and_fail_validation() + { + $validator = Validator::make([ + 'attribute' => 5, + ], [ + 'attribute' => 'enum:'.StatusEnum::class, + ]); + + $this->assertFalse($validator->passes()); + + $this->assertFalse($validator->validateEnum('attribute', 5, [StatusEnum::class], $validator)); + $this->assertFalse($validator->validateEnum('attribute', 'drafted', [StatusEnum::class], $validator)); + $this->assertFalse($validator->validateEnum('attribute', 'stored draft', [StatusEnum::class], $validator)); + } } diff --git a/tests/Rules/EnumValueTest.php b/tests/Rules/EnumValueTest.php index 8674837..fc881c4 100644 --- a/tests/Rules/EnumValueTest.php +++ b/tests/Rules/EnumValueTest.php @@ -3,6 +3,7 @@ namespace Spatie\Enum\Laravel\Tests\Rules; use Illuminate\Support\Facades\Lang; +use Illuminate\Support\Facades\Validator; use Spatie\Enum\Laravel\Tests\TestCase; use Spatie\Enum\Laravel\Rules\EnumValue; use Spatie\Enum\Laravel\Tests\Extra\StatusEnum; @@ -45,4 +46,32 @@ public function it_passes_other_to_the_validation_message() $rule->passes('attribute', 'foobar'); $this->assertEquals('draft, published, stored archive', $rule->message()); } + + /** @test */ + public function it_can_resolve_validator_extension_and_pass_validation() + { + $validator = Validator::make([ + 'attribute' => 'stored archive', + ], [ + 'attribute' => 'enum_value:'.StatusEnum::class, + ]); + + $this->assertTrue($validator->passes()); + + $this->assertTrue($validator->validateEnumValue('attribute', 'stored archive', [StatusEnum::class], $validator)); + } + + /** @test */ + public function it_can_resolve_validator_extension_and_fail_validation() + { + $validator = Validator::make([ + 'attribute' => 'stored draft', + ], [ + 'attribute' => 'enum_value:'.StatusEnum::class, + ]); + + $this->assertFalse($validator->passes()); + + $this->assertFalse($validator->validateEnumValue('attribute', 'stored draft', [StatusEnum::class], $validator)); + } }