Skip to content

Commit 4c2e7a3

Browse files
committed
Replace the provider docs with the balance when logged in
1 parent cf3871a commit 4c2e7a3

File tree

3 files changed

+61
-9
lines changed

3 files changed

+61
-9
lines changed

webview-ui/src/components/settings/ApiOptions.tsx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ import { TemperatureControl } from "./TemperatureControl"
115115
import { RateLimitSecondsControl } from "./RateLimitSecondsControl"
116116
import { ConsecutiveMistakeLimitControl } from "./ConsecutiveMistakeLimitControl"
117117
import { BedrockCustomArn } from "./providers/BedrockCustomArn"
118+
import { RooBalanceDisplay } from "./providers/RooBalanceDisplay"
118119
import { buildDocLink } from "@src/utils/docLinks"
119120

120121
export interface ApiOptionsProps {
@@ -460,12 +461,16 @@ const ApiOptions = ({
460461
<div className="flex flex-col gap-1 relative">
461462
<div className="flex justify-between items-center">
462463
<label className="block font-medium mb-1">{t("settings:providers.apiProvider")}</label>
463-
{docs && (
464-
<div className="text-xs text-vscode-descriptionForeground">
465-
<VSCodeLink href={docs.url} className="hover:text-vscode-foreground" target="_blank">
466-
{t("settings:providers.providerDocumentation", { provider: docs.name })}
467-
</VSCodeLink>
468-
</div>
464+
{selectedProvider === "roo" && cloudIsAuthenticated ? (
465+
<RooBalanceDisplay />
466+
) : (
467+
docs && (
468+
<div className="text-xs text-vscode-descriptionForeground">
469+
<VSCodeLink href={docs.url} className="hover:text-vscode-foreground" target="_blank">
470+
{t("settings:providers.providerDocumentation", { provider: docs.name })}
471+
</VSCodeLink>
472+
</div>
473+
)
469474
)}
470475
</div>
471476
<SearchableSelect

webview-ui/src/components/settings/__tests__/ApiOptions.spec.tsx

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"
55

66
import { type ModelInfo, type ProviderSettings, openAiModelInfoSaneDefaults } from "@roo-code/types"
77

8-
import { ExtensionStateContextProvider } from "@src/context/ExtensionStateContext"
8+
import * as ExtensionStateContext from "@src/context/ExtensionStateContext"
9+
const { ExtensionStateContextProvider } = ExtensionStateContext
910

1011
import ApiOptions, { ApiOptionsProps } from "../ApiOptions"
1112

@@ -238,6 +239,18 @@ vi.mock("../providers/LiteLLM", () => ({
238239
),
239240
}))
240241

242+
// Mock Roo provider for tests
243+
vi.mock("../providers/Roo", () => ({
244+
Roo: ({ cloudIsAuthenticated }: any) => (
245+
<div data-testid="roo-provider">{cloudIsAuthenticated ? "Authenticated" : "Not Authenticated"}</div>
246+
),
247+
}))
248+
249+
// Mock RooBalanceDisplay for tests
250+
vi.mock("../providers/RooBalanceDisplay", () => ({
251+
RooBalanceDisplay: () => <div data-testid="roo-balance-display">Balance: $10.00</div>,
252+
}))
253+
241254
vi.mock("@src/components/ui/hooks/useSelectedModel", () => ({
242255
useSelectedModel: vi.fn((apiConfiguration: ProviderSettings) => {
243256
if (apiConfiguration.apiModelId?.includes("thinking")) {
@@ -563,4 +576,40 @@ describe("ApiOptions", () => {
563576
expect(screen.queryByTestId("litellm-provider")).not.toBeInTheDocument()
564577
})
565578
})
579+
580+
describe("Roo provider tests", () => {
581+
it("shows balance display when authenticated", () => {
582+
// Mock useExtensionState to return authenticated state
583+
const useExtensionStateMock = vi.spyOn(ExtensionStateContext, "useExtensionState")
584+
useExtensionStateMock.mockReturnValue({
585+
cloudIsAuthenticated: true,
586+
organizationAllowList: { providers: {} },
587+
} as any)
588+
589+
renderApiOptions({
590+
apiConfiguration: {
591+
apiProvider: "roo",
592+
},
593+
})
594+
595+
expect(screen.getByTestId("roo-balance-display")).toBeInTheDocument()
596+
})
597+
598+
it("does not show balance display when not authenticated", () => {
599+
// Mock useExtensionState to return unauthenticated state
600+
const useExtensionStateMock = vi.spyOn(ExtensionStateContext, "useExtensionState")
601+
useExtensionStateMock.mockReturnValue({
602+
cloudIsAuthenticated: false,
603+
organizationAllowList: { providers: {} },
604+
} as any)
605+
606+
renderApiOptions({
607+
apiConfiguration: {
608+
apiProvider: "roo",
609+
},
610+
})
611+
612+
expect(screen.queryByTestId("roo-balance-display")).not.toBeInTheDocument()
613+
})
614+
})
566615
})

webview-ui/src/components/settings/providers/Roo.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { vscode } from "@src/utils/vscode"
77
import { Button } from "@src/components/ui"
88

99
import { ModelPicker } from "../ModelPicker"
10-
import { RooBalanceDisplay } from "./RooBalanceDisplay"
1110

1211
type RooProps = {
1312
apiConfiguration: ProviderSettings
@@ -35,7 +34,6 @@ export const Roo = ({
3534
<div className="text-sm text-vscode-descriptionForeground">
3635
{t("settings:providers.roo.authenticatedMessage")}
3736
</div>
38-
<RooBalanceDisplay />
3937
</div>
4038
) : (
4139
<div className="flex flex-col gap-2">

0 commit comments

Comments
 (0)