Initial cloud-services repo - gateway service + pkg modules
This commit is contained in:
210
pkg/vindecoder/vin_check_test.go
Normal file
210
pkg/vindecoder/vin_check_test.go
Normal file
@@ -0,0 +1,210 @@
|
||||
package vindecoder_test
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"fiskerinc.com/modules/testhelper"
|
||||
"fiskerinc.com/modules/vindecoder"
|
||||
)
|
||||
|
||||
var vwGer2013Valid = "WVWBN7AN6DE546002"
|
||||
var vwGer2013Invalid1 = "WVWBN7AN1DE546002"
|
||||
var vwGer2013Invalid2 = "WVWBN7AN6DE54600"
|
||||
var miniGer2009Valid = "WMWMS335X9TY38985"
|
||||
var bugatFra1998Valid = "VF9SP3V31JM795073"
|
||||
var dodgeUsa1998Valid = "1B3ES42C4WD736523"
|
||||
var fiskerVinValid = "VCF1ZBU23PG001209"
|
||||
|
||||
// TEMP
|
||||
var fskUsa2021Valid = "1F1BN7AN7MA000001"
|
||||
|
||||
// TEMP
|
||||
|
||||
//var unkJap2013Valid = "JS1GR7MA7D2101136"
|
||||
//var audiGer2012Valid = "WAUFFAFM3CA000000"
|
||||
|
||||
func TestVinDecoderCountry(t *testing.T) {
|
||||
// there should be more tests for cases where second character is 1-9, 0, but it's hard to find valid vins
|
||||
|
||||
// USA
|
||||
vi1, _ := vindecoder.DecodeVIN(dodgeUsa1998Valid)
|
||||
if !strings.Contains(vi1.Country, "United States") {
|
||||
t.Errorf(testhelper.TestErrorTemplate, dodgeUsa1998Valid, "United States", vi1.Country)
|
||||
}
|
||||
|
||||
// Germany
|
||||
vi2, _ := vindecoder.DecodeVIN(vwGer2013Valid)
|
||||
if !strings.Contains(vi2.Country, "Germany") {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Valid, "Germany", vi2.Country)
|
||||
}
|
||||
valid := vindecoder.ValidateVINSimple(fiskerVinValid)
|
||||
if !valid {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fiskerVinValid, "Invalid", vi2.Country)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestVinDecoderWmi(t *testing.T) {
|
||||
// normal
|
||||
vi1, _ := vindecoder.DecodeVIN(vwGer2013Valid)
|
||||
if !strings.Contains(vi1.Manufacturer, "Volkswagen") {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Valid, "Volkswagen", vi1.Manufacturer)
|
||||
}
|
||||
|
||||
// small production
|
||||
vi2, _ := vindecoder.DecodeVIN(bugatFra1998Valid)
|
||||
if !strings.Contains(vi2.Manufacturer, "Bugatti") {
|
||||
t.Errorf(testhelper.TestErrorTemplate, bugatFra1998Valid, "Bugatti", vi2.Manufacturer)
|
||||
}
|
||||
|
||||
// wild card
|
||||
mfg1 := vindecoder.LookupManufacturerByWmiCode("4F3")
|
||||
if !strings.Contains(mfg1, "Mazda") {
|
||||
t.Errorf(testhelper.TestErrorTemplate, "4F3", "Mazda", mfg1)
|
||||
}
|
||||
|
||||
// normal unknown wmi
|
||||
mfg2 := vindecoder.LookupManufacturerByWmiCode("JM2")
|
||||
if mfg2 != "JM2" {
|
||||
t.Errorf(testhelper.TestErrorTemplate, "JM2", "JM2", mfg2)
|
||||
}
|
||||
|
||||
// TEMP
|
||||
// normal
|
||||
viFsk, _ := vindecoder.DecodeVIN(fskUsa2021Valid)
|
||||
if !strings.Contains(viFsk.Manufacturer, "Fisker") {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fskUsa2021Valid, "Fisker", viFsk.Manufacturer)
|
||||
}
|
||||
// TEMP
|
||||
}
|
||||
|
||||
func TestVinDecoderSerialNumber(t *testing.T) {
|
||||
// normal
|
||||
vi1, _ := vindecoder.DecodeVIN(vwGer2013Valid)
|
||||
if vi1.SerialNumber != "546002" {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Valid, "546002", vi1.SerialNumber)
|
||||
}
|
||||
|
||||
// small production
|
||||
vi2, _ := vindecoder.DecodeVIN(bugatFra1998Valid)
|
||||
if vi2.SerialNumber != "073" {
|
||||
t.Errorf(testhelper.TestErrorTemplate, bugatFra1998Valid, "073", vi2.SerialNumber)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVinDecoderCheckDigit(t *testing.T) {
|
||||
// valid
|
||||
vi1, ok := vindecoder.DecodeVIN(vwGer2013Valid)
|
||||
if ok == false {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Valid, true, ok)
|
||||
}
|
||||
if !vi1.IsValid {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Valid, true, vi1.IsValid)
|
||||
}
|
||||
|
||||
// valid - lowercase
|
||||
var vwGer2013Valid_lower = strings.ToLower(vwGer2013Valid)
|
||||
vi1a, ok := vindecoder.DecodeVIN(vwGer2013Valid_lower)
|
||||
if ok == false {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Valid_lower, true, ok)
|
||||
}
|
||||
if !vi1a.IsValid {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Valid_lower, true, vi1a.IsValid)
|
||||
}
|
||||
|
||||
// invalid
|
||||
vi2, ok := vindecoder.DecodeVIN(vwGer2013Invalid1)
|
||||
if ok == true {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Invalid1, false, ok)
|
||||
}
|
||||
if vi2.IsValid {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Invalid1, false, vi2.IsValid)
|
||||
}
|
||||
|
||||
vi3, ok := vindecoder.DecodeVIN(vwGer2013Invalid2)
|
||||
if ok == true {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Invalid2, false, ok)
|
||||
}
|
||||
if vi3.IsValid {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Invalid2, false, vi3.IsValid)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVinDecoderYear(t *testing.T) {
|
||||
// before 2010
|
||||
vi1, _ := vindecoder.DecodeVIN(miniGer2009Valid)
|
||||
if vi1.Year != 2009 {
|
||||
t.Errorf(testhelper.TestErrorTemplate, miniGer2009Valid, 2013, vi1.Year)
|
||||
}
|
||||
|
||||
// after 2010
|
||||
vi2, _ := vindecoder.DecodeVIN(vwGer2013Valid)
|
||||
if vi2.Year != 2013 {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Valid, 2013, vi2.Year)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVinDecoderModelDetails(t *testing.T) {
|
||||
vi, _ := vindecoder.DecodeVIN(vwGer2013Valid)
|
||||
if vi.ModelDetails != "BN7AN" {
|
||||
t.Errorf(testhelper.TestErrorTemplate, vwGer2013Valid, "BN7AN", vi.ModelDetails)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNextVin(t *testing.T) {
|
||||
// test vin generation
|
||||
startVin := "WVWBN7AN6DE546002"
|
||||
nextVin, err := vindecoder.NextVIN(startVin)
|
||||
if err != nil {
|
||||
t.Errorf(testhelper.TestErrorTemplate, startVin, "nil", err)
|
||||
}
|
||||
if strings.LastIndex(nextVin, "546003") < 0 {
|
||||
t.Errorf(testhelper.TestErrorTemplate, startVin, "WVWBN7AN*DE546003", nextVin)
|
||||
}
|
||||
|
||||
startVin = "WVWBN7AN6DE546XX9"
|
||||
nextVin, err = vindecoder.NextVIN(startVin)
|
||||
if err != nil {
|
||||
t.Errorf(testhelper.TestErrorTemplate, startVin, "nil", err)
|
||||
}
|
||||
if strings.LastIndex(nextVin, "546X00") < 0 {
|
||||
t.Errorf(testhelper.TestErrorTemplate, startVin, "WVWBN7AN6DE546X00", nextVin)
|
||||
}
|
||||
|
||||
startVin = "WVWBN7AN6DE546999"
|
||||
nextVin, err = vindecoder.NextVIN(startVin)
|
||||
if err != nil {
|
||||
t.Errorf(testhelper.TestErrorTemplate, startVin, "nil", err)
|
||||
}
|
||||
if strings.LastIndex(nextVin, "547000") < 0 {
|
||||
t.Errorf(testhelper.TestErrorTemplate, startVin, "WVWBN7AN6DE547000", nextVin)
|
||||
}
|
||||
|
||||
startVin = "WVWBN7AN6DE999999"
|
||||
nextVin, err = vindecoder.NextVIN(startVin)
|
||||
if err == nil {
|
||||
t.Errorf(testhelper.TestErrorTemplate, startVin, "overflow", "nil")
|
||||
}
|
||||
if strings.LastIndex(nextVin, "000000") < 0 {
|
||||
t.Errorf(testhelper.TestErrorTemplate, startVin, "WVWBN7AN6DE000000", nextVin)
|
||||
}
|
||||
|
||||
startVin = "WVWBN7AN6DE999995"
|
||||
nextVins, err := vindecoder.NextNVINs(startVin, 10)
|
||||
if err == nil {
|
||||
t.Errorf(testhelper.TestErrorTemplate, startVin, "rollover", "nil")
|
||||
}
|
||||
if len(nextVins) != 10 {
|
||||
t.Errorf(testhelper.TestErrorTemplate, startVin, 10, len(nextVins))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestEmptyVIN(t *testing.T){
|
||||
ok := vindecoder.ValidateVINSimple("")
|
||||
if ok {
|
||||
t.Error("Expected Invalid VIN")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user