108 lines
2.8 KiB
Go
108 lines
2.8 KiB
Go
package messaging
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/egoist/mygo/ui"
|
|
|
|
"git.zacharyzhang.com/ZacharyZhang-NY/MujicaUI/core"
|
|
)
|
|
|
|
func TestStatusUntil(t *testing.T) {
|
|
wed := time.Date(2026, 10, 7, 14, 30, 0, 0, time.UTC)
|
|
for d, want := range map[time.Duration]time.Time{
|
|
0: {},
|
|
time.Hour: wed.Add(time.Hour),
|
|
-1: time.Date(2026, 10, 8, 0, 0, 0, 0, time.UTC),
|
|
-2: time.Date(2026, 10, 12, 0, 0, 0, 0, time.UTC),
|
|
30 * time.Minute: wed.Add(30 * time.Minute),
|
|
} {
|
|
if got := statusUntil(wed, d); !got.Equal(want) {
|
|
t.Errorf("%v: %v, want %v", d, got, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestStatusSetterEditAndClear(t *testing.T) {
|
|
st := CustomStatus{}
|
|
n := 0
|
|
tt := ui.NewTester(func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
ui.Column(c).Padding(20).Width(420).Children(func() {
|
|
if StatusSetter(c, &st, StatusSetterOptions{Location: time.UTC}).Changed() {
|
|
n++
|
|
}
|
|
})
|
|
}, 520, 600)
|
|
if err := tt.Click("Choose an emoji"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := tt.Click("Activities"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := tt.Click("violin"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := tt.Click("Status text"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
tt.Type("Rehearsing")
|
|
if err := tt.Click("Don't clear"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := tt.Click("1 hour"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if st.Emoji != "🎻" || st.Text != "Rehearsing" || st.Until.IsZero() || n < 3 {
|
|
t.Fatalf("status %+v changes %d", st, n)
|
|
}
|
|
if err := tt.Click("Clear status"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if st != (CustomStatus{}) {
|
|
t.Fatalf("not cleared: %+v", st)
|
|
}
|
|
}
|
|
|
|
func TestStatusSetterSnapshot(t *testing.T) {
|
|
st := CustomStatus{Emoji: "🎻", Text: "Rehearsing the second act"}
|
|
snapshot(t, "status_setter", 460, 140, func(c *ui.Context) {
|
|
ui.Column(c).Padding(20).Width(420).Children(func() { StatusSetter(c, &st, StatusSetterOptions{Location: time.UTC}) })
|
|
})
|
|
}
|
|
|
|
func TestStatusSetterLoadedExpiryAndDisabledPopup(t *testing.T) {
|
|
st := CustomStatus{Until: time.Date(2026, 10, 6, 15, 0, 0, 0, time.UTC)}
|
|
disabled := false
|
|
tt := ui.NewTester(func(c *ui.Context) {
|
|
core.Use(c, core.Settings{})
|
|
ui.Column(c).Disabled(disabled).Children(func() { StatusSetter(c, &st, StatusSetterOptions{Location: time.UTC}) })
|
|
}, 600, 400)
|
|
if tt.HasText("Don't clear") {
|
|
t.Fatal("loaded expiry appears as never")
|
|
}
|
|
if err := tt.Click("Tue 15:00"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := tt.Click("Don't clear"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !st.Until.IsZero() {
|
|
t.Fatal("loaded expiry was not cleared")
|
|
}
|
|
if err := tt.Click("Don't clear"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
disabled = true
|
|
tt.Frame()
|
|
if tt.HasText("30 minutes") {
|
|
t.Fatal("disabled expiry popup remains visible")
|
|
}
|
|
disabled = false
|
|
tt.Frame()
|
|
if tt.HasText("30 minutes") {
|
|
t.Fatal("expiry popup reopened after enabling")
|
|
}
|
|
}
|