1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-17 17:47:03 +00:00

Use enum for MailboxNaming for #33

This commit is contained in:
James Hillyerd
2018-04-04 21:40:53 -07:00
parent ff2121fbb9
commit bf152adbef
3 changed files with 32 additions and 8 deletions

View File

@@ -1,6 +1,7 @@
package config
import (
"fmt"
"log"
"os"
"strings"
@@ -29,10 +30,33 @@ var (
BuildDate = ""
)
// Root wraps all other configurations.
// mbNaming represents a mailbox naming strategy.
type mbNaming int
// Mailbox naming strategies.
const (
UnknownNaming mbNaming = iota
LocalNaming
FullNaming
)
// Decode a naming strategy from string.
func (n *mbNaming) Decode(v string) error {
switch strings.ToLower(v) {
case "local":
*n = LocalNaming
case "full":
*n = FullNaming
default:
return fmt.Errorf("Unknown MailboxNaming strategy: %q", v)
}
return nil
}
// Root contains global configuration, and structs with for specific sub-systems.
type Root struct {
LogLevel string `required:"true" default:"info" desc:"debug, info, warn, or error"`
MailboxNaming string `required:"true" default:"local" desc:"local or full"`
MailboxNaming mbNaming `required:"true" default:"local" desc:"local or full"`
SMTP SMTP
POP3 POP3
Web Web

View File

@@ -25,7 +25,7 @@ func (a *Addressing) ExtractMailbox(address string) (string, error) {
if err != nil {
return "", err
}
if a.Config.MailboxNaming == "local" {
if a.Config.MailboxNaming == config.LocalNaming {
return local, nil
}
if domain == "" {

View File

@@ -123,8 +123,8 @@ func TestShouldStoreDomain(t *testing.T) {
}
func TestExtractMailboxValid(t *testing.T) {
localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "local"}}
fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "full"}}
localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.LocalNaming}}
fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.FullNaming}}
testTable := []struct {
input string // Input to test
@@ -251,8 +251,8 @@ func TestExtractMailboxValid(t *testing.T) {
}
func TestExtractMailboxInvalid(t *testing.T) {
localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "local"}}
fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "full"}}
localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.LocalNaming}}
fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.FullNaming}}
// Test local mailbox naming policy.
localInvalidTable := []struct {
input, msg string