Files
OpsLog/internal/lookup/homecall_test.go
T
2026-07-26 16:57:19 +02:00

63 lines
2.1 KiB
Go

package lookup
import "testing"
func TestHomeCall(t *testing.T) {
cases := map[string]string{
"JW/OR1A": "OR1A", // portable prefix → home call
"DL/F4NIE": "F4NIE", // prefix/home
"F4BPO/P": "F4BPO", // suffix dropped
"F4BPO/9": "F4BPO", // call-area digit dropped
"VP8/F4BPO": "F4BPO", // both have digits → longest wins
"MM/KA9P": "KA9P", // Scotland prefix + US home
"OH2BH": "OH2BH", // no slash → unchanged
"3D2/RW3RN": "RW3RN",
}
for in, want := range cases {
if got := homeCall(in); got != want {
t.Errorf("homeCall(%q) = %q, want %q", in, got, want)
}
}
}
// Mobile and maritime-mobile suffixes: /M is the case that surfaced in the field
// (F4LYI/M resolved only to cty.dat while F4LYI resolved on QRZ), so pin the
// whole suffix family — the home call is what the provider record is filed under.
func TestHomeCallSuffixes(t *testing.T) {
for call, want := range map[string]string{
"F4LYI/M": "F4LYI",
"F4LYI/MM": "F4LYI",
"F4LYI/AM": "F4LYI",
"F4LYI/QRP": "F4LYI",
"F4LYI/A": "F4LYI",
"F4LYI/B": "F4LYI",
} {
if got := homeCall(call); got != want {
t.Errorf("homeCall(%q) = %q, want %q", call, got, want)
}
}
}
// Operational suffixes must resolve to the bare call WITHOUT a provider query on
// the slashed form; entity- and area-changing forms must not be stripped.
func TestStripOpSuffix(t *testing.T) {
strip := map[string]string{
"F4LYI/M": "F4LYI", "F4LYI/MM": "F4LYI", "F4LYI/AM": "F4LYI",
"F4LYI/P": "F4LYI", "F4LYI/QRP": "F4LYI", "F4LYI/p": "F4LYI",
"F4BPO/M/P": "F4BPO",
}
for call, want := range strip {
got, ok := stripOpSuffix(call)
if !ok || got != want {
t.Errorf("stripOpSuffix(%q) = %q,%v — want %q,true", call, got, ok, want)
}
}
// These change the entity or the call area: they are real, separately
// registered forms and must be queried exactly as entered.
for _, call := range []string{"JW/OR1A", "VP8/F4BPO", "F4BPO/8", "DL/F4NIE", "OH2BH", "F4BPO/W6"} {
if got, ok := stripOpSuffix(call); ok {
t.Errorf("stripOpSuffix(%q) stripped to %q — it changes entity/area and must be kept", call, got)
}
}
}