diff --git a/README.md b/README.md index c188f51..1c916a1 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ # Model Caching for Laravel [![Gitter](https://badges.gitter.im/GeneaLabs/laravel-model-caching.svg)](https://gitter.im/GeneaLabs/laravel-model-caching?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=body_badge) [![Travis](https://img.shields.io/travis/GeneaLabs/laravel-model-caching.svg)](https://travis-ci.org/GeneaLabs/laravel-model-caching) -[![SensioLabs Insight](https://img.shields.io/sensiolabs/i/fde269ac-c382-4d17-a647-c69ad6b9dd85.svg)](https://insight.sensiolabs.com/projects/fde269ac-c382-4d17-a647-c69ad6b9dd85) [![Scrutinizer](https://img.shields.io/scrutinizer/g/GeneaLabs/laravel-model-caching.svg)](https://scrutinizer-ci.com/g/GeneaLabs/laravel-model-caching) [![Coveralls](https://img.shields.io/coveralls/GeneaLabs/laravel-model-caching.svg)](https://coveralls.io/github/GeneaLabs/laravel-model-caching) [![GitHub (pre-)release](https://img.shields.io/github/release/GeneaLabs/laravel-model-caching/all.svg)](https://github.com/GeneaLabs/laravel-model-caching) @@ -124,7 +123,7 @@ information included to be actionable. Please review the Contribution Guidelines . Only PRs that meet all criterium will be accepted. -## Support Open-Source Software - Give Thanks! +## ❤️ Open-Source Software - Give ⭐️ We have included the awesome `symfony/thanks` composer package as a dev dependency. Let your OS package maintainers know you appreciate them by starring the packages you use. Simply run composer thanks after installing this package. diff --git a/composer.json b/composer.json index d8b31e1..b724a9d 100644 --- a/composer.json +++ b/composer.json @@ -16,11 +16,14 @@ "require-dev": { "codedungeon/phpunit-result-printer": "^0.4.4", "fzaninotto/faker": "~1.4", - "laravel/laravel": "5.5.*", "mockery/mockery": "0.9.*", - "phpmd/phpmd": "^2.6", - "phpunit/phpunit": "5.7.*", + "orchestra/database": "^3.5", + "orchestra/testbench-browser-kit": "^3.5", + "orchestra/testbench-dusk": "3.5.x-dev@dev", + "orchestra/testbench": "^3.5", "php-coveralls/php-coveralls" : "*", + "phpmd/phpmd": "*", + "phpunit/phpunit": "*", "sebastian/phpcpd": "*", "symfony/thanks": "^1.0" }, diff --git a/phpunit.xml b/phpunit.xml index 2be4735..ebd5c58 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -13,6 +13,10 @@ syntaxCheck="false" > + + ./tests/Browser + + ./tests/Feature @@ -29,10 +33,10 @@ + - - + diff --git a/src/CachedBuilder.php b/src/CachedBuilder.php index a541895..c7b4e00 100644 --- a/src/CachedBuilder.php +++ b/src/CachedBuilder.php @@ -146,4 +146,16 @@ public function sum($column) return parent::sum($column); }); } + + public function value($column) + { + if (! $this->isCachable) { + return parent::value($column); + } + + return $this->cache($this->makeCacheTags()) + ->rememberForever($this->makeCacheKey() . "-value_{$column}", function () use ($column) { + return parent::value($column); + }); + } } diff --git a/tests/BrowserTestCase.php b/tests/BrowserTestCase.php new file mode 100644 index 0000000..4e665e3 --- /dev/null +++ b/tests/BrowserTestCase.php @@ -0,0 +1,18 @@ +make(Kernel::class)->bootstrap(); - $app->make(Factory::class)->load(__DIR__ . '/database/factories'); - $app->afterResolving('migrator', function ($migrator) { - $migrator->path(__DIR__ . '/database/migrations'); - }); - $app->register(LaravelModelCachingService::class); + parent::setUp(); - return $app; + $this->withFactories(__DIR__ . '/database/factories'); + $this->loadMigrationsFrom(realpath(__DIR__ . '/database/migrations')); + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + protected function getPackageProviders($app) + { + return [ + LaravelModelCachingService::class, + ConsoleServiceProvider::class, + ]; } } diff --git a/tests/FeatureTestCase.php b/tests/FeatureTestCase.php new file mode 100644 index 0000000..c68771a --- /dev/null +++ b/tests/FeatureTestCase.php @@ -0,0 +1,8 @@ +with('books', 'profile') + $authorName = (new Author)->with('books', 'profile') ->value('name'); - $key = 'genealabslaravelmodelcachingtestsfixturesauthor_name-books-profile-first'; + $key = 'genealabslaravelmodelcachingtestsfixturesauthor-books-profile-value_name'; $tags = [ 'genealabslaravelmodelcachingtestsfixturesauthor', 'genealabslaravelmodelcachingtestsfixturesbook', 'genealabslaravelmodelcachingtestsfixturesprofile', ]; - $cachedResults = cache()->tags($tags) - ->get($key) - ->name; - - $liveResults = (new UncachedAuthor)->with('books', 'profile') + $cachedResult = cache()->tags($tags) + ->get($key); + $liveResult = (new UncachedAuthor)->with('books', 'profile') ->value('name'); - $this->assertEquals($authors, $cachedResults); - $this->assertEquals($liveResults, $cachedResults); + $this->assertEquals($authorName, $cachedResult); + $this->assertEquals($authorName, $liveResult); } public function testNestedRelationshipEagerLoading() diff --git a/tests/Unit/CachedModelTest.php b/tests/Unit/CachedModelTest.php index eb48379..bb7da18 100644 --- a/tests/Unit/CachedModelTest.php +++ b/tests/Unit/CachedModelTest.php @@ -10,10 +10,10 @@ use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedProfile; use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher; use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedStore; -use GeneaLabs\LaravelModelCaching\Tests\TestCase; +use GeneaLabs\LaravelModelCaching\Tests\UnitTestCase; use Illuminate\Foundation\Testing\RefreshDatabase; -class CachedModelTest extends TestCase +class CachedModelTest extends UnitTestCase { use RefreshDatabase; diff --git a/tests/Unit/Console/Commands/FlushTest.php b/tests/Unit/Console/Commands/FlushTest.php index af21653..7c3c49a 100644 --- a/tests/Unit/Console/Commands/FlushTest.php +++ b/tests/Unit/Console/Commands/FlushTest.php @@ -6,10 +6,10 @@ use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Publisher; use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Store; use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedAuthor; -use GeneaLabs\LaravelModelCaching\Tests\TestCase; +use GeneaLabs\LaravelModelCaching\Tests\UnitTestCase; use Illuminate\Foundation\Testing\RefreshDatabase; -class FlushTest extends TestCase +class FlushTest extends UnitTestCase { use RefreshDatabase; diff --git a/tests/Unit/DisabledCachedBuilderTest.php b/tests/Unit/DisabledCachedBuilderTest.php index f6eccd8..3098a10 100644 --- a/tests/Unit/DisabledCachedBuilderTest.php +++ b/tests/Unit/DisabledCachedBuilderTest.php @@ -11,14 +11,14 @@ use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher; use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedStore; use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Http\Resources\Author as AuthorResource; -use GeneaLabs\LaravelModelCaching\Tests\TestCase; +use GeneaLabs\LaravelModelCaching\Tests\UnitTestCase; use Illuminate\Foundation\Testing\RefreshDatabase; /** * @SuppressWarnings(PHPMD.TooManyPublicMethods) * @SuppressWarnings(PHPMD.TooManyMethods) */ -class DisabledCachedBuilderTest extends TestCase +class DisabledCachedBuilderTest extends UnitTestCase { use RefreshDatabase; diff --git a/tests/Unit/DisabledCachedModelTest.php b/tests/Unit/DisabledCachedModelTest.php index cae8e60..fbca170 100644 --- a/tests/Unit/DisabledCachedModelTest.php +++ b/tests/Unit/DisabledCachedModelTest.php @@ -10,10 +10,10 @@ use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedProfile; use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher; use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedStore; -use GeneaLabs\LaravelModelCaching\Tests\TestCase; +use GeneaLabs\LaravelModelCaching\Tests\UnitTestCase; use Illuminate\Foundation\Testing\RefreshDatabase; -class DisabledCachedModelTest extends TestCase +class DisabledCachedModelTest extends UnitTestCase { use RefreshDatabase; diff --git a/tests/Unit/Traits/CachableTest.php b/tests/Unit/Traits/CachableTest.php index f1218b7..a3399b6 100644 --- a/tests/Unit/Traits/CachableTest.php +++ b/tests/Unit/Traits/CachableTest.php @@ -10,10 +10,10 @@ use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedProfile; use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher; use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedStore; -use GeneaLabs\LaravelModelCaching\Tests\TestCase; +use GeneaLabs\LaravelModelCaching\Tests\UnitTestCase; use Illuminate\Foundation\Testing\RefreshDatabase; -class CachableTest extends TestCase +class CachableTest extends UnitTestCase { use RefreshDatabase; diff --git a/tests/UnitTestCase.php b/tests/UnitTestCase.php new file mode 100644 index 0000000..1aa35d0 --- /dev/null +++ b/tests/UnitTestCase.php @@ -0,0 +1,8 @@ +