113 lines
2.9 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|