Files

113 lines
2.9 KiB
Go

package mapping
import (
"errors"
"fmt"
"testing"
)
func TestDictTranslatesPHISToOSIAndOSIToPHIS(t *testing.T) {
got, err := SexDict.PHISToOSI("1")
if err != nil {
t.Fatalf("PHISToOSI: %v", err)
}
if got != "1" {
t.Fatalf("PHISToOSI = %q, want 1", got)
}
got, err = SexDict.OSIToPHIS("2")
if err != nil {
t.Fatalf("OSIToPHIS: %v", err)
}
if got != "2" {
t.Fatalf("OSIToPHIS = %q, want 2", got)
}
}
func TestDictReturnsValidationErrorForUnknownCode(t *testing.T) {
_, err := SexDict.PHISToOSI("bad")
if err == nil {
t.Fatal("PHISToOSI accepted unknown code")
}
var validationErr ValidationError
if !errors.As(err, &validationErr) {
t.Fatalf("error type = %T, want ValidationError", err)
}
if validationErr.Field != "sexCode" || validationErr.Code != "bad" || validationErr.Direction != DirectionPHISToOSI {
t.Fatalf("validation error = %#v", validationErr)
}
}
func TestNationDictContains56EthnicGroupsAndOther(t *testing.T) {
if got := NationDict.Len(); got != 57 {
t.Fatalf("NationDict.Len = %d, want 57 including 99 other", got)
}
checks := map[string]string{
"01": "汉族",
"02": "蒙古族",
"10": "朝鲜族",
"56": "基诺族",
"99": "其他",
}
for code, wantName := range checks {
entry, ok := NationDict.EntryByOSI(code)
if !ok {
t.Fatalf("NationDict missing code %s", code)
}
if entry.Name != wantName {
t.Fatalf("NationDict[%s].Name = %q, want %q", code, entry.Name, wantName)
}
got, err := NationDict.PHISToOSI(code)
if err != nil {
t.Fatalf("Nation PHISToOSI(%s): %v", code, err)
}
if got != code {
t.Fatalf("Nation PHISToOSI(%s) = %q", code, got)
}
}
}
func TestNationDictContainsAllCodesFrom01To56(t *testing.T) {
for i := 1; i <= 56; i++ {
code := fmt.Sprintf("%02d", i)
if _, ok := NationDict.EntryByOSI(code); !ok {
t.Fatalf("NationDict missing code %s", code)
}
}
}
func TestCoreDictsContainDocumentedValues(t *testing.T) {
tests := []struct {
name string
dict Dict
code string
want string
}{
{name: "blood", dict: BloodTypeDict, code: "4", want: "AB"},
{name: "rh", dict: RhBloodDict, code: "2", want: "阴性"},
{name: "education", dict: EducationDict, code: "31", want: "大专"},
{name: "work", dict: WorkDict, code: "Y", want: "其他"},
{name: "marital", dict: MaritalStatusDict, code: "40", want: "离婚"},
{name: "insurance", dict: InsuranceDict, code: "99", want: "其他"},
{name: "personSign", dict: PersonSignDict, code: "GRQY", want: "已签约"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
entry, ok := tt.dict.EntryByOSI(tt.code)
if !ok {
t.Fatalf("missing code %s", tt.code)
}
if entry.Name != tt.want {
t.Fatalf("name = %q, want %q", entry.Name, tt.want)
}
})
}
}
func TestAllDictsRejectDuplicateCodes(t *testing.T) {
for _, dict := range AllDicts() {
if err := dict.Validate(); err != nil {
t.Fatalf("%s Validate: %v", dict.Name, err)
}
}
}