UNPKG

@networkpro/web

Version:

Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies

65 lines (52 loc) 1.78 kB
/* ========================================================================== tests/unit/client/lib/utils/utm.test.js Copyright © 2025-2026 Network Pro Strategies (Network Pro™) SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later This file is part of Network Pro. ========================================================================== */ /** * @file utm.test.js * @description Unit test for UTM parameters * @module tests/unit/client/lib/utils * @author Scott Lopez * @updated 2026-01-15 */ import { writable } from 'svelte/store'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; // Mock SvelteKit environment and store vi.mock('$app/environment', () => ({ browser: true })); vi.mock('$app/stores', () => { const mockPageStore = writable({ url: { pathname: '/contact' }, }); return { getStores: () => ({ page: mockPageStore, }), }; }); // Import *after* mocks import { appendUTM } from '$lib/utils/utm.js'; describe('appendUTM', () => { const originalWindow = globalThis.window; beforeEach(() => { globalThis.window = { location: { search: '' } }; }); afterEach(() => { globalThis.window = originalWindow; }); it('should return URL with utm parameters for /contact', () => { const url = 'https://example.com'; const result = appendUTM(url); expect(result).toBe( 'https://example.com?utm_source=netwk.pro&utm_medium=redirect&utm_campaign=contact', ); }); it('should append using & if URL already has query params', () => { const url = 'https://example.com?existing=value'; const result = appendUTM(url); expect(result).toBe( 'https://example.com?existing=value&utm_source=netwk.pro&utm_medium=redirect&utm_campaign=contact', ); }); });