Files
TREK/client/src/native/glSchemes.test.ts
T

39 lines
1.9 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest';
import { isEffectivelyOffline } from '../sync/networkMode';
import { GL_MAPS_THROUGH_APP_SCHEMES } from './glSchemes';
import { installOfflineProtocol, offlineStyle } from './offlineTiles';
import { glTileStoreActive, mapboxTileCacheRequest, tileCacheActive } from './tileCache';
vi.mock('./platform', () => ({ isNativeIos: vi.fn(() => true), isNativeApp: vi.fn(() => true) }));
vi.mock('./capabilities', () => ({ hasNativeFeature: vi.fn(() => true) }));
vi.mock('../sync/networkMode', () => ({ isEffectivelyOffline: vi.fn(() => false) }));
const STYLE = 'https://tiles.openfreemap.org/styles/positron';
beforeEach(() => {
vi.stubGlobal('caches', { open: vi.fn() });
vi.mocked(isEffectivelyOffline).mockReturnValue(false);
});
describe('GL maps and the app schemes', () => {
it('FE-NATIVE-GLSCHEME-001: online in the iOS app the GL maps load straight from their servers, the raster store stays', () => {
expect(GL_MAPS_THROUGH_APP_SCHEMES).toBe(false);
expect(offlineStyle(STYLE)).toBe(STYLE);
const tile = 'https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/1/1/1.vector.pbf';
expect(mapboxTileCacheRequest(tile, 'Tile')).toEqual({ url: tile });
expect(glTileStoreActive()).toBe(false);
expect(tileCacheActive()).toBe(true);
});
it('FE-NATIVE-GLSCHEME-002: offline, or set to be, the MapLibre basemap reads the stored copy through the protocol', () => {
const addProtocol = vi.fn();
installOfflineProtocol({ addProtocol });
expect(addProtocol).toHaveBeenCalledWith('trek-offline', expect.any(Function));
vi.mocked(isEffectivelyOffline).mockReturnValue(true);
expect(offlineStyle(STYLE)).toBe('trek-offline://tiles.openfreemap.org/styles/positron');
// Mapbox never goes through the store: offline it gives way to the stored MapLibre basemap.
expect(glTileStoreActive()).toBe(false);
});
});