internal/db/user_test.go (view raw)
1package db
2
3import (
4 "log"
5 "path"
6 "slices"
7 "testing"
8)
9
10// TestUsers tests db operations around user management
11func TestUsers(t *testing.T) {
12 posternDB, err := OpenDB(&Config{
13 DBPath: path.Join(t.TempDir(), "meta.db"),
14 })
15 if err != nil {
16 log.Fatal(err)
17 }
18
19 defer func(posternDB *DB) {
20 err := posternDB.Close()
21 if err != nil {
22 log.Fatal(err)
23 }
24 }(posternDB)
25
26 tx, err := posternDB.GetWriteTx(t.Context())
27 if err != nil {
28 t.Fatal(err)
29 }
30
31 _, err = InsertUser(t.Context(), tx, "testuser1", []byte{})
32 if err != nil {
33 t.Fatal(err)
34 }
35 _, err = InsertUser(t.Context(), tx, "testuser2", []byte{})
36 if err != nil {
37 t.Fatal(err)
38 }
39 err = tx.Commit()
40 if err != nil {
41 t.Fatal(err)
42 }
43
44 err = posternDB.InsertUserAddress(t.Context(), "testuser1", "test1@example.com")
45 if err != nil {
46 t.Fatal(err)
47 }
48
49 err = posternDB.InsertUserAddress(t.Context(), "testuser1", "test2@example.com")
50 if err != nil {
51 t.Fatal(err)
52 }
53
54 // Test GetUser
55 u, err := posternDB.GetUser(t.Context(), "testuser1")
56 if err != nil {
57 t.Fatal(err)
58 }
59 if len(u.Addresses) != 2 {
60 t.Errorf("got %d addresses, want 2", len(u.Addresses))
61 }
62 if !slices.Contains(u.Addresses, "test2@example.com") {
63 t.Errorf("did not find user address in addresses")
64 }
65
66 // Test non-existing user
67 u, err = posternDB.GetUser(t.Context(), "non-existent")
68 if err == nil {
69 t.Errorf("got nil, want error for non-existent user")
70 }
71
72 // Test for exists
73 exists, err := posternDB.UserExists(t.Context(), "testuser1")
74 if err != nil {
75 t.Fatal(err)
76 }
77 if !exists {
78 t.Errorf("expected user to exist")
79 }
80 exists, err = posternDB.UserExists(t.Context(), "non-existent")
81 if err != nil {
82 t.Fatal(err)
83 }
84 if exists {
85 t.Errorf("expected user to not exist")
86 }
87
88 users, err := posternDB.ListUsers(t.Context())
89 if err != nil {
90 t.Fatal(err)
91 }
92 if len(users) != 2 {
93 t.Errorf("got %d users, want 2", len(users))
94 }
95 for _, u = range users {
96 if u.Name == "testuser1" {
97 if len(u.Addresses) != 2 {
98 t.Errorf("got %d addresses, want 2", len(u.Addresses))
99 }
100 }
101 if u.Name == "testuser2" {
102 if len(u.Addresses) != 0 {
103 t.Errorf("got %d addresses, want 0", len(u.Addresses))
104 }
105 }
106 }
107
108 err = posternDB.RemoveUser(t.Context(), "testuser1")
109 if err != nil {
110 t.Fatal(err)
111 }
112 exists, err = posternDB.UserExists(t.Context(), "testuser1")
113 if err != nil {
114 t.Fatal(err)
115 }
116 if exists {
117 t.Errorf("expected user to not exist")
118 }
119}