From 9f010405c30b7f08df32b54d55d99ce56f478a9a Mon Sep 17 00:00:00 2001 From: Tevin Adams Date: Fri, 24 Jan 2025 03:48:52 +0000 Subject: [PATCH] Additional Test Coverage --- .../mto_shipment/mto_shipment_updater_test.go | 407 ++++++++++++------ 1 file changed, 265 insertions(+), 142 deletions(-) diff --git a/pkg/services/mto_shipment/mto_shipment_updater_test.go b/pkg/services/mto_shipment/mto_shipment_updater_test.go index 4676a662690..3d0ffc57888 100644 --- a/pkg/services/mto_shipment/mto_shipment_updater_test.go +++ b/pkg/services/mto_shipment/mto_shipment_updater_test.go @@ -237,148 +237,6 @@ func (suite *MTOShipmentServiceSuite) TestMTOShipmentUpdater() { mockShipmentRecalculator.AssertNotCalled(suite.T(), "ShipmentRecalculatePaymentRequest", mock.AnythingOfType("*appcontext.appContext"), mock.AnythingOfType("uuid.UUID")) }) - suite.Run("should error when unable to find IntlTransit time when updating UB Shipment", func() { - testdatagen.FetchOrMakeReContractYear(suite.DB(), testdatagen.Assertions{ - ReContractYear: models.ReContractYear{ - StartDate: time.Now().AddDate(-1, 0, 0), - EndDate: time.Now().AddDate(1, 0, 0), - }, - }) - - moveWithUb := factory.BuildAvailableToPrimeMove(suite.DB(), nil, nil) - - testScheduledPickupDate := time.Now().AddDate(0, -5, 0) - testScheduledPickupDate2 := time.Now().AddDate(0, -2, 0) - primeEstimatedWeight = unit.Pound(9000) - - oldUBMTOShipment := factory.BuildMTOShipment(suite.DB(), []factory.Customization{ - { - Model: models.MTOShipment{ - MarketCode: models.MarketCodeInternational, - Status: models.MTOShipmentStatusApproved, - ShipmentType: models.MTOShipmentTypeUnaccompaniedBaggage, - PrimeEstimatedWeight: &primeEstimatedWeight, - ScheduledPickupDate: &testScheduledPickupDate, - }, - }, - { - Model: moveWithUb, - LinkOnly: true, - }, - }, nil) - oldUBMTOShipment.ScheduledPickupDate = &testScheduledPickupDate - mtoShipment := models.MTOShipment{ - ID: oldUBMTOShipment.ID, - ShipmentType: models.MTOShipmentTypeUnaccompaniedBaggage, - ScheduledPickupDate: &testScheduledPickupDate2, - } - - eTag := etag.GenerateEtag(oldUBMTOShipment.UpdatedAt) - session := auth.Session{} - - updatedMTOShipment, err := mtoShipmentUpdaterPrime.UpdateMTOShipment(suite.AppContextWithSessionForTest(&session), &mtoShipment, eTag, "test") - - suite.Error(err) - suite.Nil(updatedMTOShipment) - suite.IsType(apperror.QueryError{}, err) - queryErr := err.(apperror.QueryError) - wrappedErr := queryErr.Unwrap() - suite.IsType(apperror.QueryError{}, wrappedErr) - suite.Equal("could not look up intl transit time", wrappedErr.Error()) - }) - - suite.Run("should update requiredDeliveryDate when scheduledPickupDate is updated", func() { - testdatagen.FetchOrMakeReContractYear(suite.DB(), testdatagen.Assertions{ - ReContractYear: models.ReContractYear{ - StartDate: time.Now().AddDate(-1, 0, 0), - EndDate: time.Now().AddDate(1, 0, 0), - }, - }) - - moveWithUb := factory.BuildAvailableToPrimeMove(suite.DB(), nil, nil) - - testScheduledPickupDate := time.Now().AddDate(0, -5, 0) - testScheduledPickupDate2 := time.Now().AddDate(0, -2, 0) - primeEstimatedWeight = unit.Pound(9000) - - usPostRegionPickup, err := uuid.FromString("d47d5da4-10d2-41f9-9985-d7dd0f05d98c") - suite.NoError(err) - - usPostRegionDest, err := uuid.FromString("4cb599d1-c12a-43e3-988c-d43d5641f291") - suite.NoError(err) - - // Create the addresses - pickupAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ - { - Model: models.Address{ - StreetAddress1: "987 Other Avenue", - StreetAddress2: models.StringPointer("P.O. Box 1234"), - StreetAddress3: models.StringPointer("c/o Another Person"), - City: "Columbia", - State: "SC", - PostalCode: "29228", - IsOconus: models.BoolPointer(false), - UsPostRegionCityID: &usPostRegionPickup, - }, - }, - }, nil) - - destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ - { - Model: models.Address{ - StreetAddress1: "987 Other Avenue", - StreetAddress2: models.StringPointer("P.O. Box 12345"), - StreetAddress3: models.StringPointer("c/o Another Person"), - City: "Eielson AFB", - State: "AK", - PostalCode: "99702", - IsOconus: models.BoolPointer(true), - UsPostRegionCityID: &usPostRegionDest, - }, - }, - }, nil) - - var requiredDeliveryDate time.Time - oldUBMTOShipment := factory.BuildMTOShipment(suite.DB(), []factory.Customization{ - { - Model: models.MTOShipment{ - MarketCode: models.MarketCodeInternational, - Status: models.MTOShipmentStatusApproved, - ShipmentType: models.MTOShipmentTypeUnaccompaniedBaggage, - PrimeEstimatedWeight: &primeEstimatedWeight, - ScheduledPickupDate: &testScheduledPickupDate, - PickupAddressID: &pickupAddress.ID, - DestinationAddressID: &destinationAddress.ID, - RequiredDeliveryDate: &requiredDeliveryDate, - }, - }, - { - Model: moveWithUb, - LinkOnly: true, - }, - }, nil) - - mtoShipment := models.MTOShipment{ - ID: oldUBMTOShipment.ID, - ShipmentType: models.MTOShipmentTypeUnaccompaniedBaggage, - ScheduledPickupDate: &testScheduledPickupDate2, - } - - eTag := etag.GenerateEtag(oldUBMTOShipment.UpdatedAt) - session := auth.Session{} - - updatedMTOShipment, err := mtoShipmentUpdaterPrime.UpdateMTOShipment(suite.AppContextWithSessionForTest(&session), &mtoShipment, eTag, "test") - - suite.Nil(err) - suite.NotNil(updatedMTOShipment) - suite.NotNil(updatedMTOShipment.RequiredDeliveryDate) - - expectedDate := time.Date(2024, 12, 18, 0, 0, 0, 0, time.Now().UTC().Location()) - suite.Equal(expectedDate.Year(), updatedMTOShipment.RequiredDeliveryDate.Year()) - suite.Equal(expectedDate.Month(), updatedMTOShipment.RequiredDeliveryDate.Month()) - suite.Equal(expectedDate.Day(), updatedMTOShipment.RequiredDeliveryDate.Day()) - }) - suite.Run("Successfully remove a secondary pickup address", func() { setupTestData() @@ -3696,3 +3554,268 @@ func (suite *MTOShipmentServiceSuite) TestUpdateDomesticServiceItems() { } }) } + +func (suite *MTOShipmentServiceSuite) TestUpdateRequiredDeliveryDateUpdate() { + + builder := query.NewQueryBuilder() + fetcher := fetch.NewFetcher(builder) + planner := &mocks.Planner{} + planner.On("ZipTransitDistance", + mock.AnythingOfType("*appcontext.appContext"), + mock.Anything, + mock.Anything, + false, + ).Return(1000, nil) + moveRouter := moveservices.NewMoveRouter() + waf := entitlements.NewWeightAllotmentFetcher() + moveWeights := moveservices.NewMoveWeights(NewShipmentReweighRequester(), waf) + mockShipmentRecalculator := mockservices.PaymentRequestShipmentRecalculator{} + mockShipmentRecalculator.On("ShipmentRecalculatePaymentRequest", + mock.AnythingOfType("*appcontext.appContext"), + mock.AnythingOfType("uuid.UUID"), + ).Return(&models.PaymentRequests{}, nil) + mockSender := setUpMockNotificationSender() + addressCreator := address.NewAddressCreator() + addressUpdater := address.NewAddressUpdater() + + mtoShipmentUpdaterPrime := NewPrimeMTOShipmentUpdater(builder, fetcher, planner, moveRouter, moveWeights, mockSender, &mockShipmentRecalculator, addressUpdater, addressCreator) + + suite.Run("should error when unable to find IntlTransit time when updating UB Shipment", func() { + testdatagen.FetchOrMakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + StartDate: time.Now().AddDate(-1, 0, 0), + EndDate: time.Now().AddDate(1, 0, 0), + }, + }) + + moveWithUb := factory.BuildAvailableToPrimeMove(suite.DB(), nil, nil) + + testScheduledPickupDate := time.Now().AddDate(0, -5, 0) + testScheduledPickupDate2 := time.Now().AddDate(0, -2, 0) + primeEstimatedWeight := unit.Pound(9000) + + oldUBMTOShipment := factory.BuildMTOShipment(suite.DB(), []factory.Customization{ + { + Model: models.MTOShipment{ + MarketCode: models.MarketCodeInternational, + Status: models.MTOShipmentStatusApproved, + ShipmentType: models.MTOShipmentTypeUnaccompaniedBaggage, + PrimeEstimatedWeight: &primeEstimatedWeight, + ScheduledPickupDate: &testScheduledPickupDate, + }, + }, + { + Model: moveWithUb, + LinkOnly: true, + }, + }, nil) + oldUBMTOShipment.ScheduledPickupDate = &testScheduledPickupDate + mtoShipment := models.MTOShipment{ + ID: oldUBMTOShipment.ID, + ShipmentType: models.MTOShipmentTypeUnaccompaniedBaggage, + ScheduledPickupDate: &testScheduledPickupDate2, + } + + eTag := etag.GenerateEtag(oldUBMTOShipment.UpdatedAt) + session := auth.Session{} + + updatedMTOShipment, err := mtoShipmentUpdaterPrime.UpdateMTOShipment(suite.AppContextWithSessionForTest(&session), &mtoShipment, eTag, "test") + + suite.Error(err) + suite.Nil(updatedMTOShipment) + suite.IsType(apperror.QueryError{}, err) + queryErr := err.(apperror.QueryError) + wrappedErr := queryErr.Unwrap() + suite.IsType(apperror.QueryError{}, wrappedErr) + suite.Equal("could not look up intl transit time", wrappedErr.Error()) + }) + + suite.Run("should update requiredDeliveryDate when scheduledPickupDate exist and shipment status is approved", func() { + + testdatagen.FetchOrMakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + StartDate: time.Now().AddDate(-1, 0, 0), + EndDate: time.Now().AddDate(1, 0, 0), + }, + }) + + moveWithUb := factory.BuildAvailableToPrimeMove(suite.DB(), nil, nil) + + testScheduledPickupDate := time.Now().AddDate(0, -5, 0) + primeEstimatedWeight := unit.Pound(9000) + + usPostRegionPickup, err := uuid.FromString("d47d5da4-10d2-41f9-9985-d7dd0f05d98c") + suite.NoError(err) + + usPostRegionDest, err := uuid.FromString("4cb599d1-c12a-43e3-988c-d43d5641f291") + suite.NoError(err) + + // Create the addresses + pickupAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + StreetAddress1: "987 Other Avenue", + StreetAddress2: models.StringPointer("P.O. Box 1234"), + StreetAddress3: models.StringPointer("c/o Another Person"), + City: "Columbia", + State: "SC", + PostalCode: "29228", + IsOconus: models.BoolPointer(false), + UsPostRegionCityID: &usPostRegionPickup, + }, + }, + }, nil) + + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + StreetAddress1: "987 Other Avenue", + StreetAddress2: models.StringPointer("P.O. Box 12345"), + StreetAddress3: models.StringPointer("c/o Another Person"), + City: "Eielson AFB", + State: "AK", + PostalCode: "99702", + IsOconus: models.BoolPointer(true), + UsPostRegionCityID: &usPostRegionDest, + }, + }, + }, nil) + + var requiredDeliveryDate time.Time + oldUBMTOShipment := factory.BuildMTOShipment(suite.DB(), []factory.Customization{ + { + Model: models.MTOShipment{ + MarketCode: models.MarketCodeInternational, + Status: models.MTOShipmentStatusSubmitted, + ShipmentType: models.MTOShipmentTypeUnaccompaniedBaggage, + PrimeEstimatedWeight: &primeEstimatedWeight, + ScheduledPickupDate: &testScheduledPickupDate, + PickupAddressID: &pickupAddress.ID, + DestinationAddressID: &destinationAddress.ID, + RequiredDeliveryDate: &requiredDeliveryDate, + }, + }, + { + Model: moveWithUb, + LinkOnly: true, + }, + }, nil) + + eTag := etag.GenerateEtag(oldUBMTOShipment.UpdatedAt) + + session := auth.Session{} + builder := query.NewQueryBuilder() + moveRouter := moveservices.NewMoveRouter() + planner := &mocks.Planner{} + planner.On("ZipTransitDistance", + mock.AnythingOfType("*appcontext.appContext"), + mock.Anything, + mock.Anything, + ).Return(400, nil) + siCreator := mtoserviceitem.NewMTOServiceItemCreator(planner, builder, moveRouter, ghcrateengine.NewDomesticUnpackPricer(), ghcrateengine.NewDomesticPackPricer(), ghcrateengine.NewDomesticLinehaulPricer(), ghcrateengine.NewDomesticShorthaulPricer(), ghcrateengine.NewDomesticOriginPricer(), ghcrateengine.NewDomesticDestinationPricer(), ghcrateengine.NewFuelSurchargePricer()) + updater := NewMTOShipmentStatusUpdater(builder, siCreator, planner) + + updatedShipment, err := updater.UpdateMTOShipmentStatus(suite.AppContextWithSessionForTest(&session), oldUBMTOShipment.ID, models.MTOShipmentStatusApproved, nil, nil, eTag) + + suite.Nil(err) + suite.NotNil(updatedShipment) + suite.NotNil(updatedShipment.RequiredDeliveryDate) + + expectedDate := time.Date(2024, 9, 17, 0, 0, 0, 0, time.Now().UTC().Location()) + suite.Equal(expectedDate.Year(), updatedShipment.RequiredDeliveryDate.Year()) + suite.Equal(expectedDate.Month(), updatedShipment.RequiredDeliveryDate.Month()) + suite.Equal(expectedDate.Day(), updatedShipment.RequiredDeliveryDate.Day()) + }) + + suite.Run("should update requiredDeliveryDate when scheduledPickupDate is updated", func() { + testdatagen.FetchOrMakeReContractYear(suite.DB(), testdatagen.Assertions{ + ReContractYear: models.ReContractYear{ + StartDate: time.Now().AddDate(-1, 0, 0), + EndDate: time.Now().AddDate(1, 0, 0), + }, + }) + + moveWithUb := factory.BuildAvailableToPrimeMove(suite.DB(), nil, nil) + + testScheduledPickupDate := time.Now().AddDate(0, -5, 0) + testScheduledPickupDate2 := time.Now().AddDate(0, -2, 0) + primeEstimatedWeight := unit.Pound(9000) + + usPostRegionPickup, err := uuid.FromString("d47d5da4-10d2-41f9-9985-d7dd0f05d98c") + suite.NoError(err) + + usPostRegionDest, err := uuid.FromString("4cb599d1-c12a-43e3-988c-d43d5641f291") + suite.NoError(err) + + // Create the addresses + pickupAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + StreetAddress1: "987 Other Avenue", + StreetAddress2: models.StringPointer("P.O. Box 1234"), + StreetAddress3: models.StringPointer("c/o Another Person"), + City: "Columbia", + State: "SC", + PostalCode: "29228", + IsOconus: models.BoolPointer(false), + UsPostRegionCityID: &usPostRegionPickup, + }, + }, + }, nil) + + destinationAddress := factory.BuildAddress(suite.DB(), []factory.Customization{ + { + Model: models.Address{ + StreetAddress1: "987 Other Avenue", + StreetAddress2: models.StringPointer("P.O. Box 12345"), + StreetAddress3: models.StringPointer("c/o Another Person"), + City: "Eielson AFB", + State: "AK", + PostalCode: "99702", + IsOconus: models.BoolPointer(true), + UsPostRegionCityID: &usPostRegionDest, + }, + }, + }, nil) + + var requiredDeliveryDate time.Time + oldUBMTOShipment := factory.BuildMTOShipment(suite.DB(), []factory.Customization{ + { + Model: models.MTOShipment{ + MarketCode: models.MarketCodeInternational, + Status: models.MTOShipmentStatusApproved, + ShipmentType: models.MTOShipmentTypeUnaccompaniedBaggage, + PrimeEstimatedWeight: &primeEstimatedWeight, + ScheduledPickupDate: &testScheduledPickupDate, + PickupAddressID: &pickupAddress.ID, + DestinationAddressID: &destinationAddress.ID, + RequiredDeliveryDate: &requiredDeliveryDate, + }, + }, + { + Model: moveWithUb, + LinkOnly: true, + }, + }, nil) + + mtoShipment := models.MTOShipment{ + ID: oldUBMTOShipment.ID, + ShipmentType: models.MTOShipmentTypeUnaccompaniedBaggage, + ScheduledPickupDate: &testScheduledPickupDate2, + } + + eTag := etag.GenerateEtag(oldUBMTOShipment.UpdatedAt) + session := auth.Session{} + + updatedMTOShipment, err := mtoShipmentUpdaterPrime.UpdateMTOShipment(suite.AppContextWithSessionForTest(&session), &mtoShipment, eTag, "test") + + suite.Nil(err) + suite.NotNil(updatedMTOShipment) + suite.NotNil(updatedMTOShipment.RequiredDeliveryDate) + + expectedDate := time.Date(2024, 12, 18, 0, 0, 0, 0, time.Now().UTC().Location()) + suite.Equal(expectedDate.Year(), updatedMTOShipment.RequiredDeliveryDate.Year()) + suite.Equal(expectedDate.Month(), updatedMTOShipment.RequiredDeliveryDate.Month()) + suite.Equal(expectedDate.Day(), updatedMTOShipment.RequiredDeliveryDate.Day()) + }) +}