diff --git a/.gitattributes b/.gitattributes index 65b9655..78cc4c7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,6 +5,6 @@ /.gitattributes export-ignore /.gitignore export-ignore /.gitbook.yaml export-ignore -/.php_cs export-ignore /.styleci.yml export-ignore /.phpunit.xml.dist export-ignore +/pint.json export-ignore diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index e963902..cbf7968 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -13,13 +13,32 @@ jobs: strategy: fail-fast: false matrix: - php: ['8.1', '8.2', '8.3'] - laravel: ['10.*', '11.*'] + php: [8.0, 8.1, 8.2, 8.3] + laravel: [8.*, 9.*, 10.*, 11.*] dependency-version: [prefer-stable] os: [ubuntu-latest] + include: + - laravel: '8.*' + phpunit: '9.*' + - laravel: '9.*' + phpunit: '9.*' + - laravel: '10.*' + phpunit: '10.*' + - laravel: '11.*' + phpunit: '10.*' exclude: - - laravel: 11.* - php: 8.1 + - php: '8.0' + laravel: '10.*' + - php: '8.0' + laravel: '11.*' + - php: '8.2' + laravel: '8.*' + - php: '8.3' + laravel: '8.*' + - php: '8.3' + laravel: '9.*' + - php: '8.1' + laravel: '11.*' name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.dependency-version }} - ${{ matrix.os }} @@ -38,6 +57,7 @@ jobs: - name: Install dependencies run: | composer require "laravel/framework:${{ matrix.laravel }}" --no-interaction --no-update + composer require "phpunit/phpunit:${{ matrix.phpunit }}" --dev --no-interaction --no-update composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction --no-suggest - name: Execute tests diff --git a/.gitignore b/.gitignore index f792fcc..d054a8c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ /vendor/ /composer.lock /coverage/ -/.phpunit.result.cache +/.phpunit.cache /build/ /coverage.clover diff --git a/README.md b/README.md index b7158c6..1f44fe2 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ If you discover any security related issues, please check [SECURITY](https://git | Package | Laravel | PHP | | :------------------ | :---------------------------- | :-------- | -| **v11.13 - v11.13** | `10.* / 11.*` | `^8.1` | +| **v11.13 - v11.13** | `8.* / 9.* / 10.*` / `11.*` | `^8.0` | | **v11.12 - v11.12** | `8.* / 9.* / 10.*` | `^8.0` | | **v11.10 - v11.11** | `8.* / 9.*` | `^8.0` | | **v11.6 - v11.9** | `5.8.* / 6.* / 7.* / 8.*` | `>=7.2` | diff --git a/composer.json b/composer.json index 8f0d4ec..47221a9 100644 --- a/composer.json +++ b/composer.json @@ -30,17 +30,17 @@ "docs": "https://docs.astrotomic.info/laravel-translatable" }, "require": { - "php": "^8.1", - "illuminate/contracts": "^10.0 || ^11.0", - "illuminate/database": "^10.0 || ^11.0", - "illuminate/support": "^10.0 || ^11.0" + "php": "^8.0", + "illuminate/contracts": "^8.0 || ^9.0 || ^10.0 || ^11.0", + "illuminate/database": "^8.0 || ^9.0 || ^10.0 || ^11.0", + "illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0" }, "require-dev": { "laravel/legacy-factories": "^1.0.4", - "laravel/pint": "^1.15", + "laravel/pint": "^1.0", "mockery/mockery": "^1.3.3", - "orchestra/testbench": "^8.0 || ^9.0", - "phpunit/phpunit": "^10.5" + "orchestra/testbench": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "phpunit/phpunit": "^10.0" }, "minimum-stability": "dev", "prefer-stable": true, diff --git a/docs/README.md b/docs/README.md index cd2a43f..7fd44eb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,7 +2,7 @@ [![Latest Version](http://img.shields.io/packagist/v/astrotomic/laravel-translatable.svg?label=Release&style=for-the-badge)](https://packagist.org/packages/astrotomic/laravel-translatable) [![MIT License](https://img.shields.io/github/license/Astrotomic/laravel-translatable.svg?label=License&color=blue&style=for-the-badge)](https://github.com/Astrotomic/laravel-translatable/blob/master/LICENSE) [![Offset Earth](https://img.shields.io/badge/Treeware-%F0%9F%8C%B3-green?style=for-the-badge)](https://plant.treeware.earth/Astrotomic/laravel-translatable) -[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/Astrotomic/laravel-translatable/run-tests?style=flat-square&logoColor=white&logo=github&label=Tests)](https://github.com/Astrotomic/laravel-translatable/actions?query=workflow%3Arun-tests) [![StyleCI](https://styleci.io/repos/192333549/shield)](https://styleci.io/repos/192333549) [![Codecov Coverage](https://img.shields.io/codecov/c/github/Astrotomic/laravel-translatable?logo=codecov&logoColor=white&label=Codecov&style=flat-square)](https://codecov.io/gh/Astrotomic/laravel-translatable) [![Total Downloads](https://img.shields.io/packagist/dt/astrotomic/laravel-translatable.svg?label=Downloads&style=flat-square)](https://packagist.org/packages/astrotomic/laravel-translatable) +[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/Astrotomic/laravel-translatable/phpunit?style=flat-square&logoColor=white&logo=github&label=PHPunit)](https://github.com/Astrotomic/laravel-translatable/actions?query=workflow%3Aphpunit) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/Astrotomic/laravel-translatable/pint?style=flat-square&logoColor=white&logo=github&label=Pint)](https://github.com/Astrotomic/laravel-translatable/actions?query=workflow%3Apint) [![Codecov Coverage](https://img.shields.io/codecov/c/github/Astrotomic/laravel-translatable?logo=codecov&logoColor=white&label=Codecov&style=flat-square)](https://codecov.io/gh/Astrotomic/laravel-translatable) [![Total Downloads](https://img.shields.io/packagist/dt/astrotomic/laravel-translatable.svg?label=Downloads&style=flat-square)](https://packagist.org/packages/astrotomic/laravel-translatable) ![Laravel Translatable](.gitbook/assets/socialcard.png) @@ -75,6 +75,7 @@ echo $post->translate('fr')->title; // Mon premier post | Package | Laravel | PHP | | :------------------ | :---------------------------- | :-------- | +| **v11.13 - v11.13** | `8.* / 9.* / 10.*` / `11.*` | `^8.0` | | **v11.12 - v11.12** | `8.* / 9.* / 10.*` | `^8.0` | | **v11.10 - v11.11** | `8.* / 9.*` | `^8.0` | | **v11.6 - v11.9** | `5.8.* / 6.* / 7.* / 8.*` | `>=7.2` | diff --git a/pint.json b/pint.json new file mode 100644 index 0000000..4373f2d --- /dev/null +++ b/pint.json @@ -0,0 +1,29 @@ +{ + "rules": { + "ordered_class_elements": { + "order": [ + "use_trait", + "constant_public", + "constant_protected", + "constant_private", + "property_public", + "property_protected", + "property_private", + "construct", + "method_public_static", + "method_public", + "method_protected_static", + "method_protected", + "method_private_static", + "method_private", + "destruct", + "magic" + ] + }, + "yoda_style": { + "equal": false, + "identical": false, + "less_and_greater": null + } + } +} diff --git a/src/Translatable/Traits/Relationship.php b/src/Translatable/Traits/Relationship.php index 606368a..22832dc 100644 --- a/src/Translatable/Traits/Relationship.php +++ b/src/Translatable/Traits/Relationship.php @@ -73,15 +73,15 @@ public function translation(): HasOne }); } + public function translations(): HasMany + { + return $this->hasMany($this->getTranslationModelName(), $this->getTranslationRelationKey()); + } + protected function localeOrFallback() { return $this->useFallback() && ! $this->translations()->where($this->getLocaleKey(), $this->locale())->exists() ? $this->getFallbackLocale() : $this->locale(); } - - public function translations(): HasMany - { - return $this->hasMany($this->getTranslationModelName(), $this->getTranslationRelationKey()); - } } diff --git a/tests/Eloquent/Person.php b/tests/Eloquent/Person.php index dfd8fcd..656ae7a 100644 --- a/tests/Eloquent/Person.php +++ b/tests/Eloquent/Person.php @@ -8,8 +8,6 @@ class Person extends Eloquent implements TranslatableContract { - protected $table = 'people'; - use Translatable; /** @@ -42,6 +40,8 @@ class Person extends Eloquent implements TranslatableContract */ public $localeKey; + protected $table = 'people'; + /** * Mutate name attribute into upper-case. * diff --git a/tests/Eloquent/Vegetable.php b/tests/Eloquent/Vegetable.php index b91c336..afd57e0 100644 --- a/tests/Eloquent/Vegetable.php +++ b/tests/Eloquent/Vegetable.php @@ -10,15 +10,15 @@ class Vegetable extends Eloquent implements TranslatableContract { use Translatable; - protected $primaryKey = 'identity'; - public $translationForeignKey = 'vegetable_identity'; public $translatedAttributes = ['name']; - protected $fillable = ['quantity']; - public $localeKey; public $translationModel; + + protected $primaryKey = 'identity'; + + protected $fillable = ['quantity']; } diff --git a/tests/EloquentOverrideTest.php b/tests/EloquentOverrideTest.php index 671c36f..4875bff 100644 --- a/tests/EloquentOverrideTest.php +++ b/tests/EloquentOverrideTest.php @@ -2,11 +2,12 @@ namespace Tests; +use PHPUnit\Framework\Attributes\Test; use Tests\Eloquent\Vegetable; final class EloquentOverrideTest extends TestCase { - /** @test */ + #[Test] public function to_array_returns_translated_attributes(): void { $vegetable = factory(Vegetable::class)->make(['name:en' => 'Peas']); @@ -15,7 +16,7 @@ public function to_array_returns_translated_attributes(): void self::assertEquals('Peas', $vegetable->toArray()['name']); } - /** @test */ + #[Test] public function to_array_wont_break_if_no_translations_exist(): void { $vegetable = factory(Vegetable::class)->make(); @@ -23,7 +24,7 @@ public function to_array_wont_break_if_no_translations_exist(): void self::assertIsArray($vegetable->toArray()); } - /** @test */ + #[Test] public function translated_attributes_can_be_accessed_as_properties(): void { $vegetable = factory(Vegetable::class)->make(['name:en' => 'Peas']); @@ -32,7 +33,7 @@ public function translated_attributes_can_be_accessed_as_properties(): void self::assertEquals('Peas', $vegetable->name); } - /** @test */ + #[Test] public function it_can_hide_translated_attributes(): void { $vegetable = factory(Vegetable::class)->make(['name:en' => 'Peas']); @@ -44,7 +45,7 @@ public function it_can_hide_translated_attributes(): void self::assertFalse(isset($vegetable->toArray()['name'])); } - /** @test */ + #[Test] public function it_finds_custom_primary_keys(): void { $vegetable = new Vegetable(); @@ -52,7 +53,7 @@ public function it_finds_custom_primary_keys(): void self::assertEquals('vegetable_identity', $vegetable->getTranslationRelationKey()); } - /** @test */ + #[Test] public function setAttribute_returns_parent_setAttribute(): void { $vegetable = new Vegetable(); diff --git a/tests/LocalesTest.php b/tests/LocalesTest.php index 74c3365..3d5c5f1 100644 --- a/tests/LocalesTest.php +++ b/tests/LocalesTest.php @@ -4,10 +4,11 @@ use Astrotomic\Translatable\Exception\LocalesNotDefinedException; use Astrotomic\Translatable\Locales; +use PHPUnit\Framework\Attributes\Test; final class LocalesTest extends TestCase { - /** @test */ + #[Test] public function locales_is_declared_as_a_singleton_instance(): void { $singletonHash = spl_object_hash(app(Locales::class)); @@ -16,7 +17,7 @@ public function locales_is_declared_as_a_singleton_instance(): void self::assertEquals($singletonHash, spl_object_hash($this->app->make(Locales::class))); } - /** @test */ + #[Test] public function it_loads_the_locales_from_the_configuration(): void { $this->app['config']->set('translatable.locales', [ @@ -34,7 +35,7 @@ public function it_loads_the_locales_from_the_configuration(): void self::assertEquals(['de', 'en'], $this->app->make('translatable.locales')->all()); } - /** @test */ + #[Test] public function it_throws_an_exception_if_there_are_no_locales(): void { $this->expectException(LocalesNotDefinedException::class); @@ -43,7 +44,7 @@ public function it_throws_an_exception_if_there_are_no_locales(): void $this->app->make('translatable.locales')->load(); } - /** @test */ + #[Test] public function all_language_locales_are_loaded_from_the_configuration(): void { $this->app['config']->set('translatable.locales', [ @@ -58,7 +59,7 @@ public function all_language_locales_are_loaded_from_the_configuration(): void self::assertEquals(['el', 'en', 'fr', 'de', 'id'], $this->app->make('translatable.locales')->all()); } - /** @test */ + #[Test] public function it_loads_locales_and_countries(): void { $this->app['config']->set('translatable.locales', [ @@ -76,7 +77,7 @@ public function it_loads_locales_and_countries(): void self::assertEquals(['en', 'en-GB', 'en-US', 'de', 'de-DE', 'de-CH'], $this->app->make('translatable.locales')->all()); } - /** @test */ + #[Test] public function can_return_locales_as_array(): void { $this->app['config']->set('translatable.locales', [ @@ -91,7 +92,7 @@ public function can_return_locales_as_array(): void self::assertEquals(['el', 'en', 'fr', 'de', 'id'], $this->app->make('translatable.locales')->toArray()); } - /** @test */ + #[Test] public function can_retrieve_current_configuration(): void { $this->app['config']->set('translatable.locale', 'de'); @@ -99,7 +100,7 @@ public function can_retrieve_current_configuration(): void self::assertEquals('de', $this->app->make('translatable.locales')->current()); } - /** @test */ + #[Test] public function current_can_return_the_translator_locale_if_configuration_is_empty(): void { $this->app['config']->set('translatable.locale', null); @@ -108,7 +109,7 @@ public function current_can_return_the_translator_locale_if_configuration_is_emp self::assertEquals('en', $this->app->make('translatable.locales')->current()); } - /** @test */ + #[Test] public function it_checks_if_it_has_a_locale(): void { $this->app['config']->set('translatable.locales', [ @@ -124,7 +125,7 @@ public function it_checks_if_it_has_a_locale(): void self::assertFalse($this->app->make('translatable.locales')->has('jp')); } - /** @test */ + #[Test] public function can_access_as_an_array(): void { $this->app['config']->set('translatable.locales', [ @@ -140,7 +141,7 @@ public function can_access_as_an_array(): void self::assertFalse(isset($this->app->make('translatable.locales')['jp'])); } - /** @test */ + #[Test] public function can_retrieve_a_specific_locale_by_get(): void { $this->app['config']->set('translatable.locales', [ @@ -156,7 +157,7 @@ public function can_retrieve_a_specific_locale_by_get(): void self::assertNull($this->app->make('translatable.locales')->get('jp')); } - /** @test */ + #[Test] public function missing_locale_returns_null_by_get(): void { $this->app['config']->set('translatable.locales', [ @@ -172,7 +173,7 @@ public function missing_locale_returns_null_by_get(): void self::assertNull($this->app->make('translatable.locales')['jp']); } - /** @test */ + #[Test] public function it_can_add_a_locale(): void { $this->app['config']->set('translatable.locales', [ @@ -186,7 +187,7 @@ public function it_can_add_a_locale(): void self::assertTrue($this->app->make('translatable.locales')->has('en')); } - /** @test */ + #[Test] public function locale_can_be_added_by_accessing_as_an_array(): void { $this->app['config']->set('translatable.locales', [ @@ -200,7 +201,7 @@ public function locale_can_be_added_by_accessing_as_an_array(): void self::assertTrue($this->app->make('translatable.locales')->has('en')); } - /** @test */ + #[Test] public function locale_country_can_be_added_by_accessing_as_an_array(): void { $this->app['config']->set('translatable.locales', [ @@ -214,7 +215,7 @@ public function locale_country_can_be_added_by_accessing_as_an_array(): void self::assertTrue($this->app->make('translatable.locales')->has('de-AT')); } - /** @test */ + #[Test] public function can_forget_a_locale(): void { $this->app['config']->set('translatable.locales', [ @@ -229,7 +230,7 @@ public function can_forget_a_locale(): void self::assertFalse($this->app->make('translatable.locales')->has('en')); } - /** @test */ + #[Test] public function can_forget_a_locale_using_unset_as_an_array(): void { $this->app['config']->set('translatable.locales', [ @@ -244,7 +245,7 @@ public function can_forget_a_locale_using_unset_as_an_array(): void self::assertFalse($this->app->make('translatable.locales')->has('en')); } - /** @test */ + #[Test] public function can_retrieve_the_locale_country_separator(): void { $this->app['config']->set('translatable.locale_separator', '_'); @@ -252,7 +253,7 @@ public function can_retrieve_the_locale_country_separator(): void self::assertEquals('_', $this->app->make('translatable.locales')->getLocaleSeparator()); } - /** @test */ + #[Test] public function can_set_a_default_locale_country_separator_if_configuration_is_missing(): void { $this->app['config']->set('translatable.locale_separator', null); @@ -260,20 +261,20 @@ public function can_set_a_default_locale_country_separator_if_configuration_is_m self::assertEquals('-', $this->app->make('translatable.locales')->getLocaleSeparator()); } - /** @test */ + #[Test] public function can_get_a_country_locale_formatted_with_separator(): void { self::assertEquals('de-AT', $this->app->make('translatable.locales')->getCountryLocale('de', 'AT')); } - /** @test */ + #[Test] public function can_determine_if_a_locale_is_country_based(): void { self::assertTrue($this->app->make('translatable.locales')->isLocaleCountryBased('de-AT')); self::assertFalse($this->app->make('translatable.locales')->isLocaleCountryBased('de')); } - /** @test */ + #[Test] public function can_get_a_locale_from_the_country_locale(): void { self::assertEquals('de', $this->app->make('translatable.locales')->getLanguageFromCountryBasedLocale('de-AT')); diff --git a/tests/ScopesTest.php b/tests/ScopesTest.php index 66e300d..98f51a9 100644 --- a/tests/ScopesTest.php +++ b/tests/ScopesTest.php @@ -2,12 +2,13 @@ namespace Tests; +use PHPUnit\Framework\Attributes\Test; use Tests\Eloquent\Country; use Tests\Eloquent\Vegetable; final class ScopesTest extends TestCase { - /** @test */ + #[Test] public function translated_in_scope_returns_only_translated_records_for_this_locale(): void { factory(Country::class)->create(['code' => 'ca', 'name:ca' => 'Català']); @@ -16,7 +17,7 @@ public function translated_in_scope_returns_only_translated_records_for_this_loc self::assertEquals(1, Country::translatedIn('fr')->count()); } - /** @test */ + #[Test] public function translated_in_scope_works_with_default_locale(): void { app()->setLocale('de'); @@ -27,7 +28,7 @@ public function translated_in_scope_works_with_default_locale(): void self::assertEquals('Griechenland', Country::translatedIn()->first()->name); } - /** @test */ + #[Test] public function not_translated_in_scope_returns_only_not_translated_records_for_this_locale(): void { factory(Country::class)->create(['code' => 'ca', 'name:ca' => 'Català']); @@ -41,7 +42,7 @@ public function not_translated_in_scope_returns_only_not_translated_records_for_ self::assertFalse($notTranslated->last()->hasTranslation('en')); } - /** @test */ + #[Test] public function not_translated_in_scope_works_with_default_locale(): void { app()->setLocale('en'); @@ -54,7 +55,7 @@ public function not_translated_in_scope_works_with_default_locale(): void self::assertFalse($notTranslated->first()->hasTranslation('en')); } - /** @test */ + #[Test] public function translated_scope_returns_records_with_at_least_one_translation(): void { factory(Country::class)->create(['code' => 'ca']); @@ -64,7 +65,7 @@ public function translated_scope_returns_records_with_at_least_one_translation() self::assertEquals('English', Country::with('translations')->translated()->first()->{'name:en'}); } - /** @test */ + #[Test] public function lists_of_translated_fields(): void { app()->setLocale('de'); @@ -80,7 +81,7 @@ public function lists_of_translated_fields(): void self::assertEquals('Griechenland', $countries->first()->name); } - /** @test */ + #[Test] public function lists_of_translated_fields_with_fallback(): void { app('config')->set('translatable.fallback_locale', 'en'); @@ -102,7 +103,7 @@ public function lists_of_translated_fields_with_fallback(): void self::assertEquals('France', $countries->last()->name); } - /** @test */ + #[Test] public function lists_of_translated_fields_disable_autoload_translations(): void { app()->setLocale('de'); @@ -116,7 +117,7 @@ public function lists_of_translated_fields_disable_autoload_translations(): void Country::defaultAutoloadTranslations(); } - /** @test */ + #[Test] public function lists_of_translated_fields_enable_autoload_translations(): void { app()->setLocale('de'); @@ -139,7 +140,7 @@ public function lists_of_translated_fields_enable_autoload_translations(): void Country::defaultAutoloadTranslations(); } - /** @test */ + #[Test] public function scope_withTranslation_without_fallback(): void { factory(Country::class)->create(['code' => 'el', 'name:en' => 'Greece']); @@ -150,7 +151,7 @@ public function scope_withTranslation_without_fallback(): void self::assertSame('Greece', $result->translations->first()->name); } - /** @test */ + #[Test] public function scope_withTranslation_with_fallback(): void { app('config')->set('translatable.fallback_locale', 'de'); @@ -164,7 +165,7 @@ public function scope_withTranslation_with_fallback(): void self::assertEquals('Griechenland', $result->translations->where('locale', 'de')->first()->name); } - /** @test */ + #[Test] public function scope_withTranslation_with_country_based_fallback(): void { app('config')->set('translatable.fallback_locale', 'en'); @@ -196,7 +197,7 @@ public function scope_withTranslation_with_country_based_fallback(): void self::assertEquals('Zucchini', $translations[2]->name); } - /** @test */ + #[Test] public function whereTranslation_filters_by_translation(): void { factory(Country::class)->create(['code' => 'gr', 'name:en' => 'Greece']); @@ -204,7 +205,7 @@ public function whereTranslation_filters_by_translation(): void self::assertSame('gr', Country::whereTranslation('name', 'Greece')->first()->code); } - /** @test */ + #[Test] public function orWhereTranslation_filters_by_translation(): void { factory(Country::class)->create(['code' => 'gr', 'name:en' => 'Greece']); @@ -217,7 +218,7 @@ public function orWhereTranslation_filters_by_translation(): void self::assertSame('France', $result->last()->name); } - /** @test */ + #[Test] public function whereTranslation_filters_by_translation_and_locale(): void { factory(Country::class)->create(['code' => 'gr', 'name:de' => 'Griechenland']); @@ -230,7 +231,7 @@ public function whereTranslation_filters_by_translation_and_locale(): void self::assertSame('gr', $result->first()->code); } - /** @test */ + #[Test] public function whereTranslationLike_filters_by_translation(): void { factory(Country::class)->create(['code' => 'gr', 'name:en' => 'Greece']); @@ -238,7 +239,7 @@ public function whereTranslationLike_filters_by_translation(): void self::assertSame('gr', Country::whereTranslationLike('name', '%Greec%')->first()->code); } - /** @test */ + #[Test] public function orWhereTranslationLike_filters_by_translation(): void { factory(Country::class)->create(['code' => 'gr', 'name:en' => 'Greece']); @@ -251,7 +252,7 @@ public function orWhereTranslationLike_filters_by_translation(): void self::assertSame('France', $result->last()->name); } - /** @test */ + #[Test] public function whereTranslationLike_filters_by_translation_and_locale(): void { factory(Country::class)->create(['code' => 'gr', 'name:de' => 'Griechenland']); @@ -264,7 +265,7 @@ public function whereTranslationLike_filters_by_translation_and_locale(): void self::assertEquals('gr', $result->first()->code); } - /** @test */ + #[Test] public function orderByTranslation_sorts_by_key_asc(): void { factory(Country::class)->create(['code' => 'el', 'name' => 'Greece']); @@ -273,7 +274,7 @@ public function orderByTranslation_sorts_by_key_asc(): void self::assertEquals('fr', Country::orderByTranslation('name')->get()->first()->code); } - /** @test */ + #[Test] public function orderByTranslation_sorts_by_key_desc(): void { factory(Country::class)->create(['code' => 'el', 'name' => 'Greece']); @@ -282,7 +283,7 @@ public function orderByTranslation_sorts_by_key_desc(): void self::assertEquals('el', Country::orderByTranslation('name', 'desc')->get()->first()->code); } - /** @test */ + #[Test] public function test_orderByTranslation_sorts_by_key_asc_even_if_locale_is_missing(): void { factory(Vegetable::class)->create(['en' => ['name' => 'Potatoes'], 'fr' => ['name' => 'Pommes de Terre']]); diff --git a/tests/TranslatableTest.php b/tests/TranslatableTest.php index 8afb940..ed55ec5 100644 --- a/tests/TranslatableTest.php +++ b/tests/TranslatableTest.php @@ -3,20 +3,21 @@ namespace Tests; use Astrotomic\Translatable\Locales; +use Illuminate\Database\Eloquent\MassAssignmentException; +use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\DB; +use PHPUnit\Framework\Attributes\Test; use Tests\Eloquent\Country; use Tests\Eloquent\CountryStrict; use Tests\Eloquent\CountryTranslation; use Tests\Eloquent\Person; use Tests\Eloquent\Vegetable; use Tests\Eloquent\VegetableTranslation; -use Illuminate\Database\Eloquent\MassAssignmentException; -use Illuminate\Database\Eloquent\ModelNotFoundException; -use Illuminate\Support\Facades\App; -use Illuminate\Support\Facades\DB; final class TranslatableTest extends TestCase { - /** @test */ + #[Test] public function it_finds_the_default_translation_class(): void { self::assertEquals( @@ -25,7 +26,7 @@ public function it_finds_the_default_translation_class(): void ); } - /** @test */ + #[Test] public function it_finds_the_translation_class_with_namespace_set(): void { $this->app->make('config')->set('translatable.translation_model_namespace', 'App\Models\Translations'); @@ -36,7 +37,7 @@ public function it_finds_the_translation_class_with_namespace_set(): void ); } - /** @test */ + #[Test] public function it_finds_the_translation_class_with_suffix_set(): void { $this->app->make('config')->set('translatable.translation_suffix', 'Trans'); @@ -47,7 +48,7 @@ public function it_finds_the_translation_class_with_suffix_set(): void ); } - /** @test */ + #[Test] public function it_returns_custom_TranslationModelName(): void { $vegetable = new Vegetable(); @@ -64,7 +65,7 @@ public function it_returns_custom_TranslationModelName(): void ); } - /** @test */ + #[Test] public function it_returns_relation_key(): void { $vegetable = new Vegetable(); @@ -74,7 +75,7 @@ public function it_returns_relation_key(): void self::assertEquals('my_awesome_key', $vegetable->getRelationKey()); } - /** @test */ + #[Test] public function it_returns_the_translation(): void { $vegetable = factory(Vegetable::class)->create(['name:el' => 'Αρακάς', 'name:en' => 'Peas']); @@ -90,7 +91,7 @@ public function it_returns_the_translation(): void self::assertEquals('Peas', $vegetable->translate()->name); } - /** @test */ + #[Test] public function it_returns_the_translation_with_accessor(): void { $vegetable = factory(Vegetable::class)->create(['name:el' => 'Αρακάς', 'name:en' => 'Peas']); @@ -99,7 +100,7 @@ public function it_returns_the_translation_with_accessor(): void self::assertEquals('Peas', $vegetable->{'name:en'}); } - /** @test */ + #[Test] public function it_returns_null_when_the_locale_doesnt_exist(): void { $vegetable = factory(Vegetable::class)->create(['name:el' => 'Αρακάς']); @@ -107,7 +108,7 @@ public function it_returns_null_when_the_locale_doesnt_exist(): void self::assertSame(null, $vegetable->{'name:unknown-locale'}); } - /** @test */ + #[Test] public function it_saves_translations(): void { $vegetable = factory(Vegetable::class)->create(['name:el' => 'Αρακάς', 'name:en' => 'Peas']); @@ -121,7 +122,7 @@ public function it_saves_translations(): void self::assertEquals('Pea', $vegetable->name); } - /** @test */ + #[Test] public function it_saves_translations_with_mutator(): void { $vegetable = factory(Vegetable::class)->create(['name:el' => 'Αρακάς', 'name:en' => 'Peas']); @@ -138,7 +139,7 @@ public function it_saves_translations_with_mutator(): void self::assertEquals('Μπιζέλι', $vegetable->translate()->name); } - /** @test */ + #[Test] public function it_does_not_lazy_load_translations_when_updating_non_translated_attributes(): void { DB::enableQueryLog(); @@ -161,7 +162,7 @@ public function it_does_not_lazy_load_translations_when_updating_non_translated_ DB::disableQueryLog(); } - /** @test */ + #[Test] public function it_uses_default_locale_to_return_translations(): void { $vegetable = factory(Vegetable::class)->create(['name:el' => 'Αρακάς']); @@ -176,7 +177,7 @@ public function it_uses_default_locale_to_return_translations(): void self::assertEquals('Μπιζέλι', $vegetable->translate('el')->name); } - /** @test */ + #[Test] public function it_creates_translations_using_the_shortcut(): void { $vegetable = factory(Vegetable::class)->create(); @@ -193,7 +194,7 @@ public function it_creates_translations_using_the_shortcut(): void ]); } - /** @test */ + #[Test] public function it_creates_translations_using_mass_assignment(): void { $vegetable = Vegetable::create([ @@ -205,7 +206,7 @@ public function it_creates_translations_using_mass_assignment(): void self::assertEquals('Peas', $vegetable->name); } - /** @test */ + #[Test] public function it_creates_translations_using_mass_assignment_and_locales(): void { $vegetable = Vegetable::create([ @@ -223,7 +224,7 @@ public function it_creates_translations_using_mass_assignment_and_locales(): voi self::assertEquals('Pois', $vegetable->translate('fr')->name); } - /** @test */ + #[Test] public function it_skips_mass_assignment_if_attributes_non_fillable(): void { $this->expectException(MassAssignmentException::class); @@ -238,7 +239,7 @@ public function it_skips_mass_assignment_if_attributes_non_fillable(): void self::assertNull($country->translate('fr')); } - /** @test */ + #[Test] public function it_returns_if_object_has_translation(): void { $vegetable = factory(Vegetable::class)->create(['name:en' => 'Peas']); @@ -247,7 +248,7 @@ public function it_returns_if_object_has_translation(): void self::assertFalse($vegetable->hasTranslation('some-code')); } - /** @test */ + #[Test] public function it_returns_default_translation(): void { $this->app->make('config')->set('translatable.fallback_locale', 'de'); @@ -262,7 +263,7 @@ public function it_returns_default_translation(): void self::assertSame('Erbsen', $vegetable->translateOrDefault()->name); } - /** @test */ + #[Test] public function fallback_option_in_config_overrides_models_fallback_option(): void { $this->app->make('config')->set('translatable.fallback_locale', 'de'); @@ -280,7 +281,7 @@ public function fallback_option_in_config_overrides_models_fallback_option(): vo self::assertNull($vegetable->getTranslation('ch')); } - /** @test */ + #[Test] public function configuration_defines_if_fallback_is_used(): void { $this->app->make('config')->set('translatable.fallback_locale', 'de'); @@ -291,7 +292,7 @@ public function configuration_defines_if_fallback_is_used(): void self::assertEquals('de', $vegetable->getTranslation('ch')->locale); } - /** @test */ + #[Test] public function useTranslationFallback_overrides_configuration(): void { $this->app->make('config')->set('translatable.fallback_locale', 'de'); @@ -303,7 +304,7 @@ public function useTranslationFallback_overrides_configuration(): void self::assertNull($vegetable->getTranslation('ch')); } - /** @test */ + #[Test] public function it_returns_null_if_fallback_is_not_defined(): void { $this->app->make('config')->set('translatable.fallback_locale', 'ch'); @@ -313,7 +314,7 @@ public function it_returns_null_if_fallback_is_not_defined(): void self::assertNull($vegetable->getTranslation('pl', true)); } - /** @test */ + #[Test] public function it_fills_a_non_default_language_with_fallback_set(): void { $this->app->make('config')->set('translatable.fallback_locale', 'en'); @@ -328,7 +329,7 @@ public function it_fills_a_non_default_language_with_fallback_set(): void self::assertEquals('Peas', $vegetable->translate('en')->name); } - /** @test */ + #[Test] public function it_creates_a_new_translation(): void { $this->app->make('config')->set('translatable.fallback_locale', 'en'); @@ -340,7 +341,7 @@ public function it_creates_a_new_translation(): void self::assertEquals('Peas', $vegetable->translate('en')->name); } - /** @test */ + #[Test] public function the_locale_key_is_locale_by_default(): void { $vegetable = new Vegetable(); @@ -348,7 +349,7 @@ public function the_locale_key_is_locale_by_default(): void self::assertEquals('locale', $vegetable->getLocaleKey()); } - /** @test */ + #[Test] public function the_locale_key_can_be_overridden_in_configuration(): void { $this->app->make('config')->set('translatable.locale_key', 'language_id'); @@ -357,7 +358,7 @@ public function the_locale_key_can_be_overridden_in_configuration(): void self::assertEquals('language_id', $vegetable->getLocaleKey()); } - /** @test */ + #[Test] public function the_locale_key_can_be_customized_per_model(): void { $vegetable = new Vegetable(); @@ -379,13 +380,13 @@ public function test_the_translation_model_can_be_customized(): void CountryStrict::reguard(); } - /** @test */ + #[Test] public function it_reads_the_configuration(): void { self::assertEquals('Translation', $this->app->make('config')->get('translatable.translation_suffix')); } - /** @test */ + #[Test] public function getting_translation_does_not_create_translation(): void { $vegetable = factory(Vegetable::class)->create(); @@ -393,7 +394,7 @@ public function getting_translation_does_not_create_translation(): void self::assertNull($vegetable->getTranslation('en', false)); } - /** @test */ + #[Test] public function getting_translated_field_does_not_create_translation(): void { $this->app->setLocale('en'); @@ -402,7 +403,7 @@ public function getting_translated_field_does_not_create_translation(): void self::assertNull($vegetable->getTranslation('en')); } - /** @test */ + #[Test] public function it_has_methods_that_return_always_a_translation(): void { $vegetable = factory(Vegetable::class)->create(); @@ -412,7 +413,7 @@ public function it_has_methods_that_return_always_a_translation(): void self::assertEquals('xyz', $vegetable->translateOrNew()->locale); } - /** @test */ + #[Test] public function it_throws_an_exception_if_translation_does_not_exist(): void { $this->expectException(ModelNotFoundException::class); @@ -426,7 +427,7 @@ public function it_throws_an_exception_if_translation_does_not_exist(): void $vegetable->translateOrFail('xyz'); } - /** @test */ + #[Test] public function it_returns_if_attribute_is_translated(): void { $vegetable = new Vegetable(); @@ -435,7 +436,7 @@ public function it_returns_if_attribute_is_translated(): void self::assertFalse($vegetable->isTranslationAttribute('some-field')); } - /** @test */ + #[Test] public function config_overrides_apps_locale(): void { $veegtable = factory(Vegetable::class)->create(['name:de' => 'Erbsen']); @@ -444,7 +445,7 @@ public function config_overrides_apps_locale(): void self::assertEquals('Erbsen', $veegtable->name); } - /** @test */ + #[Test] public function locales_as_array_keys_are_properly_detected(): void { $this->app->config->set('translatable.locales', ['en' => ['US', 'GB']]); @@ -460,7 +461,7 @@ public function locales_as_array_keys_are_properly_detected(): void self::assertEquals('US Peas', $vegetable->getTranslation('en-US')->name); } - /** @test */ + #[Test] public function locale_separator_can_be_configured(): void { $this->app->make('config')->set('translatable.locales', ['en' => ['GB']]); @@ -473,7 +474,7 @@ public function locale_separator_can_be_configured(): void self::assertEquals('Peas', $vegetable->getTranslation('en_GB')->name); } - /** @test */ + #[Test] public function fallback_for_country_based_locales(): void { $this->app->make('config')->set('translatable.use_fallback', true); @@ -491,7 +492,7 @@ public function fallback_for_country_based_locales(): void self::assertEquals('French fries', $vegetable->getTranslation('en-US')->name); } - /** @test */ + #[Test] public function fallback_for_country_based_locales_with_no_base_locale(): void { $this->app->make('config')->set('translatable.use_fallback', true); @@ -508,7 +509,7 @@ public function fallback_for_country_based_locales_with_no_base_locale(): void self::assertEquals('Chips', $vegetable->getTranslation('pt-BR')->name); } - /** @test */ + #[Test] public function to_array_and_fallback_with_country_based_locales_enabled(): void { $this->app->make('config')->set('translatable.locale', 'en-GB'); @@ -523,7 +524,7 @@ public function to_array_and_fallback_with_country_based_locales_enabled(): void self::assertEquals('Frites', $vegetable['name']); } - /** @test */ + #[Test] public function it_skips_translations_in_to_array_when_config_is_set(): void { $this->app->make('config')->set('translatable.to_array_always_loads_translations', false); @@ -534,7 +535,7 @@ public function it_skips_translations_in_to_array_when_config_is_set(): void self::assertFalse(isset($vegetable['name'])); } - /** @test */ + #[Test] public function it_returns_translations_in_to_array_when_config_is_set_but_translations_are_loaded(): void { $this->app->make('config')->set('translatable.to_array_always_loads_translations', false); @@ -545,7 +546,7 @@ public function it_returns_translations_in_to_array_when_config_is_set_but_trans self::assertTrue(isset($vegetable['name'])); } - /** @test */ + #[Test] public function it_should_mutate_the_translated_attribute_if_a_mutator_is_set_on_model(): void { $person = new Person(['name' => 'john doe']); @@ -554,7 +555,7 @@ public function it_should_mutate_the_translated_attribute_if_a_mutator_is_set_on self::assertEquals('John Doe', $person->name); } - /** @test */ + #[Test] public function it_deletes_all_translations(): void { $vegetable = factory(Vegetable::class)->create(['name:es' => 'Guisantes', 'name:en' => 'Peas']); @@ -566,7 +567,7 @@ public function it_deletes_all_translations(): void self::assertEquals(0, count($vegetable->translations)); } - /** @test */ + #[Test] public function it_deletes_translations_for_given_locales(): void { $vegetable = factory(Vegetable::class)->create(['name:es' => 'Guisantes', 'name:en' => 'Peas']); @@ -578,7 +579,7 @@ public function it_deletes_translations_for_given_locales(): void self::assertEquals(1, count($vegetable->translations)); } - /** @test */ + #[Test] public function passing_an_empty_array_should_not_delete_translations(): void { $vegetable = factory(Vegetable::class)->create(['name:es' => 'Guisantes', 'name:en' => 'Peas']); @@ -590,7 +591,7 @@ public function passing_an_empty_array_should_not_delete_translations(): void self::assertEquals(2, count($vegetable->translations)); } - /** @test */ + #[Test] public function fill_with_translation_key(): void { $vegetable = new Vegetable(); @@ -607,7 +608,7 @@ public function fill_with_translation_key(): void self::assertEquals('Erbsen', $vegetable->translate('de')->name); } - /** @test */ + #[Test] public function it_uses_the_default_locale_from_the_model(): void { $vegetable = new Vegetable(); @@ -629,7 +630,7 @@ public function it_uses_the_default_locale_from_the_model(): void self::assertEquals('Pois', $vegetable->name); } - /** @test */ + #[Test] public function replicate_entity(): void { $vegetable = new Vegetable(); @@ -658,7 +659,7 @@ public function replicate_entity(): void self::assertEquals($replicated->translate('de')->vegetable_identity, $replicated->identity); } - /** @test */ + #[Test] public function can_get_translations_as_array(): void { $vegetable = factory(Vegetable::class)->create([ @@ -674,7 +675,7 @@ public function can_get_translations_as_array(): void ], $vegetable->getTranslationsArray()); } - /** @test */ + #[Test] public function fill_will_ignore_unkown_locales(): void { config(['translatable.locales' => ['en']]); @@ -694,7 +695,7 @@ public function fill_will_ignore_unkown_locales(): void self::assertDatabaseMissing('vegetable_translations', ['locale' => 'ua']); } - /** @test */ + #[Test] public function fill_will_ignore_unkown_locales_with_translations(): void { config(['translatable.locales' => ['en']]); @@ -715,7 +716,7 @@ public function fill_will_ignore_unkown_locales_with_translations(): void self::assertDatabaseMissing('vegetable_translations', ['locale' => 'ua']); } - /** @test */ + #[Test] public function it_uses_fallback_locale_if_default_is_empty(): void { $this->app->make('config')->set('translatable.use_fallback', true); @@ -733,7 +734,7 @@ public function it_uses_fallback_locale_if_default_is_empty(): void self::assertEquals('Peas', $vegetable->name); } - /** @test */ + #[Test] public function it_uses_value_when_fallback_is_not_available(): void { $this->app->make('config')->set('translatable.fallback_locale', 'it'); @@ -753,7 +754,7 @@ public function it_uses_value_when_fallback_is_not_available(): void self::assertEquals('Erbsen', $vegetable->getAttribute('name')); } - /** @test */ + #[Test] public function empty_translated_attribute(): void { $this->app->setLocale('invalid'); @@ -762,7 +763,7 @@ public function empty_translated_attribute(): void self::assertNull($vegetable->name); } - /** @test */ + #[Test] public function numeric_translated_attribute(): void { $this->app->make('config')->set('translatable.fallback_locale', 'de'); @@ -798,7 +799,7 @@ protected function isEmptyTranslatableAttribute(string $key, $value): bool self::assertSame('1', $vegetable->name); } - /** @test */ + #[Test] public function translation_relation(): void { $this->app->make('config')->set('translatable.fallback_locale', 'fr'); @@ -814,7 +815,7 @@ public function translation_relation(): void self::assertEquals('en', $peas->translation->locale); } - /** @test */ + #[Test] public function translation_relation_can_use_fallback_locale(): void { $this->app->make('config')->set('translatable.fallback_locale', 'fr'); @@ -827,7 +828,7 @@ public function translation_relation_can_use_fallback_locale(): void self::assertEquals('fr', $peas->translation->locale); } - /** @test */ + #[Test] public function translation_relation_returns_null_if_no_available_locale_was_found(): void { $this->app->make('config')->set('translatable.fallback_locale', 'xyz'); @@ -839,7 +840,7 @@ public function translation_relation_returns_null_if_no_available_locale_was_fou self::assertNull($peas->translation); } - /** @test */ + #[Test] public function can_fill_conflicting_attribute_locale(): void { $this->app->make('config')->set('translatable.locales', ['en', 'id']); @@ -866,7 +867,7 @@ public function can_fill_conflicting_attribute_locale(): void self::assertEquals('en:my country', $country->getTranslation('en', false)->name); } - /** @test */ + #[Test] public function it_returns_first_existing_translation_as_fallback(): void { /** @var Locales $helper */ @@ -943,7 +944,7 @@ public function it_returns_first_existing_translation_as_fallback(): void self::assertEquals($helper->getCountryLocale('de', 'DE'), $translation->locale); } - /** @test */ + #[Test] public function it_uses_translation_relation_if_locale_matches(): void { $this->app->make('config')->set('translatable.use_fallback', false); @@ -963,7 +964,7 @@ public function it_uses_translation_relation_if_locale_matches(): void self::assertFalse($country->relationLoaded('translations')); } - /** @test */ + #[Test] public function it_uses_translations_relation_if_locale_does_not_match(): void { $this->app->make('config')->set('translatable.use_fallback', false); @@ -984,7 +985,7 @@ public function it_uses_translations_relation_if_locale_does_not_match(): void self::assertTrue($country->relationLoaded('translations')); } - /** @test */ + #[Test] public function it_does_not_load_translation_relation_if_not_already_loaded(): void { $this->app->make('config')->set('translatable.use_fallback', false); @@ -1003,8 +1004,8 @@ public function it_does_not_load_translation_relation_if_not_already_loaded(): v self::assertTrue($country->relationLoaded('translations')); } - /** @test */ - public function it_does_not_delete_translations_on_cascade_by_default() + #[Test] + public function it_does_not_delete_translations_on_cascade_by_default(): void { $vegetable = factory(Vegetable::class)->create(['name:en' => 'Peas']); @@ -1017,8 +1018,8 @@ public function it_does_not_delete_translations_on_cascade_by_default() $this->assertDatabaseHas('vegetable_translations', ['vegetable_identity' => $vegetable->identity]); } - /** @test */ - public function it_deletes_translations_on_cascade() + #[Test] + public function it_deletes_translations_on_cascade(): void { Vegetable::enableDeleteTranslationsCascade(); $vegetable = factory(Vegetable::class)->create(['name:en' => 'Peas']); @@ -1032,8 +1033,8 @@ public function it_deletes_translations_on_cascade() $this->assertDatabaseMissing('vegetable_translations', ['vegetable_identity' => $vegetable->identity]); } - /** @test */ - public function it_does_not_delete_on_cascade_after_retrieving_a_model() + #[Test] + public function it_does_not_delete_on_cascade_after_retrieving_a_model(): void { Vegetable::enableDeleteTranslationsCascade(); $vegetable = factory(Vegetable::class)->create(['name:en' => 'Peas']); @@ -1048,8 +1049,8 @@ public function it_does_not_delete_on_cascade_after_retrieving_a_model() $this->assertDatabaseHas('vegetable_translations', ['vegetable_identity' => $vegetable->identity]); } - /** @test */ - public function it_can_restore_translations_in_a_transaction() + #[Test] + public function it_can_restore_translations_in_a_transaction(): void { Vegetable::enableDeleteTranslationsCascade(); $vegetable = factory(Vegetable::class)->create(['name:en' => 'Peas']); diff --git a/tests/ValidationTest.php b/tests/ValidationTest.php index 1ffc03f..0085fa5 100644 --- a/tests/ValidationTest.php +++ b/tests/ValidationTest.php @@ -7,10 +7,11 @@ use Illuminate\Validation\Rule; use Illuminate\Validation\Rules\RequiredIf; use InvalidArgumentException; +use PHPUnit\Framework\Attributes\Test; final class ValidationTest extends TestCase { - /** @test */ + #[Test] public function it_does_not_touch_untranslated_keys(): void { $rules = [ @@ -24,7 +25,7 @@ public function it_does_not_touch_untranslated_keys(): void self::assertEquals($rules, RuleFactory::make($rules)); } - /** @test */ + #[Test] public function format_array_it_replaces_single_key(): void { $rules = [ @@ -41,7 +42,7 @@ public function format_array_it_replaces_single_key(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_ARRAY)); } - /** @test */ + #[Test] public function format_array_it_replaces_sub_key(): void { $rules = [ @@ -58,7 +59,7 @@ public function format_array_it_replaces_sub_key(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_ARRAY)); } - /** @test */ + #[Test] public function format_array_it_replaces_middle_key(): void { $rules = [ @@ -75,7 +76,7 @@ public function format_array_it_replaces_middle_key(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_ARRAY)); } - /** @test */ + #[Test] public function format_array_it_replaces_middle_key_with_custom_prefix(): void { $rules = [ @@ -92,7 +93,7 @@ public function format_array_it_replaces_middle_key_with_custom_prefix(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_ARRAY, '{')); } - /** @test */ + #[Test] public function format_array_it_replaces_middle_key_with_custom_suffix(): void { $rules = [ @@ -109,7 +110,7 @@ public function format_array_it_replaces_middle_key_with_custom_suffix(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_ARRAY, '%', '}')); } - /** @test */ + #[Test] public function format_array_it_replaces_middle_key_with_custom_delimiters(): void { $rules = [ @@ -126,7 +127,7 @@ public function format_array_it_replaces_middle_key_with_custom_delimiters(): vo ], RuleFactory::make($rules, RuleFactory::FORMAT_ARRAY, '{', '}')); } - /** @test */ + #[Test] public function format_array_it_replaces_middle_key_with_custom_regex_delimiters(): void { $rules = [ @@ -143,7 +144,7 @@ public function format_array_it_replaces_middle_key_with_custom_regex_delimiters ], RuleFactory::make($rules, RuleFactory::FORMAT_ARRAY, '$', '$')); } - /** @test */ + #[Test] public function format_array_it_uses_config_as_default(): void { app('config')->set('translatable.rule_factory', [ @@ -168,7 +169,7 @@ public function format_array_it_uses_config_as_default(): void ], RuleFactory::make($rules)); } - /** @test */ + #[Test] public function format_key_it_replaces_single_key(): void { $rules = [ @@ -185,7 +186,7 @@ public function format_key_it_replaces_single_key(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_KEY)); } - /** @test */ + #[Test] public function format_key_it_replaces_sub_key(): void { $rules = [ @@ -202,7 +203,7 @@ public function format_key_it_replaces_sub_key(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_KEY)); } - /** @test */ + #[Test] public function format_key_it_replaces_middle_key(): void { $rules = [ @@ -219,7 +220,7 @@ public function format_key_it_replaces_middle_key(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_KEY)); } - /** @test */ + #[Test] public function format_key_it_uses_config_as_default(): void { app('config')->set('translatable.rule_factory', [ @@ -244,7 +245,7 @@ public function format_key_it_uses_config_as_default(): void ], RuleFactory::make($rules)); } - /** @test */ + #[Test] public function it_replaces_key_with_custom_locales(): void { $rules = [ @@ -262,7 +263,7 @@ public function it_replaces_key_with_custom_locales(): void ])); } - /** @test */ + #[Test] public function it_throws_exception_with_undefined_locales(): void { $this->expectException(InvalidArgumentException::class); @@ -279,7 +280,7 @@ public function it_throws_exception_with_undefined_locales(): void ]); } - /** @test */ + #[Test] public function format_array_it_replaces_single_rule(): void { $rules = [ @@ -300,7 +301,7 @@ public function format_array_it_replaces_single_rule(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_ARRAY)); } - /** @test */ + #[Test] public function format_array_it_replaces_imploded_rules(): void { $rules = [ @@ -321,7 +322,7 @@ public function format_array_it_replaces_imploded_rules(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_ARRAY)); } - /** @test */ + #[Test] public function format_array_it_replaces_array_of_rules(): void { $rules = [ @@ -342,7 +343,7 @@ public function format_array_it_replaces_array_of_rules(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_ARRAY)); } - /** @test */ + #[Test] public function format_array_it_does_not_touch_non_string_rule(): void { $rules = [ @@ -361,7 +362,7 @@ public function format_array_it_does_not_touch_non_string_rule(): void self::assertInstanceOf(RequiredIf::class, $formattedRules['de-AT.content']); } - /** @test */ + #[Test] public function format_array_it_does_not_touch_non_string_rule_in_array(): void { $rules = [ @@ -387,7 +388,7 @@ public function format_array_it_does_not_touch_non_string_rule_in_array(): void self::assertInstanceOf(RequiredIf::class, $formattedRules['de-AT.content'][1]); } - /** @test */ + #[Test] public function format_key_it_replaces_single_rule(): void { $rules = [ @@ -408,7 +409,7 @@ public function format_key_it_replaces_single_rule(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_KEY)); } - /** @test */ + #[Test] public function format_key_it_replaces_imploded_rules(): void { $rules = [ @@ -429,7 +430,7 @@ public function format_key_it_replaces_imploded_rules(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_KEY)); } - /** @test */ + #[Test] public function format_key_it_replaces_array_of_rules(): void { $rules = [ @@ -450,7 +451,7 @@ public function format_key_it_replaces_array_of_rules(): void ], RuleFactory::make($rules, RuleFactory::FORMAT_KEY)); } - /** @test */ + #[Test] public function format_key_it_does_not_touch_non_string_rule(): void { $rules = [ @@ -469,7 +470,7 @@ public function format_key_it_does_not_touch_non_string_rule(): void self::assertInstanceOf(RequiredIf::class, $formattedRules['content:de-AT']); } - /** @test */ + #[Test] public function format_key_it_does_not_touch_non_string_rule_in_array(): void { $rules = [ diff --git a/tests/factories/CountryFactory.php b/tests/factories/CountryFactory.php index 1b8d3f8..5c4f1ca 100644 --- a/tests/factories/CountryFactory.php +++ b/tests/factories/CountryFactory.php @@ -1,8 +1,8 @@