Something went wrong. Try again.
/x/perimental project monorepo
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122package switchtracker_test
import ( "crypto/rand" _ "embed" "encoding/json" "path/filepath" "strings" "testing"
"github.com/oklog/ulid/v2" "within.website/x/cmd/mi/models" "within.website/x/cmd/mi/services/switchtracker" pb "within.website/x/gen/within/website/x/mi/v1")
var ( //go:embed testdata/members.json membersJSON []byte)
func TestSwitch(t *testing.T) { ctx := t.Context()
dir := t.TempDir() dao, err := models.New(filepath.Join(dir, "test.db"), filepath.Join(dir, "backup.db")) if err != nil { t.Fatalf("failed to create dao: %v", err) }
st := switchtracker.New(dao)
// Import members and create root switch
var members []*models.Member if err := json.Unmarshal(membersJSON, &members); err != nil { t.Fatalf("failed to unmarshal members: %v", err) }
for _, m := range members { if err := dao.DB().Create(m).Error; err != nil { t.Fatalf("failed to create member: %v", err) } }
if err := dao.DB().Create(&models.Switch{ ID: ulid.MustNew(ulid.Now(), rand.Reader).String(), MemberID: members[0].ID, }).Error; err != nil { t.Fatalf("failed to create root switch: %v", err) }
resp, err := st.Members(ctx, nil) if err != nil { t.Errorf("failed to get members: %v", err) }
if len(resp.Members) != len(members) { t.Errorf("expected %d members, got %d", len(members), len(resp.Members)) }
front, err := st.WhoIsFront(ctx, nil) if err != nil { t.Errorf("failed to get front: %v", err) }
if front.Member.Name != members[0].Name { t.Errorf("expected front to be %s, got %s", members[0].Name, front.Member.Name) }
_, err = st.Switch(ctx, &pb.SwitchReq{MemberName: members[1].Name}) if err != nil { t.Errorf("failed to switch front: %v", err) }
t.Log("trying to switch to current front") front, err = st.WhoIsFront(ctx, nil) if err != nil { t.Errorf("failed to get front: %v", err) }
if front.Member.Name != members[1].Name { t.Errorf("expected front to be %s, got %s", members[1].Name, front.Member.Name) }
front, err = st.WhoIsFront(ctx, nil) if err != nil { t.Errorf("failed to get front: %v", err) }
_, err = st.Switch(ctx, &pb.SwitchReq{MemberName: front.Member.Name}) if err == nil { t.Errorf("expected error, got nil") }
if !strings.HasSuffix(err.Error(), "cannot switch to yourself") { t.Errorf("expected error to be 'cannot switch to yourself', got %v", err) }
switches, err := st.ListSwitches(ctx, &pb.ListSwitchesReq{ Count: 10, }) if err != nil { t.Errorf("failed to list switches: %v", err) }
for _, s := range switches.Switches { t.Run("get switch "+s.GetSwitch().GetId(), func(t *testing.T) { fc, err := st.GetSwitch(ctx, &pb.GetSwitchReq{ Id: s.GetSwitch().GetId(), }) if err != nil { t.Errorf("failed to get switch: %v", err) }
if fc.GetSwitch().GetId() != s.GetSwitch().GetId() { t.Errorf("expected switch ID to be %s, got %s", s.GetSwitch().GetId(), fc.GetSwitch().GetId()) } }) }}