whoami7 - Manager
:
/
home
/
analuakl
/
bents.in
/
wp-content
/
plugins
/
extendify
/
src
/
Shared
/
state
/
__tests__
/
Upload File:
files >> /home/analuakl/bents.in/wp-content/plugins/extendify/src/Shared/state/__tests__/ai-consent.test.js
// Mock dependencies jest.mock('@wordpress/api-fetch', () => ({ __esModule: true, default: jest.fn(), })); jest.mock('@wordpress/i18n', () => ({ __: (str) => str, sprintf: (format, ...args) => { // Simple mock for sprintf to replace %1$s, %2$s etc return format .replace('%1$s', args[0] || '') .replace('%2$s', args[1] || ''); }, })); // Mock zustand middleware to ensure storage logic runs synchronously jest.mock('zustand/middleware', () => ({ devtools: (fn) => fn, persist: (config, options) => (set, get, api) => { const newSet = (args) => { set(args); if (options?.storage?.setItem) { options.storage.setItem(options.name, { state: get() }); } }; return config(newSet, get, api); }, })); describe('useAIConsentStore', () => { let useAIConsentStore; // Helper to reload the store module to test initialization logic const loadStore = async () => { const module = await import('../ai-consent'); useAIConsentStore = module.useAIConsentStore; return useAIConsentStore; }; beforeEach(() => { jest.resetModules(); jest.clearAllMocks(); window.extSharedData = {}; }); describe('Initialization', () => { it('initializes with default values when no shared data is present', async () => { await loadStore(); const state = useAIConsentStore.getState(); expect(state.showAIConsent).toBe(false); expect(state.userGaveConsent).toBe(false); expect(state.consentTerms).toContain('By using AI features'); }); it('initializes with provided shared data', async () => { window.extSharedData = { showAIConsent: true, userGaveConsent: true, consentTermsCustom: 'Custom Terms', }; await loadStore(); const state = useAIConsentStore.getState(); expect(state.showAIConsent).toBe(true); expect(state.userGaveConsent).toBe(true); expect(state.consentTerms).toBe('Custom Terms'); }); it('uses default terms when consentTermsCustom is an empty string', async () => { // This tests the fix where we use || instead of ?? window.extSharedData = { consentTermsCustom: '', }; await loadStore(); const state = useAIConsentStore.getState(); expect(state.consentTerms).not.toBe(''); expect(state.consentTerms).toContain('By using AI features'); }); }); describe('Actions', () => { beforeEach(async () => { await loadStore(); }); it('updates userGaveConsent and triggers API call', () => { const { setUserGaveConsent } = useAIConsentStore.getState(); // apiFetch mock is reset in beforeEach, so we need to get the current instance const apiFetch = require('@wordpress/api-fetch').default; setUserGaveConsent(true); expect(useAIConsentStore.getState().userGaveConsent).toBe(true); // Verify persistence call expect(apiFetch).toHaveBeenCalledWith({ path: '/extendify/v1/shared/update-user-meta', method: 'POST', data: { option: 'ai_consent', value: true }, }); }); }); describe('shouldShowAIConsent', () => { const setState = (vals) => useAIConsentStore.setState(vals); beforeEach(async () => { await loadStore(); }); it('returns falsy if showAIConsent is false', () => { setState({ showAIConsent: false, consentTerms: 'Terms' }); const { shouldShowAIConsent } = useAIConsentStore.getState(); expect(shouldShowAIConsent('launch')).toBeFalsy(); }); it('returns falsy if consentTerms is missing/empty', () => { setState({ showAIConsent: true, consentTerms: '' }); const { shouldShowAIConsent } = useAIConsentStore.getState(); expect(shouldShowAIConsent('launch')).toBeFalsy(); }); it('handles "launch" context', () => { setState({ showAIConsent: true, consentTerms: 'Terms', userGaveConsent: false }); const { shouldShowAIConsent } = useAIConsentStore.getState(); // Launch shows regardless of consent status (as long as enabled) expect(shouldShowAIConsent('launch')).toBeTruthy(); setState({ userGaveConsent: true }); expect(useAIConsentStore.getState().shouldShowAIConsent('launch')).toBeTruthy(); }); it('handles "draft" context', () => { setState({ showAIConsent: true, consentTerms: 'Terms', userGaveConsent: false }); const { shouldShowAIConsent } = useAIConsentStore.getState(); // Shows if not consented expect(shouldShowAIConsent('draft')).toBeTruthy(); // Hides if consented setState({ userGaveConsent: true }); expect(useAIConsentStore.getState().shouldShowAIConsent('draft')).toBeFalsy(); }); it('handles "help-center" context', () => { setState({ showAIConsent: true, consentTerms: 'Terms', userGaveConsent: false }); const { shouldShowAIConsent } = useAIConsentStore.getState(); // Shows if not consented expect(shouldShowAIConsent('help-center')).toBeTruthy(); // Hides if consented setState({ userGaveConsent: true }); expect(useAIConsentStore.getState().shouldShowAIConsent('help-center')).toBeFalsy(); }); it('returns false for unknown context', () => { setState({ showAIConsent: true, consentTerms: 'Terms' }); const { shouldShowAIConsent } = useAIConsentStore.getState(); expect(shouldShowAIConsent('unknown-context')).toBe(false); }); }); });
Copyright ©2021 || Defacer Indonesia