Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

INT B-21414 - TOO update for international crate approval requests #14274

Merged
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions pkg/gen/ghcapi/embedded_spec.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

51 changes: 51 additions & 0 deletions pkg/gen/ghcmessages/m_t_o_service_item.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 19 additions & 2 deletions pkg/handlers/ghcapi/internal/payloads/model_to_payload.go
Original file line number Diff line number Diff line change
Expand Up @@ -1855,8 +1855,7 @@ func MTOServiceItemModel(s *models.MTOServiceItem, storer storage.FileStorer) *g
serviceRequestDocs[i] = payload
}
}

return &ghcmessages.MTOServiceItem{
payload := &ghcmessages.MTOServiceItem{
ID: handlers.FmtUUID(s.ID),
MoveTaskOrderID: handlers.FmtUUID(s.MoveTaskOrderID),
MtoShipmentID: handlers.FmtUUIDPtr(s.MTOShipmentID),
Expand Down Expand Up @@ -1893,6 +1892,24 @@ func MTOServiceItemModel(s *models.MTOServiceItem, storer storage.FileStorer) *g
ExternalCrate: s.ExternalCrate,
LockedPriceCents: handlers.FmtCost(s.LockedPriceCents),
}

if s.ReService.Code == models.ReServiceCodeICRT && s.MTOShipment.PickupAddress != nil {
if *s.MTOShipment.PickupAddress.IsOconus {
payload.Market = handlers.FmtString(models.MarketOconus.FullString())
} else {
payload.Market = handlers.FmtString(models.MarketConus.FullString())
}
}

if s.ReService.Code == models.ReServiceCodeIUCRT && s.MTOShipment.DestinationAddress != nil {
if *s.MTOShipment.DestinationAddress.IsOconus {
payload.Market = handlers.FmtString(models.MarketOconus.FullString())
} else {
payload.Market = handlers.FmtString(models.MarketConus.FullString())
}
}

return payload
}

// SITServiceItemGrouping payload
Expand Down
164 changes: 164 additions & 0 deletions pkg/handlers/ghcapi/internal/payloads/model_to_payload_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -737,3 +737,167 @@ func (suite *PayloadsSuite) TestGsrAppeal() {
suite.False(result.IsSeriousIncident, "Expected IsSeriousIncident to be false")
})
}

func (suite *PayloadsSuite) TestMTOServiceItemModel() {
suite.Run("returns nil when MTOServiceItem is nil", func() {
var serviceItem *models.MTOServiceItem = nil
result := MTOServiceItemModel(serviceItem, suite.storer)
suite.Nil(result, "Expected result to be nil when MTOServiceItem is nil")
})

suite.Run("successfully converts MTOServiceItem to payload", func() {
serviceID := uuid.Must(uuid.NewV4())
moveID := uuid.Must(uuid.NewV4())
shipID := uuid.Must(uuid.NewV4())
reServiceID := uuid.Must(uuid.NewV4())
now := time.Now()

mockReService := models.ReService{
ID: reServiceID,
Code: models.ReServiceCodeICRT,
Name: "Some ReService",
}

mockPickupAddress := models.Address{
ID: uuid.Must(uuid.NewV4()),
IsOconus: models.BoolPointer(false),
CreatedAt: now,
UpdatedAt: now,
}

mockMTOShipment := models.MTOShipment{
ID: shipID,
PickupAddress: &mockPickupAddress,
}

mockServiceItem := models.MTOServiceItem{
ID: serviceID,
MoveTaskOrderID: moveID,
MTOShipmentID: &shipID,
MTOShipment: mockMTOShipment,
ReServiceID: reServiceID,
ReService: mockReService,
CreatedAt: now,
UpdatedAt: now,
}

result := MTOServiceItemModel(&mockServiceItem, suite.storer)
suite.NotNil(result, "Expected result to not be nil when MTOServiceItem is valid")
suite.Equal(handlers.FmtUUID(serviceID), result.ID, "Expected ID to match")
suite.Equal(handlers.FmtUUID(moveID), result.MoveTaskOrderID, "Expected MoveTaskOrderID to match")
suite.Equal(handlers.FmtUUIDPtr(&shipID), result.MtoShipmentID, "Expected MtoShipmentID to match")
suite.Equal(handlers.FmtString(models.MarketConus.FullString()), result.Market, "Expected Market to be CONUS")
})

suite.Run("sets Market to OCONUS when PickupAddress.IsOconus is true for ICRT", func() {
reServiceID := uuid.Must(uuid.NewV4())

mockReService := models.ReService{
ID: reServiceID,
Code: models.ReServiceCodeICRT,
Name: "Test ReService",
}

mockPickupAddress := models.Address{
ID: uuid.Must(uuid.NewV4()),
IsOconus: models.BoolPointer(true),
}

mockMTOShipment := models.MTOShipment{
PickupAddress: &mockPickupAddress,
}

mockServiceItem := models.MTOServiceItem{
ReService: mockReService,
MTOShipment: mockMTOShipment,
}

result := MTOServiceItemModel(&mockServiceItem, suite.storer)
suite.NotNil(result, "Expected result to not be nil for valid MTOServiceItem")
suite.Equal(handlers.FmtString(models.MarketOconus.FullString()), result.Market, "Expected Market to be OCONUS")
})

suite.Run("sets Market to CONUS when PickupAddress.IsOconus is false for ICRT", func() {
reServiceID := uuid.Must(uuid.NewV4())

mockReService := models.ReService{
ID: reServiceID,
Code: models.ReServiceCodeICRT,
Name: "Test ReService",
}

mockPickupAddress := models.Address{
ID: uuid.Must(uuid.NewV4()),
IsOconus: models.BoolPointer(false),
}

mockMTOShipment := models.MTOShipment{
PickupAddress: &mockPickupAddress,
}

mockServiceItem := models.MTOServiceItem{
ReService: mockReService,
MTOShipment: mockMTOShipment,
}

result := MTOServiceItemModel(&mockServiceItem, suite.storer)
suite.NotNil(result, "Expected result to not be nil for valid MTOServiceItem")
suite.Equal(handlers.FmtString(models.MarketConus.FullString()), result.Market, "Expected Market to be CONUS")
})

suite.Run("sets Market to CONUS when DestinationAddress.IsOconus is false for IUCRT", func() {
reServiceID := uuid.Must(uuid.NewV4())

mockReService := models.ReService{
ID: reServiceID,
Code: models.ReServiceCodeIUCRT,
Name: "Test ReService",
}

mockDestinationAddress := models.Address{
ID: uuid.Must(uuid.NewV4()),
IsOconus: models.BoolPointer(false),
}

mockMTOShipment := models.MTOShipment{
DestinationAddress: &mockDestinationAddress,
}

mockServiceItem := models.MTOServiceItem{
ReService: mockReService,
MTOShipment: mockMTOShipment,
}

result := MTOServiceItemModel(&mockServiceItem, suite.storer)
suite.NotNil(result, "Expected result to not be nil for valid MTOServiceItem")
suite.Equal(handlers.FmtString(models.MarketConus.FullString()), result.Market, "Expected Market to be CONUS")
})

suite.Run("sets Market to OCONUS when DestinationAddress.IsOconus is true for IUCRT", func() {
reServiceID := uuid.Must(uuid.NewV4())

mockReService := models.ReService{
ID: reServiceID,
Code: models.ReServiceCodeIUCRT,
Name: "Test ReService",
}

mockDestinationAddress := models.Address{
ID: uuid.Must(uuid.NewV4()),
IsOconus: models.BoolPointer(true),
}

mockMTOShipment := models.MTOShipment{
DestinationAddress: &mockDestinationAddress,
}

mockServiceItem := models.MTOServiceItem{
ReService: mockReService,
MTOShipment: mockMTOShipment,
}

result := MTOServiceItemModel(&mockServiceItem, suite.storer)
suite.NotNil(result, "Expected result to not be nil for valid MTOServiceItem")
suite.Equal(handlers.FmtString(models.MarketOconus.FullString()), result.Market, "Expected Market to be OCONUS")
})
}
6 changes: 6 additions & 0 deletions pkg/handlers/ghcapi/mto_service_items.go
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,12 @@ func (h ListMTOServiceItemsHandler) Handle(params mtoserviceitemop.ListMTOServic
if loadErr != nil {
return mtoserviceitemop.NewListMTOServiceItemsInternalServerError(), loadErr
}
} else if serviceItem.ReService.Code == models.ReServiceCodeICRT || // use address.isOconus to get 'market' value for intl crating
serviceItem.ReService.Code == models.ReServiceCodeIUCRT {
loadErr := appCtx.DB().Load(&serviceItems[i], "MTOShipment.PickupAddress", "MTOShipment.DestinationAddress")
if loadErr != nil {
return mtoserviceitemop.NewListMTOServiceItemsInternalServerError(), loadErr
}
JamesHawks224 marked this conversation as resolved.
Show resolved Hide resolved
}
}

Expand Down
3 changes: 3 additions & 0 deletions pkg/testdatagen/testharness/dispatch.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ var actionDispatcher = map[string]actionFunc{
"HHGMoveWithServiceItemsAndPaymentRequestsAndFilesForTOO": func(appCtx appcontext.AppContext) testHarnessResponse {
return MakeHHGMoveWithServiceItemsAndPaymentRequestsAndFilesForTOO(appCtx)
},
"HHGMoveWithIntlCratingServiceItemsTOO": func(appCtx appcontext.AppContext) testHarnessResponse {
return MakeHHGMoveWithIntlCratingServiceItemsTOO(appCtx)
},
"HHGMoveForTOOAfterActualPickupDate": func(appCtx appcontext.AppContext) testHarnessResponse {
return MakeHHGMoveForTOOAfterActualPickupDate(appCtx)
},
Expand Down
Loading