1package main
2
3import (
4 "context"
5 "errors"
6 "fmt"
7 "testing"
8)
9
10func TestNewDocumentRequiresConfirmation(t *testing.T) {
11 m := Model{Notes: "Keep this text", Page: "home"}
12 m.requestNew()
13 if m.Notes != "Keep this text" || !m.NewPending {
14 t.Fatalf("first request discarded text: %+v", m)
15 }
16 m.NewPending = false // Cancel
17 m.requestNew()
18 if m.Notes != "Keep this text" || !m.NewPending {
19 t.Fatalf("cancel failed to reset confirmation: %+v", m)
20 }
21 m.requestNew()
22 if m.Notes != "" || m.NewPending {
23 t.Fatalf("confirmation did not clear document: %+v", m)
24 }
25}
26
27func TestUnexpectedKeepsCloseErrors(t *testing.T) {
28 closeErr := errors.New("close failed")
29 cases := []struct {
30 name string
31 in error
32 want error
33 }{
34 {"nil", nil, nil},
35 {"done", errDone, nil},
36 {"canceled", fmt.Errorf("run: %w", context.Canceled), nil},
37 {"done and close", errors.Join(errDone, closeErr), closeErr},
38 {"close only", errors.Join(nil, closeErr), closeErr},
39 }
40 for _, c := range cases {
41 got := unexpected(c.in)
42 if c.want == nil && got != nil || c.want != nil && !errors.Is(got, c.want) {
43 t.Errorf("%s: unexpected(%v) = %v, want %v", c.name, c.in, got, c.want)
44 }
45 }
46 if got := unexpected(errors.Join(errDone, closeErr)); errors.Is(got, errDone) {
47 t.Errorf("errDone kept in %v", got)
48 }
49}