A page per delivery (`/deliveries/{id}`), reached from the *Details* link on
Added:
- A page per delivery (`/deliveries/{id}`), reached from the *Details* link on
- A **DNS** badge in the domain list, one per row, carrying the same
- Machine metrics on the status page: a **Machine** card reporting the
- An index of the current page's own sections in the navigation column, for the
Changed:
- Every panel page is laid out in one column of the same width, so moving
- The mark's small-size variant — the tab icon and the `SP` initials it
- The stamp's `SELF-HOSTED SMTP RELAY` line is set at 11.5/0.15 instead of
- The delivery log lists what identifies a message and nothing else: time,
- Subjects are decoded for display as well as on the way in, so the rows the
… (4 more in CHANGELOG)
Full detail: CHANGELOG.md (0.6.0).
39 lines
1.3 KiB
Go
39 lines
1.3 KiB
Go
package mailhdr
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestDecodeSubject(t *testing.T) {
|
|
long := strings.Repeat("я", SubjectMaxRunes+10)
|
|
|
|
for _, tc := range []struct {
|
|
name, raw, want string
|
|
}{
|
|
{"plain", "Hello there", "Hello there"},
|
|
{"utf8 q", "=?utf-8?Q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0?=", "Проверка"},
|
|
{"utf8 b, folded across two words", "=?utf-8?B?0J/RgNC40LLQtdGC?=\r\n =?utf-8?B?INC80LjRgA==?=", "Привет мир"},
|
|
// No decoder for the legacy single-byte charsets: keep the header as
|
|
// sent rather than losing the subject entirely.
|
|
{"unknown charset", "=?windows-1251?B?z/Do4uXy?=", "=?windows-1251?B?z/Do4uXy?="},
|
|
{"too long", long, strings.Repeat("я", SubjectMaxRunes) + "…"},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
if got := DecodeSubject(tc.raw); got != tc.want {
|
|
t.Fatalf("DecodeSubject(%q) = %q, want %q", tc.raw, got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// The panel decodes on the way out as well as the milter on the way in, so
|
|
// every already-decoded row in the send log passes through a second time.
|
|
func TestDecodeSubjectIsIdempotent(t *testing.T) {
|
|
for _, s := range []string{"Проверка", "Hello there", "", "=?windows-1251?B?z/Do4uXy?="} {
|
|
if got := DecodeSubject(DecodeSubject(s)); got != DecodeSubject(s) {
|
|
t.Fatalf("second pass over %q changed it to %q", s, got)
|
|
}
|
|
}
|
|
}
|