diff --git a/.changeset/redis-haskey-missing-await.md b/.changeset/redis-haskey-missing-await.md new file mode 100644 index 00000000..3021b7d7 --- /dev/null +++ b/.changeset/redis-haskey-missing-await.md @@ -0,0 +1,5 @@ +--- +"nostream": patch +--- + +fix: await Redis EXISTS call in RedisAdapter.hasKey() so it reflects actual key presence instead of always returning true diff --git a/src/adapters/redis-adapter.ts b/src/adapters/redis-adapter.ts index 0203d02b..b7a247f8 100644 --- a/src/adapters/redis-adapter.ts +++ b/src/adapters/redis-adapter.ts @@ -52,7 +52,7 @@ export class RedisAdapter implements ICacheAdapter { public async hasKey(key: string): Promise { await this.connection logger('has %s key', key) - return Boolean(this.client.exists(key)) + return (await this.client.exists(key)) > 0 } public async getKey(key: string): Promise { diff --git a/test/unit/adapters/redis-adapter.spec.ts b/test/unit/adapters/redis-adapter.spec.ts index f9db2f85..9774dc23 100644 --- a/test/unit/adapters/redis-adapter.spec.ts +++ b/test/unit/adapters/redis-adapter.spec.ts @@ -76,7 +76,7 @@ describe('RedisAdapter', () => { describe('hasKey', () => { it('awaits connection and calls client.exists with the key', async () => { - client.exists.returns(1) + client.exists.resolves(1) const result = await adapter.hasKey('test-key') @@ -85,7 +85,7 @@ describe('RedisAdapter', () => { }) it('returns false when key does not exist', async () => { - client.exists.returns(0) + client.exists.resolves(0) const result = await adapter.hasKey('missing-key')