/* * Copyright (C) 2022 Kristóf Marussy * * This file is part of Sophie. * * Sophie is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * * SPDX-License-Identifier: AGPL-3.0-only */ import os from 'node:os'; import eachModule from 'jest-each'; import Resources from '../../Resources'; import getDistResources from '../getDistResources'; // Workaround for jest ESM loader incorrectly wrapping the import in another layer of `default`. const each = (eachModule as Partial).default ?? eachModule; const defaultDevServerURL = 'http://localhost:3000/'; const [ thisDir, preloadIndexPath, preloadIndexFileURL, rendererIndexFileURL, rendererRootFileURL, ] = os.platform() === 'win32' ? [ 'C:\\Program Files\\sophie\\resources\\app.asar\\main\\dist', 'C:\\Program Files\\sophie\\resources\\app.asar\\preload\\dist\\index.cjs', 'file:///C:/Program Files/sophie/resources/app.asar/preload/dist/index.cjs', 'file:///C:/Program Files/sophie/resources/app.asar/renderer/dist/index.html', 'file:///C:/Program Files/sophie/resources/app.asar/renderer/dist/', ] : [ '/opt/sophie/resources/app.asar/main/dist', '/opt/sophie/resources/app.asar/preload/dist/index.cjs', 'file:///opt/sophie/resources/app.asar/preload/dist/index.cjs', 'file:///opt/sophie/resources/app.asar/renderer/dist/index.html', 'file:///opt/sophie/resources/app.asar/renderer/dist/', ]; const fileURLs: [string, string] = [rendererIndexFileURL, rendererRootFileURL]; each([ ['not in dev mode', false, undefined, ...fileURLs], [ 'not in dev mode with VITE_DEV_SERVER_URL set', false, defaultDevServerURL, ...fileURLs, ], ['in dev mode with no VITE_DEV_SERVER_URL', true, undefined, ...fileURLs], [ 'in dev mode with VITE_DEV_SERVER_URL set', true, defaultDevServerURL, `${defaultDevServerURL}index.html`, defaultDevServerURL, ], ]).describe( 'when %s', ( _description: string, devMode: boolean, devServerURL: string, rendererIndexURL: string, rendererRootURL: string, ) => { let resources: Resources; beforeEach(() => { resources = getDistResources(devMode, thisDir, devServerURL); }); it('getPath should return the path to the requested resource', () => { const path = resources.getPath('preload', 'index.cjs'); expect(path).toBe(preloadIndexPath); }); it('getFileURL should return the file URL to the requested resource', () => { const url = resources.getFileURL('preload', 'index.cjs'); expect(url).toBe(preloadIndexFileURL); }); describe('getRendererURL', () => { it('should return the URL to the requested resource', () => { const url = resources.getRendererURL('index.html'); expect(url).toBe(rendererIndexURL); }); it('should return the root URL', () => { const url = resources.getRendererURL('/'); expect(url).toBe(rendererRootURL); }); }); }, );