aboutsummaryrefslogtreecommitdiff
path: root/cmd/mi/services/switchtracker/switchtracker_test.go
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2024-05-27 17:46:02 -0400
committerXe Iaso <me@xeiaso.net>2024-05-27 17:46:02 -0400
commitaa017342bfda3e79dee640bcc336bcec5bf0c094 (patch)
treede6b13dc44b6f3a397adbc1b2e757f97fcb76b5d /cmd/mi/services/switchtracker/switchtracker_test.go
parent9dc5d4799dce590e0bfb334f6cf47fc1fad47618 (diff)
downloadx-aa017342bfda3e79dee640bcc336bcec5bf0c094.tar.xz
x-aa017342bfda3e79dee640bcc336bcec5bf0c094.zip
cmd/mi/services/switchtracker: fix getting individual switches, add tests
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'cmd/mi/services/switchtracker/switchtracker_test.go')
-rw-r--r--cmd/mi/services/switchtracker/switchtracker_test.go124
1 files changed, 124 insertions, 0 deletions
diff --git a/cmd/mi/services/switchtracker/switchtracker_test.go b/cmd/mi/services/switchtracker/switchtracker_test.go
new file mode 100644
index 0000000..9def86d
--- /dev/null
+++ b/cmd/mi/services/switchtracker/switchtracker_test.go
@@ -0,0 +1,124 @@
+package switchtracker_test
+
+import (
+ "context"
+ "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/proto/mi"
+)
+
+var (
+ //go:embed testdata/members.json
+ membersJSON []byte
+)
+
+func TestSwitch(t *testing.T) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ dir := t.TempDir()
+ dao, err := models.New(filepath.Join(dir, "test.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 {
+ s := s
+ 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())
+ }
+ })
+ }
+}