all repos — postern

@ 50dc541db37adabbbb220f4abf62aba899c48f5d

Modern mail management

clone
git clone https:///postern.git

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}