swarm ui: the login button's wording is a tested function
The label that switches between log in and log in again moves next to the stored login's other wording, so it has a test.
This commit is contained in:
parent
e9ddfd61ec
commit
78e063e78c
3 changed files with 18 additions and 1 deletions
|
|
@ -24,6 +24,13 @@ export function storedAtMs(login: StoredLogin): number | null {
|
|||
return Number.isNaN(ms) ? null : ms;
|
||||
}
|
||||
|
||||
// The settings row's login button: `log in` when the swarm holds no login for
|
||||
// the agent, `log in again` when it holds one, so a forced relogin reads as
|
||||
// what it is.
|
||||
export function loginButtonLabel(login: StoredLogin): string {
|
||||
return login.stored_at === null ? "log in" : "log in again";
|
||||
}
|
||||
|
||||
// What the delete's confirmation says: it removes the swarm's copy, and the
|
||||
// agent reads the store every 5 minutes and logs out when the copy is gone.
|
||||
export function deleteMessage(agent: string): string {
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import { showToast } from "../../ui/toast/toasts.js";
|
|||
import {
|
||||
deleteMessage,
|
||||
deleteStoredLoginPath,
|
||||
loginButtonLabel,
|
||||
storedAtMs,
|
||||
storedLoginPath,
|
||||
type StoredLogin,
|
||||
|
|
@ -81,7 +82,7 @@ export function AgentClaudeLogin({ agent }: { agent: string }) {
|
|||
const loginBadge = (
|
||||
<Badge
|
||||
variant="quiet"
|
||||
value={login.stored_at === null ? "log in" : "log in again"}
|
||||
value={loginButtonLabel(login)}
|
||||
title={`log ${agent} in to claude from here`}
|
||||
onClick={() => setLoggingIn(true)}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import { test } from "node:test";
|
|||
import {
|
||||
deleteMessage,
|
||||
deleteStoredLoginPath,
|
||||
loginButtonLabel,
|
||||
storedAtMs,
|
||||
storedLoginPath,
|
||||
} from "../src/agent/claude-login/StoredLogin.ts";
|
||||
|
|
@ -32,3 +33,11 @@ test("the delete's confirmation names the agent", () => {
|
|||
assert.match(deleteMessage("atlas"), /stored claude login for atlas/);
|
||||
assert.match(deleteMessage("atlas"), /logged out within 5 minutes/);
|
||||
});
|
||||
|
||||
test("the login button says log in until a login is stored, then log in again", () => {
|
||||
assert.equal(loginButtonLabel({ stored_at: null }), "log in");
|
||||
assert.equal(
|
||||
loginButtonLabel({ stored_at: "2026-11-10T12:00:00Z" }),
|
||||
"log in again",
|
||||
);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue