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 posternDB.Close()
20
21 tx, err := posternDB.GetWriteTx(t.Context())
22 if err != nil {
23 t.Fatal(err)
24 }
25
26 _, err = InsertUser(t.Context(), tx, "testuser1", []byte{})
27 if err != nil {
28 t.Fatal(err)
29 }
30 _, err = InsertUser(t.Context(), tx, "testuser2", []byte{})
31 if err != nil {
32 t.Fatal(err)
33 }
34 err = tx.Commit()
35 if err != nil {
36 t.Fatal(err)
37 }
38
39 err = posternDB.InsertUserAddress(t.Context(), "testuser1", "test1@example.com")
40 if err != nil {
41 t.Fatal(err)
42 }
43
44 err = posternDB.InsertUserAddress(t.Context(), "testuser1", "test2@example.com")
45 if err != nil {
46 t.Fatal(err)
47 }
48
49 // Test GetUser
50 u, err := posternDB.GetUser(t.Context(), "testuser1")
51 if err != nil {
52 t.Fatal(err)
53 }
54 if len(u.Addresses) != 2 {
55 t.Errorf("got %d addresses, want 2", len(u.Addresses))
56 }
57 if !slices.Contains(u.Addresses, "test2@example.com") {
58 t.Errorf("did not find user address in addresses")
59 }
60
61 // Test non-existing user
62 u, err = posternDB.GetUser(t.Context(), "non-existent")
63 if err == nil {
64 t.Errorf("got nil, want error for non-existent user")
65 }
66
67 // Test for exists
68 exists, err := posternDB.UserExists(t.Context(), "testuser1")
69 if err != nil {
70 t.Fatal(err)
71 }
72 if !exists {
73 t.Errorf("expected user to exist")
74 }
75 exists, err = posternDB.UserExists(t.Context(), "non-existent")
76 if err != nil {
77 t.Fatal(err)
78 }
79 if exists {
80 t.Errorf("expected user to not exist")
81 }
82
83 users, err := posternDB.ListUsers(t.Context())
84 if err != nil {
85 t.Fatal(err)
86 }
87 if len(users) != 2 {
88 t.Errorf("got %d users, want 2", len(users))
89 }
90 for _, u = range users {
91 if u.Name == "testuser1" {
92 if len(u.Addresses) != 2 {
93 t.Errorf("got %d addresses, want 2", len(u.Addresses))
94 }
95 }
96 if u.Name == "testuser2" {
97 if len(u.Addresses) != 0 {
98 t.Errorf("got %d addresses, want 0", len(u.Addresses))
99 }
100 }
101 }
102
103 err = posternDB.RemoveUser(t.Context(), "testuser1")
104 if err != nil {
105 t.Fatal(err)
106 }
107 exists, err = posternDB.UserExists(t.Context(), "testuser1")
108 if err != nil {
109 t.Fatal(err)
110 }
111 if exists {
112 t.Errorf("expected user to not exist")
113 }
114}