Add depot, attendant, jetfire, optimus, ota services with kustomize overlays

This commit is contained in:
Chris Rai
2026-01-31 15:35:07 -05:00
parent a0ec642ca1
commit 9a5cb2f547
404 changed files with 38817 additions and 16 deletions

View 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
}