Files
amethyst/docs/plans/2026-04-28-multi-account-testing-sheet.md
T
nrobi144 250bb5a1ad feat(multi-account): display names, middle-truncated npub, npub-only account fix
Account switcher dropdown improvements:
- Two-row display: Display Name on top, npub (middle-truncated) below
  e.g. 'Alice' / 'npub1abc...wxyz · Bunker'
- Middle-truncation for npub: shows first 10 + last 6 chars
- Resolves display names from DesktopLocalCache user metadata
- Confirmation dialog also shows display name
- npub-only (view-only) accounts now persist to encrypted storage
  (ensureCurrentAccountInStorage called in onLoginSuccess)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-29 09:35:33 +03:00

107 lines
4.8 KiB
Markdown

# Multi-Account Testing Sheet
**Branch:** `feat/desktop-multi-account`
**Date:** 2026-04-28
**Tester:**
## Pre-test Setup
- [ ] Clean build: `./gradlew :desktopApp:clean :desktopApp:run`
- [ ] Delete `~/.amethyst/accounts.json.enc` if exists (fresh state)
---
## T1: Fresh Launch (No Accounts)
| # | Step | Expected | Pass? | Notes |
|---|------|----------|-------|-------|
| 1.1 | Launch app | Login screen shown | | |
| 1.2 | Check sidebar | Person icon visible at top of sidebar (replaces "A" logo) | | |
| 1.3 | Click person icon | Dropdown shows "No accounts" + "Add Account" | | |
## T2: Login with nsec (First Account)
| # | Step | Expected | Pass? | Notes |
|---|------|----------|-------|-------|
| 2.1 | Paste nsec on login screen | Login succeeds, feed loads | | |
| 2.2 | Click "Save" (if prompted) | Account saved to encrypted storage | | |
| 2.3 | Check `~/.amethyst/accounts.json.enc` exists | File exists, not readable as plaintext | | |
| 2.4 | Click person icon in sidebar | Dropdown shows 1 account with checkmark + "Add Account" | | |
| 2.5 | Verify account npub shown | First 16 chars of npub visible | | |
## T3: Login with Bunker (Second Account)
| # | Step | Expected | Pass? | Notes |
|---|------|----------|-------|-------|
| 3.1 | Log out current account | Login screen shown | | |
| 3.2 | Login with bunker:// URI | Bunker connection succeeds, feed loads | | |
| 3.3 | Click person icon | Dropdown shows 2 accounts (nsec + bunker) | | |
| 3.4 | Bunker account shows "Bunker" label | Signer type label visible under npub | | |
| 3.5 | Active account has checkmark | Only current account checked | | |
## T4: Login with npub (View-Only, Third Account)
| # | Step | Expected | Pass? | Notes |
|---|------|----------|-------|-------|
| 4.1 | Log out, paste npub on login | Login succeeds (read-only mode) | | |
| 4.2 | Click person icon | Dropdown shows 3 accounts | | |
| 4.3 | View-only shows label | "View only" label visible | | |
## T5: Account Switching
| # | Step | Expected | Pass? | Notes |
|---|------|----------|-------|-------|
| 5.1 | Click different account in dropdown | App switches, feed reloads | | |
| 5.2 | Check relay reconnection | Relay indicators show reconnection activity | | |
| 5.3 | Switch back to first account | Feed loads with first account's data | | |
| 5.4 | Verify active checkmark moves | Checkmark on newly active account | | |
| 5.5 | Switch to bunker account | Bunker heartbeat indicator appears | | |
| 5.6 | Switch away from bunker | Heartbeat stops, NIP-46 cleaned up | | |
## T6: Persistence Across Restarts
| # | Step | Expected | Pass? | Notes |
|---|------|----------|-------|-------|
| 6.1 | Close app (Cmd+Q) | Clean exit | | |
| 6.2 | Relaunch app | Auto-login to last active account | | |
| 6.3 | Click person icon | All previously added accounts still listed | | |
| 6.4 | Switch to different account, restart | Restarts into the account you switched to | | |
## T7: Account Removal
| # | Step | Expected | Pass? | Notes |
|---|------|----------|-------|-------|
| 7.1 | Remove a non-active account | Account disappears from list, active stays | | |
| 7.2 | Remove the active account | App switches to next account or shows login | | |
| 7.3 | Remove all accounts | Login screen shown | | |
## T8: Encrypted Storage Security
| # | Step | Expected | Pass? | Notes |
|---|------|----------|-------|-------|
| 8.1 | `cat ~/.amethyst/accounts.json.enc` | Binary/encrypted data, no plaintext npubs | | |
| 8.2 | `hexdump -C ~/.amethyst/accounts.json.enc | head` | No readable strings | | |
| 8.3 | File permissions: `ls -la ~/.amethyst/accounts.json.enc` | `-rw-------` (owner only) | | |
## T9: Edge Cases
| # | Step | Expected | Pass? | Notes |
|---|------|----------|-------|-------|
| 9.1 | Login with invalid nsec | Error message, stays on login screen | | |
| 9.2 | Login with same account twice | Updates existing entry, no duplicate | | |
| 9.3 | Rapid account switching (click fast) | No crash, settles on last clicked | | |
| 9.4 | Switch while relays still connecting | Handles gracefully, no stuck state | | |
## T10: UI/UX
| # | Step | Expected | Pass? | Notes |
|---|------|----------|-------|-------|
| 10.1 | Dropdown positioning | Opens to the right of 48dp sidebar | | |
| 10.2 | Click outside dropdown | Dropdown dismisses | | |
| 10.3 | "Add Account" button | Visible at bottom with divider | | |
| 10.4 | Sidebar icon size | Person icon fits within 48dp width | | |
---
## Known Limitations (Not Bugs)
- "Add Account" button is wired but has no dialog yet (TODO)
- No keyboard shortcut (Cmd+Shift+A) yet
- No background notification counts yet
- No system tray integration yet
- Account removal not yet exposed in UI (only programmatic)
- NWC connection is global, not per-account
## Test Environment
- OS:
- JDK version:
- Amethyst version: 1.08.0 (feat/desktop-multi-account)