Skip to content

Commit

Permalink
Merge pull request #14274 from transcom/INT-B-21414-TOO-international…
Browse files Browse the repository at this point in the history
…-crate-request

INT B-21414 - TOO update for international crate approval requests
  • Loading branch information
taeJungCaci authored Nov 25, 2024
2 parents c07e5f8 + 7084688 commit 8a06cd1
Show file tree
Hide file tree
Showing 17 changed files with 1,094 additions and 3 deletions.
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
}
}
}

Expand Down
Loading

0 comments on commit 8a06cd1

Please sign in to comment.