diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5ec9f23..e8c8326 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,10 +10,12 @@ jobs: strategy: fail-fast: false matrix: - php: [8.2, 8.1, 8.0] - laravel: [12.*, 11.*, 10.*, 9.*, 8.*] + php: [8.3, 8.2, 8.1, 8.0] + laravel: [13.*, 12.*, 11.*, 10.*, 9.*, 8.*] dependency-version: [prefer-lowest, prefer-stable] include: + - laravel: 13.* + testbench: 11.* - laravel: 12.* testbench: 10.* - laravel: 11.* @@ -25,6 +27,22 @@ jobs: - laravel: 8.* testbench: ^6.23 exclude: + - laravel: 12.* + php: 8.3 + - laravel: 11.* + php: 8.3 + - laravel: 10.* + php: 8.3 + - laravel: 9.* + php: 8.3 + - laravel: 8.* + php: 8.3 + - laravel: 13.* + php: 8.2 + - laravel: 13.* + php: 8.1 + - laravel: 13.* + php: 8.0 - laravel: 12.* php: 8.1 - laravel: 12.* diff --git a/composer.json b/composer.json index 0759233..9fe7c36 100644 --- a/composer.json +++ b/composer.json @@ -13,14 +13,14 @@ "require": { "akaunting/laravel-money": "^1.2|^2.1|^3.0|^4.0|^5.1|^6.0", "ext-pdo_sqlite": "*", - "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/database": "^8.40|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/database": "^8.40|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "php": "^8.0" }, "require-dev": { - "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0", - "phpunit/phpunit": "^9.4|^10.0|^11.0", + "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0|^11.0", + "phpunit/phpunit": "^9.4|^10.0|^11.0|^12.0", "symplify/monorepo-builder": "^9.4.21" }, "autoload": { diff --git a/monorepo-builder.php b/monorepo-builder.php index 99a715a..b646c8f 100644 --- a/monorepo-builder.php +++ b/monorepo-builder.php @@ -20,8 +20,8 @@ ], ], 'require-dev' => [ - 'orchestra/testbench' => '^6.23|^7.0|^8.0|^9.0|^10.0', - 'phpunit/phpunit' => '^9.4|^10.0|^11.0', + 'orchestra/testbench' => '^6.23|^7.0|^8.0|^9.0|^10.0|^11.0', + 'phpunit/phpunit' => '^9.4|^10.0|^11.0|^12.0', 'symplify/monorepo-builder' => '^9.4.21', ], 'minimum-stability' => 'dev', diff --git a/packages/airlines-en/composer.json b/packages/airlines-en/composer.json index a8f8e9b..ee8c05b 100644 --- a/packages/airlines-en/composer.json +++ b/packages/airlines-en/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/airlines": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/airlines/composer.json b/packages/airlines/composer.json index 27f2ac8..6cc7bf4 100644 --- a/packages/airlines/composer.json +++ b/packages/airlines/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/model": "self.version", "squirephp/rule": "self.version" }, diff --git a/packages/airports-en/composer.json b/packages/airports-en/composer.json index 9d45d09..0a461d0 100644 --- a/packages/airports-en/composer.json +++ b/packages/airports-en/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/airports": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/airports/composer.json b/packages/airports/composer.json index 5574bdf..06b3460 100644 --- a/packages/airports/composer.json +++ b/packages/airports/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/model": "self.version", "squirephp/rule": "self.version" }, diff --git a/packages/continents-de/composer.json b/packages/continents-de/composer.json index b2981bc..1f22c69 100644 --- a/packages/continents-de/composer.json +++ b/packages/continents-de/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/continents": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/continents-en/composer.json b/packages/continents-en/composer.json index 1523573..a187726 100644 --- a/packages/continents-en/composer.json +++ b/packages/continents-en/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/continents": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/continents-pl/composer.json b/packages/continents-pl/composer.json index 3cf10c8..64cc7eb 100644 --- a/packages/continents-pl/composer.json +++ b/packages/continents-pl/composer.json @@ -22,7 +22,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/continents": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/continents/composer.json b/packages/continents/composer.json index d64ca0f..7377a31 100644 --- a/packages/continents/composer.json +++ b/packages/continents/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/model": "self.version", "squirephp/rule": "self.version" }, diff --git a/packages/countries-de/composer.json b/packages/countries-de/composer.json index 1fa7119..f27d2ce 100644 --- a/packages/countries-de/composer.json +++ b/packages/countries-de/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/countries": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/countries-en/composer.json b/packages/countries-en/composer.json index 47ea514..6c3c9eb 100644 --- a/packages/countries-en/composer.json +++ b/packages/countries-en/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/countries": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/countries-es/composer.json b/packages/countries-es/composer.json index d9c5c77..0992011 100644 --- a/packages/countries-es/composer.json +++ b/packages/countries-es/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/countries": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/countries-fr/composer.json b/packages/countries-fr/composer.json index b0ce5b3..7fc2441 100644 --- a/packages/countries-fr/composer.json +++ b/packages/countries-fr/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/countries": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/countries-pl/composer.json b/packages/countries-pl/composer.json index 59b4295..b426bc1 100644 --- a/packages/countries-pl/composer.json +++ b/packages/countries-pl/composer.json @@ -22,7 +22,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/countries": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/countries/composer.json b/packages/countries/composer.json index 556f660..bf8f09e 100644 --- a/packages/countries/composer.json +++ b/packages/countries/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/model": "self.version", "squirephp/rule": "self.version" }, diff --git a/packages/currencies-en/composer.json b/packages/currencies-en/composer.json index 06674f8..e25358f 100644 --- a/packages/currencies-en/composer.json +++ b/packages/currencies-en/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/currencies": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/currencies/composer.json b/packages/currencies/composer.json index d1655fc..86cec55 100644 --- a/packages/currencies/composer.json +++ b/packages/currencies/composer.json @@ -19,7 +19,7 @@ "require": { "php": "^8.0", "akaunting/laravel-money": "^1.2|^2.1|^3.0|^4.0|^5.1|^6.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/model": "self.version", "squirephp/rule": "self.version" }, diff --git a/packages/gb-counties-en/composer.json b/packages/gb-counties-en/composer.json index 2f7a813..522b3e3 100644 --- a/packages/gb-counties-en/composer.json +++ b/packages/gb-counties-en/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/gb-counties": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/gb-counties/composer.json b/packages/gb-counties/composer.json index 97ed158..4aad219 100644 --- a/packages/gb-counties/composer.json +++ b/packages/gb-counties/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/model": "self.version", "squirephp/rule": "self.version" }, diff --git a/packages/model/composer.json b/packages/model/composer.json index 9f1e2c0..f19a2ed 100644 --- a/packages/model/composer.json +++ b/packages/model/composer.json @@ -19,8 +19,8 @@ "require": { "php": "^8.0", "ext-pdo_sqlite": "*", - "illuminate/database": "^8.40|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0" + "illuminate/database": "^8.40|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0" }, "autoload": { "psr-4": { diff --git a/packages/model/src/Model.php b/packages/model/src/Model.php index 250d303..f920dea 100644 --- a/packages/model/src/Model.php +++ b/packages/model/src/Model.php @@ -125,7 +125,7 @@ public static function cache(array $locales = []) public static function migrate(?string $locale = null): void { - $tableName = (new static())->getTable(); + $tableName = static::getTableName(); static::resolveConnection()->getSchemaBuilder()->create($tableName, function (Blueprint $table): void { foreach (static::$schema as $name => $type) { @@ -133,7 +133,7 @@ public static function migrate(?string $locale = null): void } }); - $data = collect(Repository::fetchData(static::class)); + $data = collect(Repository::fetchData(static::class, $locale)); $schema = collect(str_getcsv($data->first())); @@ -150,10 +150,21 @@ public static function migrate(?string $locale = null): void continue; } - static::insert($dataToInsert); + static::resolveConnection()->table($tableName)->insert($dataToInsert); } } + protected static function getTableName(): string + { + $defaultProperties = (new ReflectionClass(static::class))->getDefaultProperties(); + + if (isset($defaultProperties['table']) && is_string($defaultProperties['table']) && $defaultProperties['table'] !== '') { + return $defaultProperties['table']; + } + + return Str::snake(Str::pluralStudly(class_basename(static::class))); + } + public static function resolveConnection($connection = null): SQLiteConnection { return static::$sqliteConnections[static::class]; diff --git a/packages/regions-en/composer.json b/packages/regions-en/composer.json index 7153695..4645023 100644 --- a/packages/regions-en/composer.json +++ b/packages/regions-en/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/regions": "self.version", "squirephp/repository": "self.version" }, diff --git a/packages/regions/composer.json b/packages/regions/composer.json index 3894435..b48540a 100644 --- a/packages/regions/composer.json +++ b/packages/regions/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/model": "self.version", "squirephp/rule": "self.version" }, diff --git a/packages/repository/composer.json b/packages/repository/composer.json index 80f34e2..33419ba 100644 --- a/packages/repository/composer.json +++ b/packages/repository/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0" + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0" }, "autoload": { "psr-4": { diff --git a/packages/rule/composer.json b/packages/rule/composer.json index 7ca0674..972ebe0 100644 --- a/packages/rule/composer.json +++ b/packages/rule/composer.json @@ -18,9 +18,9 @@ ], "require": { "php": "^8.0", - "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/database": "^8.40|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0" + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/database": "^8.40|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0" }, "autoload": { "psr-4": { diff --git a/packages/timezones-en/composer.json b/packages/timezones-en/composer.json index ff76d0b..75dd9d1 100644 --- a/packages/timezones-en/composer.json +++ b/packages/timezones-en/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/repository": "self.version", "squirephp/timezones": "self.version" }, diff --git a/packages/timezones/composer.json b/packages/timezones/composer.json index 633add4..ceb5739 100644 --- a/packages/timezones/composer.json +++ b/packages/timezones/composer.json @@ -18,7 +18,7 @@ ], "require": { "php": "^8.0", - "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "squirephp/model": "self.version", "squirephp/rule": "self.version" }, diff --git a/tests/ModelTest.php b/tests/ModelTest.php index 3ad5254..d956a12 100644 --- a/tests/ModelTest.php +++ b/tests/ModelTest.php @@ -15,8 +15,7 @@ class ModelTest extends TestCase { - /** @test */ - public function can_query_models(): void + public function test_can_query_models(): void { Repository::registerSource(Models\Foo::class, App::getLocale(), __DIR__ . '/data/foo-en.csv'); @@ -46,8 +45,7 @@ protected function testModel(string $model): void } } - /** @test */ - public function can_translate_models(): void + public function test_can_translate_models(): void { Repository::registerSource(Models\Foo::class, 'en', __DIR__ . '/data/foo-en.csv'); Repository::registerSource(Models\Foo::class, 'es', __DIR__ . '/data/foo-es.csv'); @@ -61,8 +59,7 @@ public function can_translate_models(): void $this->assertEquals('es', Models\Foo::first()->lang); } - /** @test */ - public function can_format_usd(): void + public function test_can_format_usd(): void { $this->assertSame('$5.00', Currency::find('usd')->format(500)); $this->assertSame('$500.00', Currency::find('usd')->format(500, true)); diff --git a/tests/RuleTest.php b/tests/RuleTest.php index 9b39788..2624050 100644 --- a/tests/RuleTest.php +++ b/tests/RuleTest.php @@ -24,8 +24,7 @@ class RuleTest extends TestCase { - /** @test */ - public function can_be_validated(): void + public function test_can_be_validated(): void { Repository::registerSource(Models\Foo::class, App::getLocale(), __DIR__ . '/data/foo-en.csv'); diff --git a/tests/TestCase.php b/tests/TestCase.php index 6db0cb4..37b3bf0 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -26,6 +26,16 @@ class TestCase extends \Orchestra\Testbench\TestCase { + /** + * Compatibility shim for Testbench/Laravel testing internals. + * + * Some matrix combinations (e.g., Laravel 11) access this static property. + * Declaring it here keeps older and newer versions compatible. + * + * @var mixed + */ + public static $latestResponse; + protected function getPackageProviders($app): array { return [ diff --git a/tests/TranslationsConsistencyTest.php b/tests/TranslationsConsistencyTest.php index 874ba25..b0bf4a8 100644 --- a/tests/TranslationsConsistencyTest.php +++ b/tests/TranslationsConsistencyTest.php @@ -8,8 +8,7 @@ class TranslationsConsistencyTest extends TestCase { protected const PACKAGES_DIRECTORY = './packages/'; - /** @test */ - public function are_data_files_consistent(): void + public function test_are_data_files_consistent(): void { collect(glob(static::PACKAGES_DIRECTORY . '*', GLOB_ONLYDIR)) ->filter(fn (string $name): bool => $this->isTranslatedPackageDirectory($name))