From b769a38eab37f37034f8fbebc54fa78b8d4e6ff7 Mon Sep 17 00:00:00 2001 From: James Reategui Date: Wed, 4 Dec 2024 15:09:49 -0500 Subject: [PATCH] do not require device definition id if have definition id, fix tests --- .../controllers/user_devices_controller.go | 7 ++- .../user_devices_controller_test.go | 49 +++++++++++++++++-- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/internal/controllers/user_devices_controller.go b/internal/controllers/user_devices_controller.go index f761c0a4..2559b3a0 100644 --- a/internal/controllers/user_devices_controller.go +++ b/internal/controllers/user_devices_controller.go @@ -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 { @@ -1785,6 +1789,7 @@ type NFTImageData struct { } type RegisterUserDevice struct { + // deprecated DeviceDefinitionID *string `json:"deviceDefinitionId"` CountryCode string `json:"countryCode"` // DefinitionID new slug id @@ -1834,7 +1839,7 @@ type UpdateImageURLReq struct { func (reg *RegisterUserDevice) Validate() error { return validation.ValidateStruct(reg, - validation.Field(®.DeviceDefinitionID, validation.Required), + // todo add DefinitionId as validated after mobile app updates validation.Field(®.CountryCode, validation.Required, validation.Length(3, 3)), ) } diff --git a/internal/controllers/user_devices_controller_test.go b/internal/controllers/user_devices_controller_test.go index 0d1cd24d..49e167a0 100644 --- a/internal/controllers/user_devices_controller_test.go +++ b/internal/controllers/user_devices_controller_test.go @@ -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()), ®UserResp) + + 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) @@ -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) @@ -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) @@ -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" }`