Skip to content

Commit

Permalink
fix: add invite token to find user by token response
Browse files Browse the repository at this point in the history
  • Loading branch information
Dotunj committed Jun 14, 2022
1 parent 0db8f3d commit 57344b3
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 14 deletions.
7 changes: 6 additions & 1 deletion server/models/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ type ConfigurationResponse struct {
UpdatedAt primitive.DateTime `json:"updated_at,omitempty"`
DeletedAt primitive.DateTime `json:"deleted_at,omitempty"`
}

type OrganisationInvite struct {
InviteeEmail string `json:"invitee_email" valid:"required~please provide a valid invitee email,email"`
Role auth.Role `json:"role" bson:"role"`
Expand Down Expand Up @@ -130,6 +130,11 @@ type LoginUserResponse struct {
DeletedAt primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at"`
}

type UserInviteTokenResponse struct {
Token *datastore.OrganisationInvite `json:"token"`
User *datastore.User `json:"user"`
}

type Token struct {
AccessToken string `json:"access_token" valid:"required~please provide an access token"`
RefreshToken string `json:"refresh_token" valid:"required~please provide a refresh token"`
Expand Down
6 changes: 4 additions & 2 deletions server/organisation_invite.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,12 +127,14 @@ func (a *applicationHandler) ProcessOrganisationMemberInvite(w http.ResponseWrit
// @Router /users/token [get]
func (a *applicationHandler) FindUserByInviteToken(w http.ResponseWriter, r *http.Request) {
token := r.URL.Query().Get("token")
user, err := a.organisationInviteService.FindUserByInviteToken(r.Context(), token)
user, iv, err := a.organisationInviteService.FindUserByInviteToken(r.Context(), token)
if err != nil {
log.WithError(err).Error("failed to find user by invite token")
_ = render.Render(w, r, newServiceErrResponse(err))
return
}

_ = render.Render(w, r, newServerResponse("retrieved user", user, http.StatusOK))
res := models.UserInviteTokenResponse{Token: iv, User: user}

_ = render.Render(w, r, newServerResponse("retrieved user", res, http.StatusOK))
}
21 changes: 16 additions & 5 deletions server/organisation_invite_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -350,13 +350,16 @@ func (s *OrganisationInviteIntegrationTestSuite) Test_FindUserByInviteToken_Exis
// Assert.
require.Equal(s.T(), expectedStatusCode, w.Code)

var response datastore.User
var response models.UserInviteTokenResponse
parseResponse(s.T(), w.Result(), &response)

require.Equal(s.T(), user.UID, response.UID)
require.Equal(s.T(), user.FirstName, response.FirstName)
require.Equal(s.T(), user.LastName, response.LastName)
require.Equal(s.T(), user.Email, response.Email)
require.Equal(s.T(), user.UID, response.User.UID)
require.Equal(s.T(), user.FirstName, response.User.FirstName)
require.Equal(s.T(), user.LastName, response.User.LastName)
require.Equal(s.T(), user.Email, response.User.Email)
require.Equal(s.T(), iv.UID, response.Token.UID)
require.Equal(s.T(), iv.InviteeEmail, response.Token.InviteeEmail)
require.Equal(s.T(), iv.Token, response.Token.Token)
}

func (s *OrganisationInviteIntegrationTestSuite) Test_FindUserByInviteToken_NewUser() {
Expand All @@ -380,6 +383,14 @@ func (s *OrganisationInviteIntegrationTestSuite) Test_FindUserByInviteToken_NewU

// Assert.
require.Equal(s.T(), expectedStatusCode, w.Code)

var response models.UserInviteTokenResponse
parseResponse(s.T(), w.Result(), &response)

require.Equal(s.T(), iv.UID, response.Token.UID)
require.Equal(s.T(), iv.InviteeEmail, response.Token.InviteeEmail)
require.Equal(s.T(), iv.Token, response.Token.Token)
require.Nil(s.T(), response.User)
}

func TestOrganisationInviteIntegrationTestSuite(t *testing.T) {
Expand Down
10 changes: 5 additions & 5 deletions services/organisation_invite_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,21 +223,21 @@ func (ois *OrganisationInviteService) createNewUser(ctx context.Context, newUser
return user, nil
}

func (ois *OrganisationInviteService) FindUserByInviteToken(ctx context.Context, token string) (*datastore.User, error) {
func (ois *OrganisationInviteService) FindUserByInviteToken(ctx context.Context, token string) (*datastore.User, *datastore.OrganisationInvite, error) {
iv, err := ois.orgInviteRepo.FetchOrganisationInviteByToken(ctx, token)
if err != nil {
log.WithError(err).Error("failed to fetch organisation member invite by token and email")
return nil, NewServiceError(http.StatusBadRequest, errors.New("failed to fetch organisation member invite"))
return nil, nil, NewServiceError(http.StatusBadRequest, errors.New("failed to fetch organisation member invite"))
}

user, err := ois.userRepo.FindUserByEmail(ctx, iv.InviteeEmail)
if err != nil {
if err == datastore.ErrUserNotFound {
return nil, nil
return nil, iv, nil
}

return nil, NewServiceError(http.StatusInternalServerError, err)
return nil, nil, NewServiceError(http.StatusInternalServerError, err)
}

return user, nil
return user, iv, nil
}
12 changes: 11 additions & 1 deletion services/organisation_invite_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -894,6 +894,7 @@ func TestOrganisationInviteService_FindUserByInviteToken(t *testing.T) {
args args
dbFn func(ois *OrganisationInviteService)
wantUser *datastore.User
wantInvite *datastore.OrganisationInvite
wantErr bool
wantErrCode int
wantErrMsg string
Expand Down Expand Up @@ -928,6 +929,10 @@ func TestOrganisationInviteService_FindUserByInviteToken(t *testing.T) {
UID: "user-123",
Email: "test@email.com",
},
wantInvite: &datastore.OrganisationInvite{
OrganisationID: "123ab",
InviteeEmail: "test@email.com",
},
},

{
Expand All @@ -951,6 +956,10 @@ func TestOrganisationInviteService_FindUserByInviteToken(t *testing.T) {
u.EXPECT().FindUserByEmail(gomock.Any(), "test@email.com").Times(1).Return(nil, datastore.ErrUserNotFound)
},
wantUser: nil,
wantInvite: &datastore.OrganisationInvite{
OrganisationID: "123ab",
InviteeEmail: "test@email.com",
},
},

{
Expand Down Expand Up @@ -981,7 +990,7 @@ func TestOrganisationInviteService_FindUserByInviteToken(t *testing.T) {
tt.dbFn(ois)
}

user, err := ois.FindUserByInviteToken(tt.args.ctx, tt.args.token)
user, iv, err := ois.FindUserByInviteToken(tt.args.ctx, tt.args.token)
if tt.wantErr {
require.NotNil(t, err)
require.Equal(t, tt.wantErrCode, err.(*ServiceError).ErrCode())
Expand All @@ -991,6 +1000,7 @@ func TestOrganisationInviteService_FindUserByInviteToken(t *testing.T) {

require.Nil(t, err)
require.Equal(t, user, tt.wantUser)
require.Equal(t, iv, tt.wantInvite)
})
}
}

0 comments on commit 57344b3

Please sign in to comment.