Add depot, attendant, jetfire, optimus, ota services with kustomize overlays
This commit is contained in:
224
services/attendant/handlers/order_updated_test.go
Normal file
224
services/attendant/handlers/order_updated_test.go
Normal file
@@ -0,0 +1,224 @@
|
||||
package handlers_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/fiskerinc/cloud-services/services/attendant/handlers"
|
||||
"github.com/fiskerinc/cloud-services/services/attendant/services"
|
||||
|
||||
"github.com/fiskerinc/cloud-services/pkg/common"
|
||||
q "github.com/fiskerinc/cloud-services/pkg/db/queries"
|
||||
"github.com/fiskerinc/cloud-services/pkg/db/queries/mocks"
|
||||
"github.com/fiskerinc/cloud-services/pkg/grpc/sms"
|
||||
"github.com/fiskerinc/cloud-services/pkg/redis/tester"
|
||||
vconfig "github.com/fiskerinc/cloud-services/pkg/vehicleconfig"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
var (
|
||||
someErr = errors.New("some error")
|
||||
vinMock = "FISKER123"
|
||||
vodMock = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
|
||||
confMock = "000000000000000000000000000000000000000"
|
||||
validOrder = common.VehicleOrder{
|
||||
SpecID: 800010200,
|
||||
OrderNumber: 8000102,
|
||||
MessageIdentifier: "VEHICLEORDERSUBMISSION",
|
||||
VehicleSpecification: common.VehicleSpecification{
|
||||
OrderIndicator: "S",
|
||||
FleetOrderIndicator: "N",
|
||||
ProductionPhaseIndicator: "01",
|
||||
VehicleIndicator: "000",
|
||||
ManufacturingPlant: "G",
|
||||
ExpectedReferenceDate: common.ExpectedReferenceDate{
|
||||
Time: time.Date(2022, 5, 26, 0, 0, 0, 0, time.UTC),
|
||||
},
|
||||
ModelType: "FM29",
|
||||
ModelYearIndicator: 2023,
|
||||
VehicleModel: "F29",
|
||||
VinPrefix: "VCF1ZBU2_PG",
|
||||
VehicleFeatures: []common.FeatureCodes{
|
||||
{
|
||||
FamilyCode: "2801",
|
||||
FeatureCode: "280102",
|
||||
},
|
||||
{
|
||||
FamilyCode: "2804",
|
||||
FeatureCode: "280401",
|
||||
},
|
||||
{
|
||||
FamilyCode: "2805",
|
||||
FeatureCode: "280501",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
validUpdateManifest = common.UpdateManifest{
|
||||
ID: 1,
|
||||
CarUpdateID: 1,
|
||||
Version: fmt.Sprint(validOrder.OrderNumber),
|
||||
Description: fmt.Sprintf("configuration %s %s", vinMock, validOrder.MessageIdentifier),
|
||||
ManifestType: common.ConfigUpdateType,
|
||||
VOD: "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
|
||||
}
|
||||
validRespECUs = []*common.UpdateManifestECU{
|
||||
{
|
||||
UpdateManifestID: 1,
|
||||
ECU: "ICC",
|
||||
Configuration: confMock,
|
||||
},
|
||||
}
|
||||
smsMock = sms.NewSMSMockSuccess()
|
||||
mockCars = mocks.MockCars{}
|
||||
)
|
||||
|
||||
func TestOrderUpdated(t *testing.T) {
|
||||
handlers.ENABLE_ORDERUPDATE_SENDS = true
|
||||
validUpdateManifestResp := validUpdateManifest
|
||||
validUpdateManifestResp.ID = 1
|
||||
validUpdateManifestResp.ECUs = validRespECUs
|
||||
|
||||
scrubbedValidUpdateManifest := validUpdateManifestResp.ToUpdateConfigManifest()
|
||||
scrubbedValidUpdateManifest.Type = "standard"
|
||||
|
||||
successPayload, _ := json.Marshal(validOrder)
|
||||
redisMock := tester.NewRedisMock()
|
||||
services.SetRedisClientPool(tester.NewMockClientPool(redisMock))
|
||||
mockSap := vconfig.SAPServiceMock{GetConfigurationMock: func(vin string) (common.SAPResponse, error) {
|
||||
return common.SAPResponse{
|
||||
ModelYear: 2023,
|
||||
ModelType: "Ocean",
|
||||
VersionDuringModelYear: "1",
|
||||
Features: []common.SAPFeature{
|
||||
{
|
||||
FamilyCode: "FamilyCode1",
|
||||
FeatureCode: "FeatureCode1",
|
||||
},
|
||||
{
|
||||
FamilyCode: "FamilyCode2",
|
||||
FeatureCode: "FeatureCode2",
|
||||
},
|
||||
{
|
||||
FamilyCode: "VOD",
|
||||
FeatureCode: vodMock,
|
||||
},
|
||||
}}, nil
|
||||
}}
|
||||
services.SetSapService(mockSap)
|
||||
mockCars.SetLoadResp(&common.Car{
|
||||
VIN: vinMock,
|
||||
ICCID: "1234567890",
|
||||
SoldStatus: common.CarSoldStatusRetailed,
|
||||
})
|
||||
|
||||
tests := map[string]struct {
|
||||
updateManifest q.UpdateManifestsInterface
|
||||
cars q.CarsInterface
|
||||
carsUpdate q.CarUpdatesInterface
|
||||
ratePlan q.RatePlanInterface
|
||||
vConfig vconfig.ConfigServiceInterface
|
||||
payload []byte
|
||||
expRedisMsgs map[string]interface{}
|
||||
expErr error
|
||||
}{
|
||||
"success": {
|
||||
updateManifest: &mocks.MockUpdateManifests{SelectResponse: []common.UpdateManifest{{ID: 1234}}},
|
||||
cars: &mockCars,
|
||||
carsUpdate: &mocks.MockCarUpdates{},
|
||||
ratePlan: &mocks.MockRatePlan{},
|
||||
vConfig: vconfig.ConfigMock{GetVODCDSCodingDataMock: SuccessGetCDSMock},
|
||||
payload: successPayload,
|
||||
expRedisMsgs: map[string]interface{}{
|
||||
"2:" + vinMock: common.Message{
|
||||
Handler: "car_update",
|
||||
Data: common.CarUpdate{
|
||||
ID: 1,
|
||||
VIN: vinMock,
|
||||
UpdateManifestID: 1,
|
||||
UpdateManifest: &validUpdateManifestResp,
|
||||
},
|
||||
},
|
||||
"1:" + vinMock: common.Message{
|
||||
Handler: "config_update",
|
||||
Data: scrubbedValidUpdateManifest,
|
||||
},
|
||||
},
|
||||
expErr: nil,
|
||||
},
|
||||
"json_parse_err": {
|
||||
payload: []byte(`12`),
|
||||
expErr: errors.New("json: cannot unmarshal number into Go value of type common.VehicleOrder"),
|
||||
},
|
||||
"failed_cars_db": {
|
||||
updateManifest: &mocks.MockUpdateManifests{SelectResponse: []common.UpdateManifest{{ID: 1234}}},
|
||||
cars: &mocks.MockCars{
|
||||
DBMockHelper: mocks.DBMockHelper{
|
||||
Error: someErr,
|
||||
},
|
||||
},
|
||||
carsUpdate: &mocks.MockCarUpdates{},
|
||||
ratePlan: &mocks.MockRatePlan{},
|
||||
vConfig: vconfig.ConfigMock{GetVODCDSCodingDataMock: SuccessGetCDSMock},
|
||||
payload: successPayload,
|
||||
expErr: someErr,
|
||||
},
|
||||
"failed_cds": {
|
||||
updateManifest: &mocks.MockUpdateManifests{SelectResponse: []common.UpdateManifest{{ID: 1234}}},
|
||||
carsUpdate: &mocks.MockCarUpdates{},
|
||||
cars: &mockCars,
|
||||
ratePlan: &mocks.MockRatePlan{},
|
||||
vConfig: vconfig.ConfigMock{GetVODCDSCodingDataMock: FailedGetCDSMock},
|
||||
payload: successPayload,
|
||||
expErr: someErr,
|
||||
},
|
||||
"failed_db": {
|
||||
updateManifest: &mocks.MockUpdateManifests{
|
||||
DBMockHelper: mocks.DBMockHelper{
|
||||
Error: someErr,
|
||||
},
|
||||
},
|
||||
cars: &mockCars,
|
||||
carsUpdate: &mocks.MockCarUpdates{},
|
||||
ratePlan: &mocks.MockRatePlan{},
|
||||
vConfig: vconfig.ConfigMock{GetVODCDSCodingDataMock: SuccessGetCDSMock},
|
||||
payload: successPayload,
|
||||
expErr: someErr,
|
||||
},
|
||||
}
|
||||
|
||||
for tname, tt := range tests {
|
||||
t.Run(tname, func(t *testing.T) {
|
||||
redisMock.Reset()
|
||||
db := services.GetDB()
|
||||
db.SetManifests(tt.updateManifest)
|
||||
db.SetCars(tt.cars)
|
||||
db.SetCarUpdates(tt.carsUpdate)
|
||||
db.SetRatePlan(tt.ratePlan)
|
||||
services.SetVehicleConfig(tt.vConfig)
|
||||
err := handlers.OrderUpdated(db, &smsMock, vinMock, tt.payload)
|
||||
if err != nil && tt.expErr != nil {
|
||||
assert.Equal(t, tt.expErr.Error(), err.Error())
|
||||
return
|
||||
}
|
||||
assert.Equal(t, tt.expErr, err)
|
||||
// assert.Equal(t, tt.expRedisMsgs, redisMock.PublishedMessages)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func SuccessGetCDSMock(request common.VODCDSRequest) (map[string]string, error) {
|
||||
ecus := map[string]string{
|
||||
"VOD": vodMock,
|
||||
"ICC": confMock,
|
||||
}
|
||||
|
||||
return ecus, nil
|
||||
}
|
||||
func FailedGetCDSMock(request common.VODCDSRequest) (map[string]string, error) {
|
||||
return nil, someErr
|
||||
}
|
||||
Reference in New Issue
Block a user