WIP components (as built)
This commit is contained in:
109 files changed
+6509
-3
No files matched your search
@@ -0,0 +1,80 @@
|
||||
package mujica
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/egoist/mygo/ui"
|
||||
)
|
||||
|
||||
func sessionSample(now time.Time) []Session {
|
||||
return []Session{
|
||||
{ID: "s1", Device: "MacBook Pro · Safari", Location: "Tokyo", LastActive: now, Current: true},
|
||||
{ID: "s2", Device: "iPhone · App", Location: "Osaka", LastActive: time.Date(2026, 10, 1, 9, 30, 0, 0, time.Local)},
|
||||
{ID: "s3", Device: "Windows · Edge"},
|
||||
}
|
||||
}
|
||||
|
||||
func TestSessionListRevokeOneAndOthers(t *testing.T) {
|
||||
var revoked []string
|
||||
others := 0
|
||||
disabled := false
|
||||
tt := accountTester(600, 500, func(c *ui.Context) {
|
||||
r := SessionList(c, sessionSample(c.Now()), SessionListOptions{Disabled: disabled})
|
||||
if id, ok := r.Revoked(); ok {
|
||||
revoked = append(revoked, id)
|
||||
}
|
||||
if r.OthersRevoked() {
|
||||
others++
|
||||
}
|
||||
})
|
||||
for _, want := range []string{"This device", "Tokyo · Active now", "Osaka · 2026-10-01 09:30", "Last active unknown"} {
|
||||
if !tt.HasText(want) {
|
||||
t.Fatalf("missing %q in %q", want, tt.Texts())
|
||||
}
|
||||
}
|
||||
if _, ok := tt.Find("Sign out of MacBook Pro · Safari"); ok {
|
||||
t.Fatal("current session offers sign out")
|
||||
}
|
||||
if err := tt.Click("Sign out of iPhone · App"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_ = tt.Click("Sign out of other sessions")
|
||||
if !tt.Focused("Cancel") || !tt.HasText("2 other sessions will need to sign in again.") {
|
||||
t.Fatalf("confirm: %q", tt.Texts())
|
||||
}
|
||||
tt.Key(0, ui.KeyEnter)
|
||||
if others != 0 {
|
||||
t.Fatal("Enter on Cancel signed out")
|
||||
}
|
||||
_ = tt.Click("Sign out of other sessions")
|
||||
tt.Key(0, ui.KeyTab)
|
||||
tt.Key(0, ui.KeyEnter)
|
||||
if len(revoked) != 1 || revoked[0] != "s2" || others != 1 {
|
||||
t.Fatalf("revoked %v others %d", revoked, others)
|
||||
}
|
||||
disabled = true
|
||||
tt.Frame()
|
||||
_ = tt.Click("Sign out of Windows · Edge")
|
||||
if len(revoked) != 1 {
|
||||
t.Fatal("disabled list signed out")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSessionListSnapshot(t *testing.T) {
|
||||
snapshot(t, "session_list", 560, 300, func(c *ui.Context) {
|
||||
ui.Column(c).Padding(16).Children(func() { SessionList(c, sessionSample(c.Now()), SessionListOptions{}) })
|
||||
})
|
||||
}
|
||||
|
||||
func TestSessionListLargeDataBuildsVisibleRows(t *testing.T) {
|
||||
items := make([]Session, 100000)
|
||||
for i := range items {
|
||||
items[i] = Session{ID: fmt.Sprint(i), Device: fmt.Sprintf("Device %d", i), Current: i == 0}
|
||||
}
|
||||
tt := accountTester(600, 500, func(c *ui.Context) { SessionList(c, items, SessionListOptions{}) })
|
||||
if n := len(tt.Texts()); n > 100 {
|
||||
t.Fatalf("built %d text elements for a bounded viewport", n)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user