@@ -3782,6 +3782,70 @@ describe("chat session controls", () => {
|
3782 | 3782 | expect(state.setTab).toHaveBeenCalledWith("usage"); |
3783 | 3783 | }); |
3784 | 3784 | |
| 3785 | +it("shows provider quota in the sidebar session switcher (regression #93041)", () => { |
| 3786 | +const { state } = createChatHeaderState(); |
| 3787 | +state.modelAuthStatusResult = { |
| 3788 | +ts: Date.now(), |
| 3789 | +providers: [ |
| 3790 | +{ |
| 3791 | +provider: "openai", |
| 3792 | +displayName: "Codex", |
| 3793 | +status: "ok", |
| 3794 | +profiles: [{ profileId: "codex", type: "oauth", status: "ok" }], |
| 3795 | +usage: { |
| 3796 | +windows: [ |
| 3797 | +{ label: "3h", usedPercent: 18 }, |
| 3798 | +{ label: "Week", usedPercent: 72 }, |
| 3799 | +], |
| 3800 | +}, |
| 3801 | +}, |
| 3802 | +], |
| 3803 | +}; |
| 3804 | +const container = document.createElement("div"); |
| 3805 | +render( |
| 3806 | +renderChatSessionSelect(state, () => undefined, { |
| 3807 | +sessionSwitcherOnly: true, |
| 3808 | +surface: "sidebar", |
| 3809 | +}), |
| 3810 | +container, |
| 3811 | +); |
| 3812 | + |
| 3813 | +const quota = container.querySelector<HTMLAnchorElement>('[data-chat-provider-usage="true"]'); |
| 3814 | +expect(quota?.textContent?.replace(/\s+/g, " ").trim()).toBe("Usage 28%"); |
| 3815 | + |
| 3816 | +const row = container.querySelector(".chat-controls__session-row"); |
| 3817 | +expect(row?.classList.contains("chat-controls__session-row--has-quota")).toBe(true); |
| 3818 | +}); |
| 3819 | + |
| 3820 | +it("hides provider quota when the sidebar session switcher is collapsed", () => { |
| 3821 | +const { state } = createChatHeaderState(); |
| 3822 | +state.modelAuthStatusResult = { |
| 3823 | +ts: Date.now(), |
| 3824 | +providers: [ |
| 3825 | +{ |
| 3826 | +provider: "openai", |
| 3827 | +displayName: "Codex", |
| 3828 | +status: "ok", |
| 3829 | +profiles: [{ profileId: "codex", type: "oauth", status: "ok" }], |
| 3830 | +usage: { |
| 3831 | +windows: [{ label: "3h", usedPercent: 18 }], |
| 3832 | +}, |
| 3833 | +}, |
| 3834 | +], |
| 3835 | +}; |
| 3836 | +const container = document.createElement("div"); |
| 3837 | +render( |
| 3838 | +renderChatSessionSelect(state, () => undefined, { |
| 3839 | +sessionSwitcherOnly: true, |
| 3840 | +compact: true, |
| 3841 | +surface: "sidebar", |
| 3842 | +}), |
| 3843 | +container, |
| 3844 | +); |
| 3845 | + |
| 3846 | +expect(container.querySelector('[data-chat-provider-usage="true"]')).toBeNull(); |
| 3847 | +}); |
| 3848 | + |
3785 | 3849 | it("falls back to the selected agent's main session when no sessions exist yet", () => { |
3786 | 3850 | const { state } = createChatHeaderState(); |
3787 | 3851 | const onSwitchSession = vi.fn(); |
|