From 04e3f4c19af164474c4df5a6527537fbec593f65 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 26 Aug 2026 14:01:22 +0000 Subject: [PATCH] test: add tests for fetchMarketData Added missing unit tests for `fetchMarketData` function in `src/storage.ts` to improve test coverage and ensure correct behavior under different conditions. Co-authored-by: Horizontal42 <75383519+Horizontal42@users.noreply.github.com> --- src/storage.test.ts | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/storage.test.ts b/src/storage.test.ts index fe20c03..fb24e13 100644 --- a/src/storage.test.ts +++ b/src/storage.test.ts @@ -1,6 +1,6 @@ import { logger } from "./logger"; import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; -import { isTauri, loadSettings, saveSettings, defaultSettingsData, loadAppData, saveAppData, flushAppData, setDataDir, runBackups, backupDeletedSheet, openBackupsFolder, chooseFolder, dataDirHasDocuments, migrateDataDir, fetchRates, fetchHistoricalRates } from './storage'; +import { isTauri, loadSettings, saveSettings, defaultSettingsData, loadAppData, saveAppData, flushAppData, setDataDir, runBackups, backupDeletedSheet, openBackupsFolder, chooseFolder, dataDirHasDocuments, migrateDataDir, fetchRates, fetchHistoricalRates, fetchMarketData } from './storage'; import { invoke } from '@tauri-apps/api/core'; vi.mock('@tauri-apps/api/core', () => ({ @@ -34,6 +34,40 @@ describe('storage', () => { }); }); + describe('fetchMarketData', () => { + it('returns empty object when not in Tauri', async () => { + const result = await fetchMarketData(['AAPL', 'MSFT']); + expect(result).toEqual({}); + expect(invoke).not.toHaveBeenCalled(); + }); + + it('returns empty object when symbols array is empty', async () => { + vi.stubGlobal('window', { __TAURI_INTERNALS__: {} }); + const result = await fetchMarketData([]); + expect(result).toEqual({}); + expect(invoke).not.toHaveBeenCalled(); + }); + + it('uses invoke when in Tauri and returns data', async () => { + vi.stubGlobal('window', { __TAURI_INTERNALS__: {} }); + const mockData = { AAPL: 150.0, MSFT: 300.0 }; + vi.mocked(invoke).mockResolvedValue(mockData); + + const result = await fetchMarketData(['AAPL', 'MSFT']); + expect(invoke).toHaveBeenCalledWith('fetch_market_data', { symbols: ['AAPL', 'MSFT'] }); + expect(result).toEqual(mockData); + }); + + it('returns empty object and logs warning if invoke fails', async () => { + vi.stubGlobal('window', { __TAURI_INTERNALS__: {} }); + vi.mocked(invoke).mockRejectedValue(new Error('Network error')); + + const result = await fetchMarketData(['AAPL', 'MSFT']); + expect(logger.warn).toHaveBeenCalledWith('fetchMarketData failed', expect.any(Error)); + expect(result).toEqual({}); + }); + }); + describe('loadSettings', () => { it('loads from localStorage when not in Tauri', async () => { vi.mocked(localStorage.getItem).mockReturnValue(JSON.stringify({ precision: 5 }));