Skip to content

Commit

Permalink
Merge branch 'main' into MAIN-B-20131-sc-edit-full-address
Browse files Browse the repository at this point in the history
  • Loading branch information
taeJungCaci authored Jun 11, 2024
2 parents 0407012 + ed55043 commit c3631b3
Show file tree
Hide file tree
Showing 12 changed files with 157 additions and 10 deletions.
14 changes: 14 additions & 0 deletions pkg/gen/internalapi/embedded_spec.go

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

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

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

20 changes: 18 additions & 2 deletions pkg/handlers/ghcapi/move.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/transcom/mymove/pkg/gen/ghcmessages"
"github.com/transcom/mymove/pkg/handlers"
"github.com/transcom/mymove/pkg/handlers/ghcapi/internal/payloads"
"github.com/transcom/mymove/pkg/models"
"github.com/transcom/mymove/pkg/services"
)

Expand Down Expand Up @@ -46,6 +47,11 @@ func (h GetMoveHandler) Handle(params moveop.GetMoveParams) middleware.Responder
}
}

privileges, err := models.FetchPrivilegesForUser(appCtx.DB(), appCtx.Session().UserID)
if err != nil {
appCtx.Logger().Error("Error retreiving user privileges", zap.Error(err))
}

// if this user is accessing the move record, we need to lock it so others can't edit it
// to allow for locking a move, we need to look at these things
// 1. Is the user an office user?
Expand All @@ -66,8 +72,18 @@ func (h GetMoveHandler) Handle(params moveop.GetMoveParams) middleware.Responder
}
}

payload := payloads.Move(move)
return moveop.NewGetMoveOK().WithPayload(payload), nil
moveOrders, err := models.FetchOrder(appCtx.DB(), move.OrdersID)
if err != nil {
appCtx.Logger().Error("Error retreiving user privileges", zap.Error(err))
}

if moveOrders.OrdersType == "SAFETY" && !privileges.HasPrivilege(models.PrivilegeTypeSafety) {
appCtx.Logger().Error("Invalid permissions")
return moveop.NewGetMoveNotFound(), nil
} else {
payload := payloads.Move(move)
return moveop.NewGetMoveOK().WithPayload(payload), nil
}
})
}

Expand Down
44 changes: 42 additions & 2 deletions pkg/handlers/ghcapi/move_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
Type: &factory.TransportationOffices.CloseoutOffice,
},
}, nil)
moveFetcher := moveservice.NewMoveFetcher()
mockFetcher := mocks.MoveFetcher{}
mockLocker := movelocker.NewMoveLocker()
requestOfficeUser := factory.BuildOfficeUserWithRoles(suite.DB(), nil, []roles.RoleType{roles.RoleTypeServicesCounselor})

Expand All @@ -126,10 +126,16 @@ func (suite *HandlerSuite) TestGetMoveHandler() {

handler := GetMoveHandler{
HandlerConfig: suite.HandlerConfig(),
MoveFetcher: moveFetcher,
MoveFetcher: &mockFetcher,
MoveLocker: mockLocker,
}

mockFetcher.On("FetchMove",
mock.AnythingOfType("*appcontext.appContext"),
move.Locator,
mock.Anything,
).Return(&move, nil)

response := handler.Handle(params)
suite.IsType(&moveops.GetMoveOK{}, response)
payload := response.(*moveops.GetMoveOK).Payload
Expand Down Expand Up @@ -228,6 +234,40 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
// Validate outgoing payload: nil payload
suite.Nil(payload)
})

suite.Run("Unsuccessful move fetch - invalid privileges", func() {
setupTestData()
mockFetcher := mocks.MoveFetcher{}
mockLocker := movelocker.NewMoveLocker()

handler := GetMoveHandler{
HandlerConfig: suite.HandlerConfig(),
MoveFetcher: &mockFetcher,
MoveLocker: mockLocker,
}

mockFetcher.On("FetchMove",
mock.AnythingOfType("*appcontext.appContext"),
move.Locator,
mock.Anything,
).Return(&models.Move{}, apperror.NotFoundError{})

req := httptest.NewRequest("GET", "/move/#{move.locator}", nil)
req = suite.AuthenticateUserRequest(req, requestUser.User)
params := moveops.GetMoveParams{
HTTPRequest: req,
Locator: move.Locator,
}

// Validate incoming payload: no body to validate

response := handler.Handle(params)
suite.IsType(&moveops.GetMoveNotFound{}, response)
payload := response.(*moveops.GetMoveNotFound).Payload

// Validate outgoing payload: nil payload
suite.Nil(payload)
})
}

func (suite *HandlerSuite) TestSearchMovesHandler() {
Expand Down
15 changes: 13 additions & 2 deletions pkg/handlers/internalapi/uploads.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,17 @@ func (h DeleteUploadHandler) Handle(params uploadop.DeleteUploadParams) middlewa
return handlers.ResponseForError(appCtx.Logger(), err), err
}

var ppmShipmentStatus models.PPMShipmentStatus

if params.PpmID != nil {
ppmShipmentId, _ := uuid.FromString(params.PpmID.String())
ppmShipment, err := models.FetchPPMShipmentByPPMShipmentID(appCtx.DB(), ppmShipmentId)
if err != nil {
return handlers.ResponseForError(appCtx.Logger(), err), err
}
ppmShipmentStatus = ppmShipment.Status
}

if params.OrderID != nil {
orderID, _ := uuid.FromString(params.OrderID.String())
move, e := models.FetchMoveByOrderID(appCtx.DB(), orderID)
Expand Down Expand Up @@ -157,8 +168,8 @@ func (h DeleteUploadHandler) Handle(params uploadop.DeleteUploadParams) middlewa
appCtx.Logger().Error("error retrieving move associated with this upload", zap.Error(err))
}

//If move status is not DRAFT, upload cannot be deleted
if *uploadInformation.MoveStatus != models.MoveStatusDRAFT {
//If move status is not DRAFT and customer is not uploading ppm docs, upload cannot be deleted
if (*uploadInformation.MoveStatus != models.MoveStatusDRAFT) && (ppmShipmentStatus != models.PPMShipmentStatusWaitingOnCustomer) {
return uploadop.NewDeleteUploadForbidden(), fmt.Errorf("deletion not permitted Move is not in 'DRAFT' status")
}

Expand Down
2 changes: 1 addition & 1 deletion src/pages/MyMove/PPM/Closeout/Expenses/Expenses.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ const Expenses = () => {
};

const handleUploadDelete = (uploadId, fieldName, setFieldTouched, setFieldValue) => {
deleteUpload(uploadId)
deleteUpload(uploadId, null, mtoShipment?.ppmShipment?.id)
.then(() => {
const filteredUploads = mtoShipment.ppmShipment.movingExpenses[currentIndex][fieldName].uploads.filter(
(upload) => upload.id !== uploadId,
Expand Down
2 changes: 1 addition & 1 deletion src/pages/MyMove/PPM/Closeout/ProGear/ProGear.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ const ProGear = () => {
};

const handleUploadDelete = (uploadId, fieldName, setFieldTouched, setFieldValue) => {
deleteUpload(uploadId)
deleteUpload(uploadId, null, mtoShipment?.ppmShipment?.id)
.then(() => {
const filteredUploads = mtoShipment.ppmShipment.proGearWeightTickets[currentIndex][fieldName].uploads.filter(
(upload) => upload.id !== uploadId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ const WeightTickets = () => {
};

const handleUploadDelete = (uploadId, fieldName, setFieldTouched, setFieldValue) => {
deleteUpload(uploadId)
deleteUpload(uploadId, null, mtoShipment?.ppmShipment?.id)
.then(() => {
const filteredUploads = mtoShipment.ppmShipment.weightTickets[currentIndex][fieldName].uploads.filter(
(upload) => upload.id !== uploadId,
Expand Down
3 changes: 2 additions & 1 deletion src/services/internalApi.js
Original file line number Diff line number Diff line change
Expand Up @@ -248,12 +248,13 @@ export async function createUploadForPPMDocument(ppmShipmentId, documentId, file
);
}

export async function deleteUpload(uploadId, orderId) {
export async function deleteUpload(uploadId, orderId, ppmId) {
return makeInternalRequest(
'uploads.deleteUpload',
{
uploadId,
orderId,
ppmId,
},
{
normalize: false,
Expand Down
5 changes: 5 additions & 0 deletions swagger-def/internal.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3075,6 +3075,11 @@ paths:
type: string
format: uuid
description: ID of the order that the upload belongs to
- in: query
name: ppmId
type: string
format: uuid
description: Optional PPM shipment ID related to the upload
responses:
"204":
description: deleted
Expand Down
5 changes: 5 additions & 0 deletions swagger/internal.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4371,6 +4371,11 @@ paths:
type: string
format: uuid
description: ID of the order that the upload belongs to
- in: query
name: ppmId
type: string
format: uuid
description: Optional PPM shipment ID related to the upload
responses:
'204':
description: deleted
Expand Down

0 comments on commit c3631b3

Please sign in to comment.