diff --git a/src/puter-js/src/modules/kv/kv.test.js b/src/puter-js/src/modules/kv/kv.test.js index a591743ec..059d7e065 100644 --- a/src/puter-js/src/modules/kv/kv.test.js +++ b/src/puter-js/src/modules/kv/kv.test.js @@ -278,6 +278,11 @@ describe('kv.incr / kv.decr driver payloads', () => { expect(lastBody().args).toEqual({ key: 'n', pathAndAmountMap: { '': 5 } }); }); + it('incr(key, 0) preserves a zero amount instead of defaulting to 1', async () => { + await kv.incr('n', 0); + expect(lastBody().args).toEqual({ key: 'n', pathAndAmountMap: { '': 0 } }); + }); + it('incr(key, pathAndAmountMap) passes the map through', async () => { await kv.incr('n', { 'user.score': 2 }); expect(lastBody().args).toEqual({ key: 'n', pathAndAmountMap: { 'user.score': 2 } }); @@ -326,6 +331,11 @@ describe('kv.incr / kv.decr driver payloads', () => { await kv.decr('n', 4); expect(lastBody().args).toEqual({ key: 'n', pathAndAmountMap: { '': 4 } }); }); + + it('decr(key, 0) preserves a zero amount instead of defaulting to 1', async () => { + await kv.decr('n', 0); + expect(lastBody().args).toEqual({ key: 'n', pathAndAmountMap: { '': 0 } }); + }); }); describe('kv.add driver payloads', () => { diff --git a/src/puter-js/src/modules/kv/lib/args.js b/src/puter-js/src/modules/kv/lib/args.js index 94b38a219..335906869 100644 --- a/src/puter-js/src/modules/kv/lib/args.js +++ b/src/puter-js/src/modules/kv/lib/args.js @@ -63,7 +63,7 @@ export const parseCounterArgs = (keyOrOptions, amountOrMap, optConfig) => { } return { key: keyOrOptions, - pathAndAmountMap: !amountOrMap ? { '': 1 } : typeof amountOrMap === 'number' ? { '': amountOrMap } : amountOrMap, + pathAndAmountMap: amountOrMap === undefined || amountOrMap === null ? { '': 1 } : typeof amountOrMap === 'number' ? { '': amountOrMap } : amountOrMap, optConfig, }; };