all repos — postern @ main

Modern mail management

internal/inbound/inbound_test.go (view raw)

 1package inbound
 2
 3import (
 4	"log/slog"
 5	"os"
 6	"testing"
 7
 8	"postern/internal/db"
 9	"postern/internal/model"
10)
11
12func TestInboundRCPTTO(t *testing.T) {
13	pdb, err := os.CreateTemp(t.TempDir(), "postern.db")
14	if err != nil {
15		t.Fatal(err)
16	}
17
18	d, err := db.OpenDB(&db.Config{DBPath: pdb.Name()})
19	if err != nil {
20		t.Fatal(err)
21	}
22
23	s := &smtpSession{
24		db: d,
25	}
26
27	rcptUser := "testuser"
28
29	tx, err := d.GetWriteTx(t.Context())
30	if err != nil {
31		t.Fatal(err)
32	}
33	_, err = db.InsertUser(t.Context(), tx, rcptUser, []byte{})
34	if err != nil {
35		t.Fatal(err)
36	}
37	err = tx.Commit()
38	if err != nil {
39		t.Fatal(err)
40	}
41
42	err = d.InsertUserAddress(t.Context(), rcptUser, "testuser@example.com")
43	if err != nil {
44		t.Fatal(err)
45	}
46
47	s.authenticatedUser = &model.SMTPAuth{
48		ID:   1,
49		Name: "smtpuser",
50	}
51	s.logger = slog.Default()
52
53	// Test "+" addresses
54	err = s.Rcpt("testuser+tag+two@example.com", nil)
55	if err != nil {
56		t.Fatal(err)
57	}
58
59	// provoke non existing user
60	err = s.Rcpt("notexist+tag+two@example.com", nil)
61	if err == nil {
62		t.Fatal("expected 550 error, got nil")
63	}
64}