193 lines
4.9 KiB
Go
193 lines
4.9 KiB
Go
package utils
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"fiskerinc.com/modules/common"
|
|
"github.com/pkg/errors"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestParseVIN(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
testVin string
|
|
expectedCar *common.Car
|
|
expectedErr error
|
|
}{
|
|
{
|
|
name: "empty vin",
|
|
testVin: "",
|
|
expectedCar: nil,
|
|
expectedErr: errors.Errorf("vin is empty"),
|
|
},
|
|
{
|
|
name: "invalid vin",
|
|
testVin: "XXXXXXXXXXXXXXXXX",
|
|
expectedCar: nil,
|
|
expectedErr: errors.Errorf("vin XXXXXXXXXXXXXXXXX is invalid"),
|
|
},
|
|
{
|
|
name: "invalid fisker vin",
|
|
testVin: "VCFQQQQQQQQQQQQQQ",
|
|
expectedCar: nil,
|
|
expectedErr: errors.Errorf("vin VCFQQQQQQQQQQQQQQ is invalid"),
|
|
},
|
|
{
|
|
name: "invalid checksum Fisker vin",
|
|
testVin: "VCF1ZBU28PG159581",
|
|
expectedCar: nil,
|
|
expectedErr: errors.Errorf("vin VCF1ZBU28PG159581 is invalid"),
|
|
},
|
|
{
|
|
name: "non-fisker vin",
|
|
testVin: "1G1FP87S3GN100062",
|
|
expectedCar: &common.Car{
|
|
VIN: "1G1FP87S3GN100062",
|
|
Country: defaultCountry,
|
|
Model: defaultModel,
|
|
Trim: defaultTrim,
|
|
Year: defaultYear,
|
|
Powertrain: defaultPowertrain,
|
|
Restraint: defaultRestraint,
|
|
BodyType: defaultBodyType,
|
|
},
|
|
expectedErr: nil,
|
|
},
|
|
{
|
|
name: "fisker vin",
|
|
testVin: "VCF1EBE25PG001013",
|
|
expectedCar: &common.Car{
|
|
VIN: "VCF1EBE25PG001013",
|
|
Country: "Austria",
|
|
Model: "Ocean",
|
|
Trim: "Extreme",
|
|
Year: 2023,
|
|
Powertrain: "LBP/DM/AWD",
|
|
Restraint: "EU Specs",
|
|
BodyType: "5-Door MPV, 5-Seater, Class E",
|
|
},
|
|
expectedErr: nil,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Log(test.name)
|
|
|
|
car, err := ParseVIN(test.testVin)
|
|
|
|
if test.expectedErr != nil {
|
|
assert.Equal(t, test.expectedErr.Error(), err.Error())
|
|
} else {
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
if test.expectedCar != nil {
|
|
assert.Equal(t, test.expectedCar.VIN, car.VIN)
|
|
assert.Equal(t, test.expectedCar.Country, car.Country)
|
|
assert.Equal(t, test.expectedCar.Model, car.Model)
|
|
assert.Equal(t, test.expectedCar.Trim, car.Trim)
|
|
assert.Equal(t, test.expectedCar.Year, car.Year)
|
|
assert.Equal(t, test.expectedCar.Powertrain, car.Powertrain)
|
|
assert.Equal(t, test.expectedCar.Restraint, car.Restraint)
|
|
assert.Equal(t, test.expectedCar.BodyType, car.BodyType)
|
|
} else {
|
|
assert.Nil(t, car)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseVINs(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
testVins []string
|
|
expectedCars []*common.Car
|
|
expectedErr error
|
|
}{
|
|
{
|
|
name: "valid vin",
|
|
testVins: []string{"VCF1UBE22PG888888"},
|
|
expectedCars: []*common.Car{{
|
|
VIN: "VCF1UBE22PG888888",
|
|
Country: "Austria",
|
|
Model: "Ocean",
|
|
Trim: "Extreme",
|
|
Year: 2023,
|
|
Powertrain: "LBP/DM/AWD",
|
|
Restraint: "EU Specs",
|
|
BodyType: "5-Door MPV, 5-Seater, Class E",
|
|
}},
|
|
expectedErr: errors.Errorf(`vins ["VCF1UBE22PG888888"] are invalid`),
|
|
},
|
|
{
|
|
name: "empty vin list",
|
|
testVins: nil,
|
|
expectedCars: nil,
|
|
expectedErr: errors.Errorf("vin list is empty"),
|
|
},
|
|
{
|
|
name: "invalid vin",
|
|
testVins: []string{"XXXXXXXXXXXXXXXXX"},
|
|
expectedCars: nil,
|
|
expectedErr: errors.Errorf("vins [\"XXXXXXXXXXXXXXXXX\"] are invalid"),
|
|
},
|
|
{
|
|
name: "valid vin",
|
|
testVins: []string{"VCF1EBE25PG001013"},
|
|
expectedCars: []*common.Car{{
|
|
VIN: "VCF1EBE25PG001013",
|
|
Country: "Austria",
|
|
Model: "Ocean",
|
|
Trim: "Extreme",
|
|
Year: 2023,
|
|
Powertrain: "LBP/DM/AWD",
|
|
Restraint: "EU Specs",
|
|
BodyType: "5-Door MPV, 5-Seater, Class E",
|
|
}},
|
|
expectedErr: nil,
|
|
},
|
|
{
|
|
name: "partially valid vins",
|
|
testVins: []string{"VCF1EBE25PG001013", "XXXXXXXXXXXXXXXXX"},
|
|
expectedCars: []*common.Car{{
|
|
VIN: "VCF1EBE25PG001013",
|
|
Country: "Austria",
|
|
Model: "Ocean",
|
|
Trim: "Extreme",
|
|
Year: 2023,
|
|
Powertrain: "LBP/DM/AWD",
|
|
Restraint: "EU Specs",
|
|
BodyType: "5-Door MPV, 5-Seater, Class E",
|
|
}},
|
|
expectedErr: errors.Errorf("vins [\"XXXXXXXXXXXXXXXXX\"] are invalid"),
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Log(test.name)
|
|
|
|
cars, err := ParseVINs(test.testVins)
|
|
|
|
if test.expectedErr != nil {
|
|
assert.Equal(t, test.expectedErr.Error(), err.Error())
|
|
} else {
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
for i, car := range cars {
|
|
if test.expectedCars[i] != nil {
|
|
assert.Equal(t, test.expectedCars[i].VIN, car.VIN)
|
|
assert.Equal(t, test.expectedCars[i].Country, car.Country)
|
|
assert.Equal(t, test.expectedCars[i].Model, car.Model)
|
|
assert.Equal(t, test.expectedCars[i].Trim, car.Trim)
|
|
assert.Equal(t, test.expectedCars[i].Year, car.Year)
|
|
assert.Equal(t, test.expectedCars[i].Powertrain, car.Powertrain)
|
|
assert.Equal(t, test.expectedCars[i].Restraint, car.Restraint)
|
|
assert.Equal(t, test.expectedCars[i].BodyType, car.BodyType)
|
|
} else {
|
|
assert.Nil(t, car)
|
|
}
|
|
}
|
|
}
|
|
}
|