|
| 1 | +import { describe, expect, test } from 'vite-plus/test'; |
| 2 | + |
| 3 | +import type { AppConfig } from '../config/types'; |
| 4 | +import type { ContextInterface } from '../context/types'; |
| 5 | +import { getServiceWorkerManager } from './context'; |
| 6 | + |
| 7 | +const buildContext = (path: string, serviceWorkerPath: string): ContextInterface => |
| 8 | + ({ |
| 9 | + _appConfig: { |
| 10 | + userConfig: { path, serviceWorkerPath }, |
| 11 | + } as AppConfig, |
| 12 | + }) as ContextInterface; |
| 13 | + |
| 14 | +const workerPathFor = (path: string, serviceWorkerPath: string): string => { |
| 15 | + const manager = getServiceWorkerManager(buildContext(path, serviceWorkerPath)); |
| 16 | + return manager['_config'].workerPath._getFullPath(); |
| 17 | +}; |
| 18 | + |
| 19 | +describe('getServiceWorkerManager worker path', () => { |
| 20 | + test('joins default root path with worker file name', () => { |
| 21 | + expect(workerPathFor('/', 'OneSignalSDKWorker.js')).toBe('/OneSignalSDKWorker.js'); |
| 22 | + }); |
| 23 | + |
| 24 | + test('collapses a leading slash in serviceWorkerPath to avoid a protocol-relative URL', () => { |
| 25 | + expect(workerPathFor('/', '/OneSignalSDKWorker.js')).toBe('/OneSignalSDKWorker.js'); |
| 26 | + }); |
| 27 | + |
| 28 | + test('joins a nested path with a trailing slash', () => { |
| 29 | + expect(workerPathFor('/push/onesignal/', 'OneSignalSDKWorker.js')).toBe( |
| 30 | + '/push/onesignal/OneSignalSDKWorker.js', |
| 31 | + ); |
| 32 | + }); |
| 33 | + |
| 34 | + test('normalizes slashes on both sides of the join', () => { |
| 35 | + expect(workerPathFor('/push/', '/OneSignalSDKWorker.js')).toBe('/push/OneSignalSDKWorker.js'); |
| 36 | + }); |
| 37 | +}); |
0 commit comments