feat: initialize nuntius project with full server implementation
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
//go:build linux || freebsd
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestLoadWritesAndParsesDefault(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "config.toml")
|
||||
|
||||
// The first Load writes the default template, then parses it back.
|
||||
cfg, err := Load(path)
|
||||
if err != nil {
|
||||
t.Fatalf("Load: %v", err)
|
||||
}
|
||||
if cfg.Server.Port != 8080 {
|
||||
t.Errorf("Server.Port = %d, want 8080", cfg.Server.Port)
|
||||
}
|
||||
if cfg.DataDir != "./data" {
|
||||
t.Errorf("DataDir = %q, want ./data", cfg.DataDir)
|
||||
}
|
||||
if len(cfg.Forms) != 3 {
|
||||
t.Fatalf("len(Forms) = %d, want 3", len(cfg.Forms))
|
||||
}
|
||||
if cfg.Forms[0].Name != "contact" || cfg.Forms[0].SMTP.Host != "smtp.example.com" {
|
||||
t.Errorf("Forms[0] = %#v", cfg.Forms[0])
|
||||
}
|
||||
if cfg.Forms[2].RateLimitPerHour != 100 {
|
||||
t.Errorf("newsletter rate_limit_per_hour = %d, want 100", cfg.Forms[2].RateLimitPerHour)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadExpandsEnvVars(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "config.toml")
|
||||
doc := `
|
||||
data_dir = "./data"
|
||||
|
||||
[server]
|
||||
port = 9000
|
||||
|
||||
[[forms]]
|
||||
name = "contact"
|
||||
type = "contact"
|
||||
path = "/api/nuntius/contact"
|
||||
to = "you@example.com"
|
||||
|
||||
[forms.smtp]
|
||||
host = "smtp.example.com"
|
||||
port = 587
|
||||
user = "u@example.com"
|
||||
password = "${NUNTIUS_TEST_PW}"
|
||||
`
|
||||
if err := os.WriteFile(path, []byte(doc), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Setenv("NUNTIUS_TEST_PW", "s3cret")
|
||||
|
||||
cfg, err := Load(path)
|
||||
if err != nil {
|
||||
t.Fatalf("Load: %v", err)
|
||||
}
|
||||
if cfg.Forms[0].SMTP.Password != "s3cret" {
|
||||
t.Errorf("password = %q, want s3cret", cfg.Forms[0].SMTP.Password)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadRejectsUnknownField(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "config.toml")
|
||||
doc := `
|
||||
bogus = true
|
||||
|
||||
[server]
|
||||
port = 8080
|
||||
|
||||
[[forms]]
|
||||
name = "contact"
|
||||
path = "/api/nuntius/contact"
|
||||
to = "you@example.com"
|
||||
|
||||
[forms.smtp]
|
||||
host = "smtp.example.com"
|
||||
port = 587
|
||||
user = "u@example.com"
|
||||
`
|
||||
if err := os.WriteFile(path, []byte(doc), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := Load(path); err == nil {
|
||||
t.Fatal("expected an error for an unknown field")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user