57 lines
2.2 KiB
Go
57 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"testing"
|
|
)
|
|
|
|
func TestResolveVINPrefersConsistentCurrentMapping(t *testing.T) {
|
|
current := mappingIndex{Unique: map[string]string{"沪A12345": "LA9GG64L0NBAF4175"}}
|
|
legacy := mappingIndex{Unique: map[string]string{"沪A12345": "LA9GG64L0NBAF4175"}}
|
|
vin, origin, conflict := resolveVIN("沪A12345", current, legacy)
|
|
if conflict || vin != "LA9GG64L0NBAF4175" || origin != "current_vehicle" {
|
|
t.Fatalf("unexpected resolution: vin=%q origin=%q conflict=%v", vin, origin, conflict)
|
|
}
|
|
}
|
|
|
|
func TestResolveVINRejectsCurrentLegacyConflict(t *testing.T) {
|
|
current := mappingIndex{Unique: map[string]string{"沪A12345": "LA9GG64L0NBAF4175"}}
|
|
legacy := mappingIndex{Unique: map[string]string{"沪A12345": "LA9GG64L0NBAF4176"}}
|
|
vin, _, conflict := resolveVIN("沪A12345", current, legacy)
|
|
if !conflict || vin != "" {
|
|
t.Fatalf("expected conflict rejection, got vin=%q conflict=%v", vin, conflict)
|
|
}
|
|
}
|
|
|
|
func TestResolveVINUsesLegacyFallback(t *testing.T) {
|
|
current := mappingIndex{Unique: map[string]string{}}
|
|
legacy := mappingIndex{Unique: map[string]string{"沪A12345": "LA9GG64L0NBAF4175"}}
|
|
vin, origin, conflict := resolveVIN("沪A12345", current, legacy)
|
|
if conflict || vin != "LA9GG64L0NBAF4175" || origin != "legacy_vehicle" {
|
|
t.Fatalf("unexpected resolution: vin=%q origin=%q conflict=%v", vin, origin, conflict)
|
|
}
|
|
}
|
|
|
|
func TestResolveVINAcceptsSourceVIN(t *testing.T) {
|
|
vin, origin, conflict := resolveVIN("LA9GG64L0NBAF4175", mappingIndex{}, mappingIndex{})
|
|
if conflict || vin != "LA9GG64L0NBAF4175" || origin != "source_vin" {
|
|
t.Fatalf("unexpected resolution: vin=%q origin=%q conflict=%v", vin, origin, conflict)
|
|
}
|
|
}
|
|
|
|
func TestNormalizeIdentifierRemovesWhitespace(t *testing.T) {
|
|
if got := normalizeIdentifier(" 沪 a 12345 \n"); got != "沪A12345" {
|
|
t.Fatalf("normalizeIdentifier() = %q", got)
|
|
}
|
|
}
|
|
|
|
func TestNullableTotalMileageConvertsMetersToKM(t *testing.T) {
|
|
got := nullableTotalMileageKM(sql.NullFloat64{Float64: 59198000, Valid: true})
|
|
if got != 59198.0 {
|
|
t.Fatalf("nullableTotalMileageKM() = %#v", got)
|
|
}
|
|
if got := nullableTotalMileageKM(sql.NullFloat64{}); got != nil {
|
|
t.Fatalf("invalid mileage should remain nil, got %#v", got)
|
|
}
|
|
}
|