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));
+ }
}