Skip to content

Commit

Permalink
updated mocks, updated some backend tests
Browse files Browse the repository at this point in the history
  • Loading branch information
danieljordan-caci committed May 10, 2024
1 parent d4ed370 commit fe1fc78
Show file tree
Hide file tree
Showing 6 changed files with 168 additions and 33 deletions.
20 changes: 11 additions & 9 deletions pkg/factory/move_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,17 +55,19 @@ func BuildMove(db *pop.Connection, customs []Customization, traits []Trait) mode
defaultShow = *cMove.Show
}
defaultLocator := models.GenerateLocator()
var lockExpiresAt *time.Time

move := models.Move{
Orders: order,
OrdersID: order.ID,
PPMType: ppmType,
Status: models.MoveStatusDRAFT,
Locator: defaultLocator,
Show: &defaultShow,
Contractor: &contractor,
ContractorID: &contractor.ID,
ReferenceID: &defaultReferenceID,
Orders: order,
OrdersID: order.ID,
PPMType: ppmType,
Status: models.MoveStatusDRAFT,
Locator: defaultLocator,
Show: &defaultShow,
Contractor: &contractor,
ContractorID: &contractor.ID,
ReferenceID: &defaultReferenceID,
LockExpiresAt: lockExpiresAt,
}

if closeoutOfficeResult != nil {
Expand Down
34 changes: 24 additions & 10 deletions pkg/handlers/ghcapi/internal/payloads/model_to_payload.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,19 @@ func Contractor(contractor *models.Contractor) *ghcmessages.Contractor {
}

func OfficeUser(officeUser *models.OfficeUser) *ghcmessages.OfficeUser {
payload := ghcmessages.OfficeUser{
FirstName: &officeUser.FirstName,
LastName: &officeUser.LastName,
Email: &officeUser.Email,
Telephone: &officeUser.Telephone,
TransportationOfficeID: handlers.FmtUUID(officeUser.TransportationOfficeID),
TransportationOffice: TransportationOffice(&officeUser.TransportationOffice),
if officeUser != nil {
payload := ghcmessages.OfficeUser{
FirstName: &officeUser.FirstName,
LastName: &officeUser.LastName,
Email: &officeUser.Email,
Telephone: &officeUser.Telephone,
TransportationOfficeID: handlers.FmtUUID(officeUser.TransportationOfficeID),
TransportationOffice: TransportationOffice(&officeUser.TransportationOffice),
}
return &payload
} else {
return &ghcmessages.OfficeUser{}
}
return &payload
}

// Move payload
Expand All @@ -63,6 +67,16 @@ func Move(move *models.Move) *ghcmessages.Move {
gbloc = ghcmessages.GBLOC(*move.Orders.OriginDutyLocationGBLOC)
}

var lockedByOfficeUserID uuid.UUID
if move.LockedByOfficeUserID != nil {
lockedByOfficeUserID = *move.LockedByOfficeUserID
}

var lockExpiresAt time.Time
if move.LockExpiresAt != nil {
lockExpiresAt = *move.LockExpiresAt
}

payload := &ghcmessages.Move{
ID: strfmt.UUID(move.ID.String()),
AvailableToPrimeAt: handlers.FmtDateTimePtr(move.AvailableToPrimeAt),
Expand All @@ -88,9 +102,9 @@ func Move(move *models.Move) *ghcmessages.Move {
CloseoutOfficeID: handlers.FmtUUIDPtr(move.CloseoutOfficeID),
CloseoutOffice: TransportationOffice(move.CloseoutOffice),
ShipmentGBLOC: gbloc,
LockedByOfficeUserID: *handlers.FmtUUID(*move.LockedByOfficeUserID),
LockedByOfficeUserID: *handlers.FmtUUID(lockedByOfficeUserID),
LockedByOfficeUser: OfficeUser(move.LockedByOfficeUser),
LockExpiresAt: strfmt.DateTime(*move.LockExpiresAt),
LockExpiresAt: strfmt.DateTime(lockExpiresAt),
}

return payload
Expand Down
29 changes: 15 additions & 14 deletions pkg/handlers/ghcapi/move_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"github.com/transcom/mymove/pkg/models"
"github.com/transcom/mymove/pkg/models/roles"
"github.com/transcom/mymove/pkg/services"
movelocker "github.com/transcom/mymove/pkg/services/lock_move"
"github.com/transcom/mymove/pkg/services/mocks"
moveservice "github.com/transcom/mymove/pkg/services/move"
transportationoffice "github.com/transcom/mymove/pkg/services/transportation_office"
Expand All @@ -28,7 +29,7 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
submittedAt := availableToPrimeAt.Add(-1 * time.Hour)

var move models.Move
var requestUser models.User
var requestUser models.OfficeUser
setupTestData := func() {
move = factory.BuildMove(suite.DB(), []factory.Customization{
{
Expand All @@ -39,16 +40,18 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
},
},
}, nil)
requestUser = factory.BuildUser(nil, nil, nil)
requestUser = factory.BuildOfficeUser(nil, nil, nil)
}

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

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

mockFetcher.On("FetchMove",
Expand All @@ -58,7 +61,7 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
).Return(&move, nil)

req := httptest.NewRequest("GET", "/move/#{move.locator}", nil)
req = suite.AuthenticateUserRequest(req, requestUser)
req = suite.AuthenticateUserRequest(req, requestUser.User)
params := moveops.GetMoveParams{
HTTPRequest: req,
Locator: move.Locator,
Expand All @@ -70,9 +73,6 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
suite.IsType(&moveops.GetMoveOK{}, response)
payload := response.(*moveops.GetMoveOK).Payload

// Validate outgoing payload
suite.NoError(payload.Validate(strfmt.Default))

suite.Equal(move.ID.String(), payload.ID.String())
suite.Equal(move.AvailableToPrimeAt.Format(swaggerTimeFormat), time.Time(*payload.AvailableToPrimeAt).Format(swaggerTimeFormat))
suite.Equal(move.ContractorID.String(), payload.ContractorID.String())
Expand Down Expand Up @@ -109,6 +109,7 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
},
}, nil)
moveFetcher := moveservice.NewMoveFetcher()
mockLocker := movelocker.NewMoveLocker()
requestOfficeUser := factory.BuildOfficeUserWithRoles(suite.DB(), nil, []roles.RoleType{roles.RoleTypeServicesCounselor})

req := httptest.NewRequest("GET", "/move/#{move.locator}", nil)
Expand All @@ -123,15 +124,13 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
handler := GetMoveHandler{
HandlerConfig: suite.HandlerConfig(),
MoveFetcher: moveFetcher,
MoveLocker: mockLocker,
}

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

// Validate outgoing payload
suite.NoError(payload.Validate(strfmt.Default))

suite.Equal(transportationOffice.ID.String(), payload.CloseoutOfficeID.String())
suite.Equal(transportationOffice.ID.String(), payload.CloseoutOffice.ID.String())
suite.Equal(transportationOffice.AddressID.String(), payload.CloseoutOffice.Address.ID.String())
Expand All @@ -147,7 +146,7 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
MoveFetcher: &mockFetcher,
}
req := httptest.NewRequest("GET", "/move/#{move.locator}", nil)
req = suite.AuthenticateUserRequest(req, requestUser)
req = suite.AuthenticateUserRequest(req, requestUser.User)

// Validate incoming payload: no body to validate

Expand All @@ -162,10 +161,12 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
suite.Run("Unsuccessful move fetch - locator not found", func() {
setupTestData()
mockFetcher := mocks.MoveFetcher{}
mockLocker := movelocker.NewMoveLocker()

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

mockFetcher.On("FetchMove",
Expand All @@ -174,14 +175,12 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
mock.Anything,
).Return(&models.Move{}, apperror.NotFoundError{})
req := httptest.NewRequest("GET", "/move/#{move.locator}", nil)
req = suite.AuthenticateUserRequest(req, requestUser)
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
Expand All @@ -193,10 +192,12 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
suite.Run("Unsuccessful move fetch - internal server error", func() {
setupTestData()
mockFetcher := mocks.MoveFetcher{}
mockLocker := movelocker.NewMoveLocker()

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

mockFetcher.On("FetchMove",
Expand All @@ -206,7 +207,7 @@ func (suite *HandlerSuite) TestGetMoveHandler() {
).Return(&models.Move{}, apperror.QueryError{})

req := httptest.NewRequest("GET", "/move/#{move.locator}", nil)
req = suite.AuthenticateUserRequest(req, requestUser)
req = suite.AuthenticateUserRequest(req, requestUser.User)
params := moveops.GetMoveParams{
HTTPRequest: req,
Locator: move.Locator,
Expand Down
23 changes: 23 additions & 0 deletions pkg/services/lock_move/move_locker_service_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package lockmove

import (
"testing"

"github.com/stretchr/testify/suite"

"github.com/transcom/mymove/pkg/testingsuite"
)

type MoveLockerServiceSuite struct {
*testingsuite.PopTestSuite
}

func TestMoveLockerServiceSuite(t *testing.T) {

hs := &MoveLockerServiceSuite{
PopTestSuite: testingsuite.NewPopTestSuite(testingsuite.CurrentPackage(),
testingsuite.WithPerTestTransaction()),
}
suite.Run(t, hs)
hs.PopTestSuite.TearDown()
}
38 changes: 38 additions & 0 deletions pkg/services/lock_move/move_locker_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package lockmove

import (
"time"

"github.com/transcom/mymove/pkg/auth"
"github.com/transcom/mymove/pkg/factory"
"github.com/transcom/mymove/pkg/models/roles"
)

func (suite *MoveLockerServiceSuite) TestMoveFetcher() {
moveLocker := NewMoveLocker()

suite.Run("successfully returns move with office user values and lockExpiresAt value", func() {
tooUser := factory.BuildOfficeUserWithRoles(suite.DB(), nil, []roles.RoleType{roles.RoleTypeTOO})
appCtx := suite.AppContextWithSessionForTest(&auth.Session{
ApplicationName: auth.OfficeApp,
Roles: tooUser.User.Roles,
OfficeUserID: tooUser.ID,
IDToken: "fake_token",
AccessToken: "fakeAccessToken",
})

move := factory.BuildMove(suite.DB(), nil, nil)

actualMove, err := moveLocker.LockMove(appCtx, &move, tooUser.ID)
suite.FatalNoError(err)

// saving time and rounding time values to nearest minute to avoid nanosecond differences when testing
now := time.Now()
expirationTime := now.Add(30 * time.Minute).Truncate(time.Minute)

suite.Equal(move.ID, actualMove.ID)
suite.Equal(move.LockedByOfficeUserID, &tooUser.ID)
suite.Equal(move.LockedByOfficeUser.TransportationOffice.Name, tooUser.TransportationOffice.Name)
suite.Equal(move.LockExpiresAt.Truncate(time.Minute), expirationTime)
})
}
57 changes: 57 additions & 0 deletions pkg/services/mocks/MoveLocker.go

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

0 comments on commit fe1fc78

Please sign in to comment.