all repos — postern @ fc287763b9ce6b6f9823e11c0b1173da0446ebc5

Modern mail management

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}