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

Don't return a nil duty station when creating a new service member #1823

Merged
merged 1 commit into from Mar 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions pkg/handlers/internalapi/duty_stations.go
Expand Up @@ -3,6 +3,7 @@ package internalapi
import (
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/swag"
"github.com/gofrs/uuid"
"go.uber.org/zap"

stationop "github.com/transcom/mymove/pkg/gen/internalapi/internaloperations/duty_stations"
Expand All @@ -12,6 +13,11 @@ import (
)

func payloadForDutyStationModel(station models.DutyStation) *internalmessages.DutyStationPayload {
// If the station ID has no UUID then it isn't real data
// Unlike other payloads the
if station.ID == uuid.Nil {
return nil
}
payload := internalmessages.DutyStationPayload{
ID: handlers.FmtUUID(station.ID),
CreatedAt: handlers.FmtDateTime(station.CreatedAt),
Expand Down
4 changes: 1 addition & 3 deletions pkg/handlers/internalapi/service_members.go
Expand Up @@ -19,8 +19,6 @@ import (
)

func payloadForServiceMemberModel(storer storage.FileStorer, serviceMember models.ServiceMember) *internalmessages.ServiceMemberPayload {
var dutyStationPayload *internalmessages.DutyStationPayload
dutyStationPayload = payloadForDutyStationModel(serviceMember.DutyStation)
orders := make([]*internalmessages.Orders, len(serviceMember.Orders))
for i, order := range serviceMember.Orders {
orderPayload, _ := payloadForOrdersModel(storer, order)
Expand Down Expand Up @@ -57,7 +55,7 @@ func payloadForServiceMemberModel(storer storage.FileStorer, serviceMember model
BackupContacts: contactPayloads,
HasSocialSecurityNumber: handlers.FmtBool(serviceMember.SocialSecurityNumberID != nil),
IsProfileComplete: handlers.FmtBool(serviceMember.IsProfileComplete()),
CurrentStation: dutyStationPayload,
CurrentStation: payloadForDutyStationModel(serviceMember.DutyStation),
}
return &serviceMemberPayload
}
Expand Down
50 changes: 50 additions & 0 deletions pkg/handlers/internalapi/service_members_test.go
Expand Up @@ -71,6 +71,56 @@ func (suite *HandlerSuite) TestShowServiceMemberWrongUser() {
suite.Assertions.Equal(http.StatusForbidden, errResponse.Code)
}

func (suite *HandlerSuite) TestSubmitServiceMemberHandlerNoValues() {
// Given: A logged-in user
user := testdatagen.MakeDefaultUser(suite.DB())

// When: a new ServiceMember is posted
newServiceMemberPayload := internalmessages.CreateServiceMemberPayload{}

req := httptest.NewRequest("POST", "/service_members", nil)
req = suite.AuthenticateUserRequest(req, user)

params := servicememberop.CreateServiceMemberParams{
CreateServiceMemberPayload: &newServiceMemberPayload,
HTTPRequest: req,
}

handler := CreateServiceMemberHandler{handlers.NewHandlerContext(suite.DB(), suite.TestLogger())}
response := handler.Handle(params)

suite.Assertions.IsType(&handlers.CookieUpdateResponder{}, response)

unwrappedResponse := response.(*handlers.CookieUpdateResponder).Responder
suite.Assertions.IsType(&servicememberop.CreateServiceMemberCreated{}, unwrappedResponse)

// Then: we expect a servicemember to have been created for the user
query := suite.DB().Where(fmt.Sprintf("user_id='%v'", user.ID))
var serviceMembers models.ServiceMembers
query.All(&serviceMembers)

suite.Assertions.Len(serviceMembers, 1)

serviceMemberPayload := unwrappedResponse.(*servicememberop.CreateServiceMemberCreated).Payload

suite.Assertions.NotEqual(*serviceMemberPayload.ID, uuid.Nil)
suite.Assertions.NotEqual(*serviceMemberPayload.UserID, uuid.Nil)
suite.Assertions.Equal(*serviceMemberPayload.HasSocialSecurityNumber, false)
suite.Assertions.Equal(*serviceMemberPayload.IsProfileComplete, false)
suite.Assertions.Equal(len((*serviceMemberPayload).Orders), 0)
fmt.Println((*serviceMemberPayload).CurrentStation)

// These shouldn't return any value or Swagger clients will complain during validation
// because the payloads for these objects are defined to require non-null values for most fields
// which can't be handled in OpenAPI Spec 2.0. Therefore we don't return them at all.
suite.Assertions.Equal((*serviceMemberPayload).Rank, (*internalmessages.ServiceMemberRank)(nil))
suite.Assertions.Equal((*serviceMemberPayload).Affiliation, (*internalmessages.Affiliation)(nil))
suite.Assertions.Equal((*serviceMemberPayload).CurrentStation, (*internalmessages.DutyStationPayload)(nil))
suite.Assertions.Equal((*serviceMemberPayload).ResidentialAddress, (*internalmessages.Address)(nil))
suite.Assertions.Equal((*serviceMemberPayload).BackupMailingAddress, (*internalmessages.Address)(nil))
suite.Assertions.Equal((*serviceMemberPayload).BackupContacts, internalmessages.IndexServiceMemberBackupContactsPayload{})
}

func (suite *HandlerSuite) TestSubmitServiceMemberHandlerAllValues() {
// Given: A logged-in user
user := testdatagen.MakeDefaultUser(suite.DB())
Expand Down