From 6cbda18b37cdf3f66947bbfdc2965d688315a346 Mon Sep 17 00:00:00 2001 From: joskfg Date: Wed, 10 Oct 2018 12:13:17 +0200 Subject: [PATCH] bugfix/Infinite-DIC-loop Fix infitie DIC loop (#7) --- src/Scraper/Repositories/Configuration.php | 7 ++----- .../Scraper/Repositories/ConfigurationTest.php | 17 ++++++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Scraper/Repositories/Configuration.php b/src/Scraper/Repositories/Configuration.php index 8eb7da7..2fd1192 100644 --- a/src/Scraper/Repositories/Configuration.php +++ b/src/Scraper/Repositories/Configuration.php @@ -23,11 +23,6 @@ class Configuration */ const CACHE_TTL = 30; - public function __construct(Configurator $crawler) - { - $this->configurator = $crawler; - } - public function findByType(string $type): Collection { return ConfigurationModel::withType($type)->get(); @@ -35,6 +30,8 @@ public function findByType(string $type): Collection public function calculate(string $type): Collection { + $this->configurator = $this->configurator ?? resolve(Configurator::class); + $cacheKey = $this->getCacheKey($type); $config = Cache::get($cacheKey); if (!$config) { diff --git a/tests/Unit/Scraper/Repositories/ConfigurationTest.php b/tests/Unit/Scraper/Repositories/ConfigurationTest.php index a4f5d89..9cbffc7 100644 --- a/tests/Unit/Scraper/Repositories/ConfigurationTest.php +++ b/tests/Unit/Scraper/Repositories/ConfigurationTest.php @@ -3,6 +3,7 @@ namespace Softonic\LaravelIntelligentScraper\Scraper\Repositories; use Illuminate\Foundation\Testing\DatabaseMigrations; +use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Cache; use Softonic\LaravelIntelligentScraper\Scraper\Application\Configurator; use Softonic\LaravelIntelligentScraper\Scraper\Models\Configuration as ConfigurationModel; @@ -34,9 +35,7 @@ public function whenRetrieveAllConfigurationItShouldReturnIt() 'xpaths' => '//*[@id="author"]', ]); - $configurator = \Mockery::mock(Configurator::class); - - $configuration = new Configuration($configurator); + $configuration = new Configuration(); $data = $configuration->findByType('post'); $this->assertCount(2, $data); @@ -51,8 +50,9 @@ public function whenRecalculateButThereIsNotApostDatasetItShouldThrowAnException $this->expectExceptionMessage('A dataset example is needed to recalculate xpaths for type post.'); $configurator = \Mockery::mock(Configurator::class); + App::instance(Configurator::class, $configurator); - $configuration = new Configuration($configurator); + $configuration = new Configuration(); $configuration->calculate('post'); } @@ -109,13 +109,14 @@ public function whenRecalculateItShouldStoreTheNewXpaths() ->with(Configuration::class . '-config-post', $config, Configuration::CACHE_TTL); $configurator = \Mockery::mock(Configurator::class); + App::instance(Configurator::class, $configurator); $configurator->shouldReceive('configureFromDataset') ->withArgs(function ($posts) { return 2 == $posts->count(); }) ->andReturn($config); - $configuration = new Configuration($configurator); + $configuration = new Configuration(); $configs = $configuration->calculate('post'); $this->assertEquals($configs[0]['name'], 'title'); @@ -164,6 +165,7 @@ public function whenRecalculateFailsItShouldThrowAnException() ->andReturnNull(); $configurator = \Mockery::mock(Configurator::class); + App::instance(Configurator::class, $configurator); $configurator->shouldReceive('configureFromDataset') ->withArgs(function ($posts) { return 2 == $posts->count(); @@ -173,7 +175,7 @@ public function whenRecalculateFailsItShouldThrowAnException() $this->expectException(\UnexpectedValueException::class); $this->expectExceptionMessage('Recalculate fail'); - $configuration = new Configuration($configurator); + $configuration = new Configuration(); $configuration->calculate('post'); } @@ -183,6 +185,7 @@ public function whenRecalculateFailsItShouldThrowAnException() public function whenCalculateAfterAnotherCalculateItShouldUseThePrecalclatedConfig() { $configurator = \Mockery::mock(Configurator::class); + App::instance(Configurator::class, $configurator); $configurator->shouldReceive('configureFromDataset') ->never(); @@ -192,7 +195,7 @@ public function whenCalculateAfterAnotherCalculateItShouldUseThePrecalclatedConf ->with(Configuration::class . '-config-post') ->andReturn($config); - $configuration = new Configuration($configurator); + $configuration = new Configuration(); $this->assertEquals( $config, $configuration->calculate('post')