From 53fa69705bae27fa9e65affa68c20f09517236f2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 05:04:46 +0000 Subject: [PATCH 1/2] Initial plan From 9e00487d447875fe5c1878d75f4d3f9060204142 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 05:15:38 +0000 Subject: [PATCH 2/2] feat: add comprehensive type testing for cache component Co-authored-by: huangdijia <8337659+huangdijia@users.noreply.github.com> --- types/Cache/Facade.php | 96 ++++++++++++++++++++++++++++++ types/Cache/Manager.php | 44 ++++++++++++++ types/Cache/Repository.php | 117 +++++++++++++++++++++++++++++++++++++ 3 files changed, 257 insertions(+) create mode 100644 types/Cache/Facade.php create mode 100644 types/Cache/Manager.php create mode 100644 types/Cache/Repository.php diff --git a/types/Cache/Facade.php b/types/Cache/Facade.php new file mode 100644 index 000000000..76c21bee7 --- /dev/null +++ b/types/Cache/Facade.php @@ -0,0 +1,96 @@ + 'value1', 'key2' => 'value2'])); +assertType('bool', Cache::putMany(['key1' => 'value1'], 60)); + +// Cache::add() tests +assertType('bool', Cache::add('key', 'value')); +assertType('bool', Cache::add('key', 'value', 60)); + +// Cache::forever() tests +assertType('bool', Cache::forever('key', 'value')); + +// Cache::forget() tests +assertType('bool', Cache::forget('key')); + +// Cache::flush() tests +assertType('bool', Cache::flush()); + +// Cache::increment() tests +assertType('bool|int', Cache::increment('key')); +assertType('bool|int', Cache::increment('key', 5)); + +// Cache::decrement() tests +assertType('bool|int', Cache::decrement('key')); +assertType('bool|int', Cache::decrement('key', 5)); + +// Cache::remember() tests +assertType('string', Cache::remember('key', 60, fn () => 'value')); +assertType('int', Cache::remember('key', 60, fn () => 123)); +assertType('array', Cache::remember('key', 60, fn () => [])); + +// Cache::rememberForever() tests +assertType('string', Cache::rememberForever('key', fn () => 'value')); +assertType('int', Cache::rememberForever('key', fn () => 123)); + +// Cache::sear() tests +assertType('string', Cache::sear('key', fn () => 'value')); +assertType('int', Cache::sear('key', fn () => 123)); + +// Cache::flexible() tests +assertType('string', Cache::flexible('key', [60, 120], fn () => 'value')); +assertType('int', Cache::flexible('key', [60, 120], fn () => 123)); +assertType('array', Cache::flexible('key', [60, 120], fn () => [])); diff --git a/types/Cache/Manager.php b/types/Cache/Manager.php new file mode 100644 index 000000000..9526be2b3 --- /dev/null +++ b/types/Cache/Manager.php @@ -0,0 +1,44 @@ +store()); +assertType('FriendsOfHyperf\Cache\Contract\Repository', $manager->store('default')); +assertType('FriendsOfHyperf\Cache\Contract\Repository', $manager->store('redis')); + +// CacheManager::driver() tests +assertType('FriendsOfHyperf\Cache\Contract\Repository', $manager->driver()); +assertType('FriendsOfHyperf\Cache\Contract\Repository', $manager->driver('default')); + +// CacheManager::resolve() tests +assertType('FriendsOfHyperf\Cache\Contract\Repository', $manager->resolve('default')); + +// Factory::store() tests +assertType('FriendsOfHyperf\Cache\Contract\Repository', $factory->store()); +assertType('FriendsOfHyperf\Cache\Contract\Repository', $factory->store('default')); + +// Factory::driver() tests +assertType('FriendsOfHyperf\Cache\Contract\Repository', $factory->driver()); +assertType('FriendsOfHyperf\Cache\Contract\Repository', $factory->driver('default')); + +// Factory::resolve() tests +assertType('FriendsOfHyperf\Cache\Contract\Repository', $factory->resolve('default')); diff --git a/types/Cache/Repository.php b/types/Cache/Repository.php new file mode 100644 index 000000000..9275de13c --- /dev/null +++ b/types/Cache/Repository.php @@ -0,0 +1,117 @@ +has('key')); + +// Repository::missing() tests +assertType('bool', $repository->missing('key')); + +// Repository::get() tests +assertType('mixed', $repository->get('key')); +assertType('mixed', $repository->get('key', 'default')); + +// Repository::set() tests +assertType('bool', $repository->set('key', 'value')); +assertType('bool', $repository->set('key', 'value', 60)); + +// Repository::delete() tests +assertType('bool', $repository->delete('key')); + +// Repository::clear() tests +assertType('bool', $repository->clear()); + +// Repository::many() tests +assertType('iterable', $repository->many(['key1', 'key2'])); + +// Repository::getMultiple() tests +assertType('iterable', $repository->getMultiple(['key1', 'key2'])); +assertType('iterable', $repository->getMultiple(['key1', 'key2'], 'default')); + +// Repository::setMultiple() tests +assertType('bool', $repository->setMultiple(['key1' => 'value1', 'key2' => 'value2'])); +assertType('bool', $repository->setMultiple(['key1' => 'value1'], 60)); + +// Repository::deleteMultiple() tests +assertType('bool', $repository->deleteMultiple(['key1', 'key2'])); + +// Repository::pull() tests +assertType('mixed', $repository->pull('key')); +assertType('mixed', $repository->pull('key', 'default')); + +// Repository::put() tests +assertType('bool', $repository->put('key', 'value')); +assertType('bool', $repository->put('key', 'value', 60)); +assertType('bool', $repository->put(['key1' => 'value1', 'key2' => 'value2'], 60)); + +// Repository::putMany() tests +assertType('bool', $repository->putMany(['key1' => 'value1', 'key2' => 'value2'])); +assertType('bool', $repository->putMany(['key1' => 'value1'], 60)); + +// Repository::add() tests +assertType('bool', $repository->add('key', 'value')); +assertType('bool', $repository->add('key', 'value', 60)); + +// Repository::forever() tests +assertType('bool', $repository->forever('key', 'value')); + +// Repository::forget() tests +assertType('bool', $repository->forget('key')); + +// Repository::flush() tests +assertType('bool', $repository->flush()); + +// Repository::increment() tests +assertType('bool|int', $repository->increment('key')); +assertType('bool|int', $repository->increment('key', 5)); + +// Repository::decrement() tests +assertType('bool|int', $repository->decrement('key')); +assertType('bool|int', $repository->decrement('key', 5)); + +// Repository::remember() tests +assertType('string', $repository->remember('key', 60, fn () => 'value')); +assertType('int', $repository->remember('key', 60, fn () => 123)); +assertType('array', $repository->remember('key', 60, fn () => [])); + +// Repository::rememberForever() tests +assertType('string', $repository->rememberForever('key', fn () => 'value')); +assertType('int', $repository->rememberForever('key', fn () => 123)); + +// Repository::sear() tests +assertType('string', $repository->sear('key', fn () => 'value')); +assertType('int', $repository->sear('key', fn () => 123)); + +// Repository::flexible() tests +assertType('string', $repository->flexible('key', [60, 120], fn () => 'value')); +assertType('int', $repository->flexible('key', [60, 120], fn () => 123)); +assertType('array', $repository->flexible('key', [60, 120], fn () => [])); + +// Repository::getDriver() tests +assertType('Hyperf\Cache\Driver\DriverInterface', $repository->getDriver()); + +// Repository::getStore() tests +assertType('Hyperf\Cache\Driver\DriverInterface', $repository->getStore()); + +// CacheRepository specific tests +assertType('Hyperf\Cache\Driver\DriverInterface', $cacheRepository->getDriver()); +assertType('Hyperf\Cache\Driver\DriverInterface', $cacheRepository->getStore());