Skip to content

Commit

Permalink
feat: add register user rest endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
ochom committed Aug 30, 2021
1 parent 75510e4 commit 9be44e2
Show file tree
Hide file tree
Showing 4 changed files with 174 additions and 28 deletions.
37 changes: 37 additions & 0 deletions pkg/onboarding/application/utils/validators.go
Expand Up @@ -273,3 +273,40 @@ func ValidateYearOfBirth(date string) string {
return ""

}

//ValidateRegisterUserInput validates the user registration input
func ValidateRegisterUserInput(input dto.RegisterUserInput) (bool, error) {
var res error

if input.UID == nil {
res := fmt.Errorf("expected `UID` to be defined")
return false, res
}

if input.FirstName == nil {
res = fmt.Errorf("expected `firstName` to be defined")
return false, res
}

if input.LastName == nil {
res = fmt.Errorf("expected `lastName` to be defined")
return false, res
}

if input.PhoneNumber == nil {
res = fmt.Errorf("expected `phoneNumber` to be defined")
return false, res
}

if input.Gender == nil {
res = fmt.Errorf("expected `gender` to be defined")
return false, res
}

_, err := converterandformatter.NormalizeMSISDN(*input.PhoneNumber)
if err != nil {
return false, exceptions.NormalizeMSISDNError(err)
}

return true, nil
}
134 changes: 134 additions & 0 deletions pkg/onboarding/application/utils/validators_test.go
Expand Up @@ -8,10 +8,12 @@ import (
"testing"

"github.com/google/uuid"
"github.com/savannahghi/enumutils"
"github.com/savannahghi/feedlib"
"github.com/savannahghi/interserviceclient"
"github.com/savannahghi/onboarding/pkg/onboarding/application/dto"
"github.com/savannahghi/onboarding/pkg/onboarding/application/utils"
"github.com/savannahghi/scalarutils"
"github.com/stretchr/testify/assert"
)

Expand Down Expand Up @@ -349,3 +351,135 @@ func TestValidateUSSDDetails(t *testing.T) {
})
}
}

func TestValidateRegisterUserInput(t *testing.T) {
uid := uuid.NewString()
fName := "Test"
lName := "test"
validPhone := interserviceclient.TestUserPhoneNumber
invalidPhone := "123"
gender := "male"
dob := scalarutils.Date{
Day: 1,
Month: 1,
Year: 2000,
}

tests := []struct {
name string
input dto.RegisterUserInput
want bool
wantErr bool
}{
{
name: "invalid phone number",
input: dto.RegisterUserInput{
UID: &uid,
PhoneNumber: &invalidPhone,
Gender: (*enumutils.Gender)(&gender),
DateOfBirth: &dob,
FirstName: &fName,
LastName: &lName,
},
want: false,
wantErr: true,
},
{
name: "invalid uid not provided",
input: dto.RegisterUserInput{
PhoneNumber: &validPhone,
Gender: (*enumutils.Gender)(&gender),
DateOfBirth: &dob,
FirstName: &fName,
LastName: &lName,
},
want: false,
wantErr: true,
},
{
name: "invalid phone not provided",
input: dto.RegisterUserInput{
UID: &uid,
Gender: (*enumutils.Gender)(&gender),
DateOfBirth: &dob,
FirstName: &fName,
LastName: &lName,
},
want: false,
wantErr: true,
},
{
name: "invalid first name not provided",
input: dto.RegisterUserInput{
UID: &uid,
PhoneNumber: &validPhone,
Gender: (*enumutils.Gender)(&gender),
DateOfBirth: &dob,
LastName: &lName,
},
want: false,
wantErr: true,
},
{
name: "invalid last name not provided",
input: dto.RegisterUserInput{
UID: &uid,
PhoneNumber: &invalidPhone,
Gender: (*enumutils.Gender)(&gender),
DateOfBirth: &dob,
FirstName: &fName,
},
want: false,
wantErr: true,
},
{
name: "invalid date of birth not provided",
input: dto.RegisterUserInput{
UID: &uid,
PhoneNumber: &invalidPhone,
Gender: (*enumutils.Gender)(&gender),
FirstName: &fName,
LastName: &lName,
},
want: false,
wantErr: true,
},
{
name: "invalid gender not provided",
input: dto.RegisterUserInput{
UID: &uid,
PhoneNumber: &invalidPhone,
DateOfBirth: &dob,
FirstName: &fName,
LastName: &lName,
},
want: false,
wantErr: true,
},
{
name: "valid user registration input",
input: dto.RegisterUserInput{
UID: &uid,
PhoneNumber: &validPhone,
Gender: (*enumutils.Gender)(&gender),
DateOfBirth: &dob,
FirstName: &fName,
LastName: &lName,
},
want: true,
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := utils.ValidateRegisterUserInput(tt.input)
if (err != nil) != tt.wantErr {
t.Errorf("ValidateRegisterUserInput() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("ValidateRegisterUserInput() = %v, want %v", got, tt.want)
}
})
}
}
28 changes: 2 additions & 26 deletions pkg/onboarding/presentation/rest/handlers.go
Expand Up @@ -1306,32 +1306,8 @@ func (h *HandlersInterfacesImpl) RegisterUser() http.HandlerFunc {
input := &dto.RegisterUserInput{}
serverutils.DecodeJSONToTargetStruct(rw, r, input)

if input.UID == nil {
err := fmt.Errorf("expected `UID` to be defined")
errorcodeutil.ReportErr(rw, err, http.StatusBadRequest)
return
}

if input.FirstName == nil {
err := fmt.Errorf("expected `firstName` to be defined")
errorcodeutil.ReportErr(rw, err, http.StatusBadRequest)
return
}

if input.LastName == nil {
err := fmt.Errorf("expected `lastName` to be defined")
errorcodeutil.ReportErr(rw, err, http.StatusBadRequest)
return
}

if input.PhoneNumber == nil {
err := fmt.Errorf("expected `phoneNumber` to be defined")
errorcodeutil.ReportErr(rw, err, http.StatusBadRequest)
return
}

if input.Gender == nil {
err := fmt.Errorf("expected `gender` to be defined")
valid, err := utils.ValidateRegisterUserInput(*input)
if !valid {
errorcodeutil.ReportErr(rw, err, http.StatusBadRequest)
return
}
Expand Down
3 changes: 1 addition & 2 deletions pkg/onboarding/usecases/signup.go
Expand Up @@ -515,7 +515,6 @@ func (s *SignUpUseCasesImpl) RegisterUser(ctx context.Context, input dto.Registe
uid, err := s.baseExt.GetLoggedInUserUID(ctx)
if err != nil {
utils.RecordSpanError(span, err)
logrus.Printf("error: %v", err)
return nil, exceptions.UserNotFoundError(err)
}

Expand Down Expand Up @@ -579,7 +578,7 @@ func (s *SignUpUseCasesImpl) RegisterUser(ctx context.Context, input dto.Registe
message = &profileDomain.WelcomeMessage
}

formartedMessage := fmt.Sprintf(*message, input.FirstName, otp)
formartedMessage := fmt.Sprintf(*message, *input.FirstName, otp)

if err := s.engagement.SendSMS(ctx, []string{*phoneNumber}, formartedMessage); err != nil {
return nil, fmt.Errorf("unable to send consumer registration message: %w", err)
Expand Down

0 comments on commit 9be44e2

Please sign in to comment.