Merge remote-tracking branch 'origin/polecat/Nux'
This commit is contained in:
@@ -234,16 +234,21 @@ func ParseMessageType(s string) MessageType {
|
||||
// Examples:
|
||||
// - "mayor/" → "mayor/"
|
||||
// - "mayor" → "mayor/"
|
||||
// - "deacon/" → "deacon/"
|
||||
// - "deacon" → "deacon/"
|
||||
// - "gastown/Toast" → "gastown-Toast"
|
||||
// - "gastown/refinery" → "gastown-refinery"
|
||||
// - "gastown/" → "gastown" (rig broadcast)
|
||||
func addressToIdentity(address string) string {
|
||||
// Mayor special case - always use "mayor/" for consistency
|
||||
// Town-level agents: mayor and deacon keep trailing slash
|
||||
if address == "mayor" || address == "mayor/" {
|
||||
return "mayor/"
|
||||
}
|
||||
if address == "deacon" || address == "deacon/" {
|
||||
return "deacon/"
|
||||
}
|
||||
|
||||
// Trim trailing slash for non-mayor addresses
|
||||
// Trim trailing slash for rig-level addresses
|
||||
if len(address) > 0 && address[len(address)-1] == '/' {
|
||||
address = address[:len(address)-1]
|
||||
}
|
||||
@@ -265,12 +270,19 @@ func addressToIdentity(address string) string {
|
||||
//
|
||||
// Examples:
|
||||
// - "mayor" → "mayor/"
|
||||
// - "mayor/" → "mayor/"
|
||||
// - "deacon" → "deacon/"
|
||||
// - "deacon/" → "deacon/"
|
||||
// - "gastown-Toast" → "gastown/Toast"
|
||||
// - "gastown-refinery" → "gastown/refinery"
|
||||
func identityToAddress(identity string) string {
|
||||
if identity == "mayor" {
|
||||
// Town-level agents
|
||||
if identity == "mayor" || identity == "mayor/" {
|
||||
return "mayor/"
|
||||
}
|
||||
if identity == "deacon" || identity == "deacon/" {
|
||||
return "deacon/"
|
||||
}
|
||||
|
||||
// Find first dash and replace with /
|
||||
// gastown-Toast → gastown/Toast
|
||||
|
||||
63
internal/mail/types_test.go
Normal file
63
internal/mail/types_test.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package mail
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestAddressToIdentity(t *testing.T) {
|
||||
tests := []struct {
|
||||
address string
|
||||
expected string
|
||||
}{
|
||||
// Town-level agents keep trailing slash
|
||||
{"mayor", "mayor/"},
|
||||
{"mayor/", "mayor/"},
|
||||
{"deacon", "deacon/"},
|
||||
{"deacon/", "deacon/"},
|
||||
|
||||
// Rig-level agents use dash separator
|
||||
{"gastown/Toast", "gastown-Toast"},
|
||||
{"gastown/refinery", "gastown-refinery"},
|
||||
{"gastown/witness", "gastown-witness"},
|
||||
|
||||
// Rig broadcast (trailing slash removed)
|
||||
{"gastown/", "gastown"},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.address, func(t *testing.T) {
|
||||
got := addressToIdentity(tt.address)
|
||||
if got != tt.expected {
|
||||
t.Errorf("addressToIdentity(%q) = %q, want %q", tt.address, got, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestIdentityToAddress(t *testing.T) {
|
||||
tests := []struct {
|
||||
identity string
|
||||
expected string
|
||||
}{
|
||||
// Town-level agents
|
||||
{"mayor", "mayor/"},
|
||||
{"mayor/", "mayor/"},
|
||||
{"deacon", "deacon/"},
|
||||
{"deacon/", "deacon/"},
|
||||
|
||||
// Rig-level agents
|
||||
{"gastown-Toast", "gastown/Toast"},
|
||||
{"gastown-refinery", "gastown/refinery"},
|
||||
{"gastown-witness", "gastown/witness"},
|
||||
|
||||
// Rig name only (adds trailing slash)
|
||||
{"gastown", "gastown/"},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.identity, func(t *testing.T) {
|
||||
got := identityToAddress(tt.identity)
|
||||
if got != tt.expected {
|
||||
t.Errorf("identityToAddress(%q) = %q, want %q", tt.identity, got, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user