Skip to content

Commit

Permalink
do not require device definition id if have definition id, fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
JamesReate committed Dec 4, 2024
1 parent 5dda1f6 commit b769a38
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 6 deletions.
7 changes: 6 additions & 1 deletion internal/controllers/user_devices_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -667,7 +667,11 @@ func (udc *UserDevicesController) RegisterDeviceForUser(c *fiber.Ctx) error {
}

definitionID := reg.DefinitionID
// if definitionID is blank, it means we need to use old DeviceDefinitionID to resolve
if definitionID == "" {
if reg.DeviceDefinitionID == nil {
return fiber.NewError(fiber.StatusBadRequest, "definitionId is required")
}
url := fmt.Sprintf("%s%s", udc.Settings.DeviceDefinitionsGetByKSUIDEndpoint, *reg.DeviceDefinitionID)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
Expand Down Expand Up @@ -1785,6 +1789,7 @@ type NFTImageData struct {
}

type RegisterUserDevice struct {
// deprecated
DeviceDefinitionID *string `json:"deviceDefinitionId"`
CountryCode string `json:"countryCode"`
// DefinitionID new slug id
Expand Down Expand Up @@ -1834,7 +1839,7 @@ type UpdateImageURLReq struct {

func (reg *RegisterUserDevice) Validate() error {
return validation.ValidateStruct(reg,
validation.Field(&reg.DeviceDefinitionID, validation.Required),
// todo add DefinitionId as validated after mobile app updates
validation.Field(&reg.CountryCode, validation.Required, validation.Length(3, 3)),
)
}
Expand Down
49 changes: 44 additions & 5 deletions internal/controllers/user_devices_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,45 @@ func (s *UserDevicesControllerTestSuite) TestPostUserDeviceFromVIN_SameUser_Dupl
}

func (s *UserDevicesControllerTestSuite) TestPostWithExistingDefinitionID() {
// arrange DB
integration := test.BuildIntegrationGRPC(constants.AutoPiVendor, 10, 0)
dd := test.BuildDeviceDefinitionGRPC(ksuid.New().String(), "Ford", "F150", 2020, integration)
// act request
reg := RegisterUserDevice{
DefinitionID: dd[0].Id,
CountryCode: "USA",
}
j, _ := json.Marshal(reg)

s.userDeviceSvc.EXPECT().CreateUserDevice(gomock.Any(), dd[0].Id, "", "USA", s.testUserID, nil, nil, false).Times(1).
Return(&models.UserDevice{
ID: ksuid.New().String(),
UserID: testUserID,
DeviceDefinitionID: dd[0].DeviceDefinitionId,
DefinitionID: dd[0].Id,
CountryCode: null.StringFrom("USA"),
VinConfirmed: true,
Metadata: null.JSONFrom([]byte(`{ "powertrainType": "ICE" }`)),
}, dd[0], nil)

request := test.BuildRequest("POST", "/user/devices", string(j))
response, responseError := s.app.Test(request)
fmt.Println(responseError)
body, _ := io.ReadAll(response.Body)
// assert
if assert.Equal(s.T(), fiber.StatusCreated, response.StatusCode) == false {
fmt.Println("message: " + string(body))
}
regUserResp := UserDeviceFull{}
jsonUD := gjson.Get(string(body), "userDevice")
_ = json.Unmarshal([]byte(jsonUD.String()), &regUserResp)

assert.Len(s.T(), regUserResp.ID, 27)
assert.Len(s.T(), regUserResp.DeviceDefinition.DeviceDefinitionID, 27)
assert.Equal(s.T(), dd[0].Id, regUserResp.DeviceDefinition.DefinitionID)
}

func (s *UserDevicesControllerTestSuite) TestPostWithExistingDeviceDefinitionID() {
// arrange DB
integration := test.BuildIntegrationGRPC(constants.AutoPiVendor, 10, 0)
dd := test.BuildDeviceDefinitionGRPC(ksuid.New().String(), "Ford", "F150", 2020, integration)
Expand Down Expand Up @@ -598,7 +637,7 @@ func (s *UserDevicesControllerTestSuite) TestGetMyUserDevicesNoDuplicates() {

s.usersClient.EXPECT().GetUser(gomock.Any(), &pb.GetUserRequest{Id: s.testUserID}).Return(&pb.User{Id: s.testUserID, EthereumAddress: &addr}, nil)
s.deviceDefSvc.EXPECT().GetIntegrations(gomock.Any()).Return([]*ddgrpc.Integration{integration}, nil)
s.deviceDefSvc.EXPECT().GetDeviceDefinitionBySlug(gomock.Any(), dd[0].DeviceDefinitionId).Times(1).Return(dd[0], nil)
s.deviceDefSvc.EXPECT().GetDeviceDefinitionBySlug(gomock.Any(), dd[0].Id).Times(1).Return(dd[0], nil)

request := test.BuildRequest("GET", "/user/devices/me", "")
response, err := s.app.Test(request)
Expand Down Expand Up @@ -631,7 +670,7 @@ func (s *UserDevicesControllerTestSuite) TestPatchVIN() {
}
}

ud := test.SetupCreateUserDevice(s.T(), testUserID, dd[0].DeviceDefinitionId, nil, "", s.pdb)
ud := test.SetupCreateUserDevice(s.T(), testUserID, dd[0].Id, nil, "", s.pdb)
ud.TokenID = types.NewNullDecimal(new(decimal.Big).SetUint64(40))
_, err := ud.Update(context.TODO(), s.pdb.DBS().Writer, boil.Infer())
s.Require().NoError(err)
Expand All @@ -642,9 +681,9 @@ func (s *UserDevicesControllerTestSuite) TestPatchVIN() {
// validates that if country=USA we update the powertrain based on what the NHTSA vin decoder says

// seperate request to validate info persisted to user_device table
s.deviceDefSvc.EXPECT().GetDeviceDefinitionBySlug(gomock.Any(), []string{dd[0].DeviceDefinitionId}).Times(1).
Return(dd, nil)
s.deviceDefSvc.EXPECT().GetDeviceDefinitionBySlug(gomock.Any(), dd[0].DeviceDefinitionId).Times(1).
//s.deviceDefSvc.EXPECT().GetDeviceDefinitionBySlug(gomock.Any(), []string{dd[0].Id}).Times(1).
// Return(dd[0], nil)
s.deviceDefSvc.EXPECT().GetDeviceDefinitionBySlug(gomock.Any(), dd[0].Id).Times(2).
Return(dd[0], nil)

payload := `{ "vin": "5YJYGDEE5MF085533" }`
Expand Down

0 comments on commit b769a38

Please # to comment.