test: mock AnthropicClient in analyze tests to prevent live API calls

This commit is contained in:
Kazuma
2026-06-08 12:08:37 -04:00
parent 76c2a671f4
commit ad1c3fe3c9
31 changed files with 415 additions and 171 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
<script lang="ts">
import { page, navigating } from '$app/stores';
import '../styles/app.scss';
import Spinner from '$lib/Spinner.svelte';
import Spinner from '$lib/components/shared/Spinner.svelte';
import type { Snippet } from 'svelte';
let { children }: { children: Snippet } = $props();
+6 -6
View File
@@ -1,11 +1,11 @@
<script lang="ts">
import { screenerStore } from '$lib/stores/screener.store.svelte.js';
import SignalBadge from '$lib/SignalBadge.svelte';
import Spinner from '$lib/Spinner.svelte';
import VerdictPill from '$lib/VerdictPill.svelte';
import MarketContextStrip from '$lib/MarketContextStrip.svelte';
import AssetTable from '$lib/AssetTable.svelte';
import AnalysisSidebar from '$lib/AnalysisSidebar.svelte';
import SignalBadge from '$lib/components/shared/SignalBadge.svelte';
import Spinner from '$lib/components/shared/Spinner.svelte';
import VerdictPill from '$lib/components/shared/VerdictPill.svelte';
import MarketContextStrip from '$lib/components/shared/MarketContextStrip.svelte';
import AssetTable from '$lib/components/screener/AssetTable.svelte';
import AnalysisSidebar from '$lib/components/screener/AnalysisSidebar.svelte';
const s = screenerStore;
+15 -9
View File
@@ -1,7 +1,7 @@
<script lang="ts">
import { portfolioStore } from '$lib/stores/portfolio.store.svelte.js';
import MarketContext from '$lib/MarketContext.svelte';
import Spinner from '$lib/Spinner.svelte';
import MarketContext from '$lib/components/shared/MarketContext.svelte';
import Spinner from '$lib/components/shared/Spinner.svelte';
import AddHoldingForm from '$lib/portfolio/AddHoldingForm.svelte';
import AdviceTable from '$lib/portfolio/AdviceTable.svelte';
import AccountsTable from '$lib/portfolio/AccountsTable.svelte';
@@ -27,7 +27,7 @@
{:else if p.loadError}
<div class="error">{p.loadError}</div>
{:else if p.data?.advice}
{:else if p.data}
<div class="portfolio-toolbar">
<button class="btn-add" onclick={() => p.formOpen ? p.closeForm() : p.openForm()}>
{p.formOpen ? '✕ Cancel' : '+ Add Holding'}
@@ -41,14 +41,20 @@
<AddHoldingForm saving={p.saving} error={p.formError} onSubmit={d => p.add(d)} onClose={() => p.closeForm()} />
{/if}
{#if p.data.marketContext}
<MarketContext ctx={p.data.marketContext} collapsible={true} />
{/if}
{#if p.data.advice.length === 0 && !p.formOpen}
<div class="empty-state">
<p>No holdings yet. Add your first position to get started.</p>
</div>
{:else}
{#if p.data.marketContext}
<MarketContext ctx={p.data.marketContext} collapsible={true} />
{/if}
<AdviceTable rows={p.data.advice} onUpdate={(t, d) => p.update(t, d)} onDelete={t => p.remove(t)} />
<AdviceTable rows={p.data.advice} onUpdate={(t, d) => p.update(t, d)} onDelete={t => p.remove(t)} />
{#if p.data.personalFinance}
<AccountsTable pf={p.data.personalFinance} />
{#if p.data.personalFinance}
<AccountsTable pf={p.data.personalFinance} />
{/if}
{/if}
{/if}
</div>
+3 -3
View File
@@ -1,7 +1,7 @@
<script lang="ts">
import MarketContext from '$lib/MarketContext.svelte';
import SignalBadge from '$lib/SignalBadge.svelte';
import VerdictPill from '$lib/VerdictPill.svelte';
import MarketContext from '$lib/components/shared/MarketContext.svelte';
import SignalBadge from '$lib/components/shared/SignalBadge.svelte';
import VerdictPill from '$lib/components/shared/VerdictPill.svelte';
import { sorted } from '$lib/utils.js';
import type { AssetResult, MarketContext as MarketContextType } from '$lib/types.js';