From 38563cfdb8e72030d2316cc31880d5f99741c064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=C3=ADcholas=20Andr=C3=A9?= Date: Wed, 17 Apr 2024 17:08:41 -0300 Subject: [PATCH] Fix/cache before set (#750) --- .changeset/witty-swans-tap.md | 6 +++ .../server/__tests__/fetchHookDataa-cache.ts | 42 +++++++++++++++++++ .../next/src/data/server/fetchHookData.ts | 8 ++-- 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 .changeset/witty-swans-tap.md diff --git a/.changeset/witty-swans-tap.md b/.changeset/witty-swans-tap.md new file mode 100644 index 000000000..8c48a5e33 --- /dev/null +++ b/.changeset/witty-swans-tap.md @@ -0,0 +1,6 @@ +--- +"@headstartwp/core": patch +"@headstartwp/next": patch +--- + +Fix cache.beforeSet diff --git a/packages/next/src/data/server/__tests__/fetchHookDataa-cache.ts b/packages/next/src/data/server/__tests__/fetchHookDataa-cache.ts index dd890be9a..21c4aaf0e 100644 --- a/packages/next/src/data/server/__tests__/fetchHookDataa-cache.ts +++ b/packages/next/src/data/server/__tests__/fetchHookDataa-cache.ts @@ -2,6 +2,7 @@ import { enableFetchMocks } from 'jest-fetch-mock'; import { HeadlessConfig, setHeadstartWPConfig } from '@headstartwp/core'; import { usePosts } from '../../hooks/usePosts'; +import { usePost } from '../../hooks/usePost'; import { fetchHookData } from '../fetchHookData'; import cache from '../cache'; @@ -125,4 +126,45 @@ describe('fetchHookData caching', () => { expect(config.cache.beforeSet).toHaveBeenCalledTimes(1); expect(result.data.isCached).toBe(true); }); + + it('caches with beforeSet without mutating the fetched data', async () => { + const config = { + useWordPressPlugin: true, + cache: { + enabled: true, + + afterGet: async (options, data) => { + return data; + }, + + beforeSet: async (options, data) => { + return { + ...data, + result: { + ...data.result, + beforeSetField: true, + }, + }; + }, + + cacheHandler: { + set: async (key, data, ttl) => { + cache.set(key, data, ttl); + }, + get: async (key) => { + return cache.get(key); + }, + }, + }, + } satisfies HeadlessConfig; + + setHeadstartWPConfig(config); + + fetchMock.mockResponseOnce(JSON.stringify([{ id: 10 }])); + + const result = await fetchHookData(usePost.fetcher(), {}, { params: { slug: 'test3' } }); + + expect(result.data.result.id).toBe(10); + expect(result.data.result.beforeSetField).toBeUndefined(); + }); }); diff --git a/packages/next/src/data/server/fetchHookData.ts b/packages/next/src/data/server/fetchHookData.ts index b13ae3d49..262f3f06a 100644 --- a/packages/next/src/data/server/fetchHookData.ts +++ b/packages/next/src/data/server/fetchHookData.ts @@ -265,7 +265,7 @@ export async function fetchHookData