From 5d4816e9e2ff5a1d525baa00754246fcb88dd88e Mon Sep 17 00:00:00 2001 From: Krzysztof Bielecki Date: Wed, 27 Aug 2025 15:42:38 +0200 Subject: [PATCH] add test for driver class validation --- src/CurrencyRateServiceProvider.php | 22 +++++++++++++++++ tests/DriverValidationTest.php | 37 +++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 tests/DriverValidationTest.php diff --git a/src/CurrencyRateServiceProvider.php b/src/CurrencyRateServiceProvider.php index 02caaba..0941641 100644 --- a/src/CurrencyRateServiceProvider.php +++ b/src/CurrencyRateServiceProvider.php @@ -7,6 +7,7 @@ use FlexMindSoftware\CurrencyRate\Commands\CurrencyRateCommand; use FlexMindSoftware\CurrencyRate\Drivers\UnitedStatesDriver; use InvalidArgumentException; +use Illuminate\Support\Str; use Spatie\LaravelPackageTools\Package; use Spatie\LaravelPackageTools\PackageServiceProvider; @@ -44,6 +45,14 @@ public function packageRegistered(): void $this->app->bind(UnitedStatesDriver::class, fn ($app) => new UnitedStatesDriver()); } + /** + * @return void + */ + public function packageBooted(): void + { + $this->validateDrivers(); + } + protected function validateConfig(): void { $required = ['driver', 'table-name', 'drivers']; @@ -56,4 +65,17 @@ protected function validateConfig(): void } } } + + protected function validateDrivers(): void + { + foreach (config('currency-rate.drivers', []) as $driver) { + $class = 'FlexMindSoftware\\CurrencyRate\\Drivers\\'.Str::studly($driver).'Driver'; + + if (! class_exists($class)) { + throw new InvalidArgumentException( + "Driver class [$class] for driver [$driver] does not exist." + ); + } + } + } } diff --git a/tests/DriverValidationTest.php b/tests/DriverValidationTest.php new file mode 100644 index 0000000..f850186 --- /dev/null +++ b/tests/DriverValidationTest.php @@ -0,0 +1,37 @@ +app['config']->set('currency-rate', [ + 'driver' => 'non-existing-driver', + 'drivers' => ['non-existing-driver'], + 'table-name' => 'currency_rates', + ]); + + $provider = new CurrencyRateServiceProvider($this->app); + $provider->packageRegistered(); + + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Driver class [FlexMindSoftware\\CurrencyRate\\Drivers\\NonExistingDriverDriver] for driver [non-existing-driver] does not exist.'); + + $provider->packageBooted(); + } +} +