change active flag in update user to string instead of bool

This commit is contained in:
Sonja Happ 2019-09-17 17:19:21 +02:00
parent 14972262c0
commit 56eabdc194
2 changed files with 20 additions and 21 deletions

View file

@ -25,7 +25,7 @@ type UserRequest struct {
Password string `json:"password,omitempty"` Password string `json:"password,omitempty"`
Mail string `json:"mail,omitempty"` Mail string `json:"mail,omitempty"`
Role string `json:"role,omitempty"` Role string `json:"role,omitempty"`
Active bool `json:"active,omitempty"` Active string `json:"active,omitempty"`
} }
func TestMain(m *testing.M) { func TestMain(m *testing.M) {
@ -391,14 +391,14 @@ func TestModifyAddedUserAsUser(t *testing.T) {
// try to modify active state of user // try to modify active state of user
// should result in forbidden // should result in forbidden
modActiveState := UserRequest{Active: false} modActiveState := UserRequest{Active: "no"}
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", helper.KeyModels{"user": modActiveState}) fmt.Sprintf("/api/users/%v", newUserID), "PUT", helper.KeyModels{"user": modActiveState})
assert.NoError(t, err) assert.NoError(t, err)
assert.Equalf(t, 403, code, "Response body: \n%v\n", resp) assert.Equalf(t, 403, code, "Response body: \n%v\n", resp)
// modify newUser's own name // modify newUser's own name
modRequest := UserRequest{Username: "myNewName", Active: true} modRequest := UserRequest{Username: "myNewName"}
newUser.Username = modRequest.Username newUser.Username = modRequest.Username
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
@ -409,7 +409,7 @@ func TestModifyAddedUserAsUser(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
// modify Admin's name (ILLEGAL) // modify Admin's name (ILLEGAL)
modRequest = UserRequest{Username: "myNewName", Active: true} modRequest = UserRequest{Username: "myNewName"}
newUser.Username = modRequest.Username newUser.Username = modRequest.Username
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
"/api/users/1", "PUT", helper.KeyModels{"user": modRequest}) "/api/users/1", "PUT", helper.KeyModels{"user": modRequest})
@ -417,7 +417,7 @@ func TestModifyAddedUserAsUser(t *testing.T) {
assert.Equalf(t, 403, code, "Response body: \n%v\n", resp) assert.Equalf(t, 403, code, "Response body: \n%v\n", resp)
// modify newUser's own email // modify newUser's own email
modRequest = UserRequest{Mail: "my@new.email", Active: true} modRequest = UserRequest{Mail: "my@new.email"}
newUser.Mail = modRequest.Mail newUser.Mail = modRequest.Mail
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
@ -428,7 +428,7 @@ func TestModifyAddedUserAsUser(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
// modify Admin's own email (ILLEGAL) // modify Admin's own email (ILLEGAL)
modRequest = UserRequest{Mail: "my@new.email", Active: true} modRequest = UserRequest{Mail: "my@new.email"}
newUser.Mail = modRequest.Mail newUser.Mail = modRequest.Mail
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
"/api/users/1", "PUT", helper.KeyModels{"user": modRequest}) "/api/users/1", "PUT", helper.KeyModels{"user": modRequest})
@ -436,7 +436,7 @@ func TestModifyAddedUserAsUser(t *testing.T) {
assert.Equalf(t, 403, code, "Response body: \n%v\n", resp) assert.Equalf(t, 403, code, "Response body: \n%v\n", resp)
// modify newUser's role (ILLEGAL) // modify newUser's role (ILLEGAL)
modRequest = UserRequest{Role: "Admin", Active: true} modRequest = UserRequest{Role: "Admin"}
newUser.Role = modRequest.Role newUser.Role = modRequest.Role
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
@ -445,7 +445,7 @@ func TestModifyAddedUserAsUser(t *testing.T) {
assert.Equalf(t, 403, code, "Response body: \n%v\n", resp) assert.Equalf(t, 403, code, "Response body: \n%v\n", resp)
// modify newUser's password // modify newUser's password
modRequest = UserRequest{Password: "5tr0ng_pw!", Active: true} modRequest = UserRequest{Password: "5tr0ng_pw!"}
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
helper.KeyModels{"user": modRequest}) helper.KeyModels{"user": modRequest})
@ -461,7 +461,7 @@ func TestModifyAddedUserAsUser(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
// modify Admin's password (ILLEGAL) // modify Admin's password (ILLEGAL)
modRequest = UserRequest{Password: "4dm1ns_pw!", Active: true} modRequest = UserRequest{Password: "4dm1ns_pw!"}
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
"/api/users/1", "PUT", helper.KeyModels{"user": modRequest}) "/api/users/1", "PUT", helper.KeyModels{"user": modRequest})
assert.NoError(t, err) assert.NoError(t, err)
@ -496,7 +496,7 @@ func TestInvalidUserUpdate(t *testing.T) {
// try PUT with userID that does not exist // try PUT with userID that does not exist
// should result in not found // should result in not found
modRequest := UserRequest{Password: "longenough", Active: true} modRequest := UserRequest{Password: "longenough"}
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID+1), "PUT", fmt.Sprintf("/api/users/%v", newUserID+1), "PUT",
helper.KeyModels{"user": modRequest}) helper.KeyModels{"user": modRequest})
@ -522,7 +522,7 @@ func TestInvalidUserUpdate(t *testing.T) {
assert.Equalf(t, 400, code, "Response body: \n%v\n", resp) assert.Equalf(t, 400, code, "Response body: \n%v\n", resp)
// modify newUser's email with INVALID email // modify newUser's email with INVALID email
modRequest = UserRequest{Mail: "notEmail", Active: true} modRequest = UserRequest{Mail: "notEmail"}
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
helper.KeyModels{"user": modRequest}) helper.KeyModels{"user": modRequest})
@ -530,7 +530,7 @@ func TestInvalidUserUpdate(t *testing.T) {
assert.Equalf(t, 400, code, "Response body: \n%v\n", resp) assert.Equalf(t, 400, code, "Response body: \n%v\n", resp)
// modify newUser's role with INVALID role // modify newUser's role with INVALID role
modRequest = UserRequest{Role: "noRole", Active: true} modRequest = UserRequest{Role: "noRole"}
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
helper.KeyModels{"user": modRequest}) helper.KeyModels{"user": modRequest})
@ -572,7 +572,7 @@ func TestModifyAddedUserAsAdmin(t *testing.T) {
newUser.Password = "" newUser.Password = ""
// modify newUser's name // modify newUser's name
modRequest := UserRequest{Username: "NewUsername", Active: true} modRequest := UserRequest{Username: "NewUsername"}
newUser.Username = modRequest.Username newUser.Username = modRequest.Username
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
@ -583,7 +583,7 @@ func TestModifyAddedUserAsAdmin(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
// modify newUser's email // modify newUser's email
modRequest = UserRequest{Mail: "new@e.mail", Active: true} modRequest = UserRequest{Mail: "new@e.mail"}
newUser.Mail = modRequest.Mail newUser.Mail = modRequest.Mail
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
@ -594,7 +594,7 @@ func TestModifyAddedUserAsAdmin(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
// modify newUser's role // modify newUser's role
modRequest = UserRequest{Role: "Admin", Active: true} modRequest = UserRequest{Role: "Admin"}
newUser.Role = modRequest.Role newUser.Role = modRequest.Role
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
@ -605,7 +605,7 @@ func TestModifyAddedUserAsAdmin(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
// modify newUser's password // modify newUser's password
modRequest = UserRequest{Password: "4_g00d_pw!", Active: true} modRequest = UserRequest{Password: "4_g00d_pw!"}
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
helper.KeyModels{"user": modRequest}) helper.KeyModels{"user": modRequest})
@ -626,7 +626,7 @@ func TestModifyAddedUserAsAdmin(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
// modify newUser's Active status // modify newUser's Active status
modRequest = UserRequest{Active: false} modRequest = UserRequest{Active: "no"}
code, resp, err = helper.TestEndpoint(router, token, code, resp, err = helper.TestEndpoint(router, token,
fmt.Sprintf("/api/users/%v", newUserID), "PUT", fmt.Sprintf("/api/users/%v", newUserID), "PUT",
helper.KeyModels{"user": modRequest}) helper.KeyModels{"user": modRequest})

View file

@ -2,7 +2,6 @@ package user
import ( import (
"fmt" "fmt"
"gopkg.in/go-playground/validator.v9" "gopkg.in/go-playground/validator.v9"
) )
@ -18,7 +17,7 @@ type validUpdatedRequest struct {
Password string `form:"Password" validate:"omitempty,min=6"` Password string `form:"Password" validate:"omitempty,min=6"`
Role string `form:"Role" validate:"omitempty,oneof=Admin User Guest"` Role string `form:"Role" validate:"omitempty,oneof=Admin User Guest"`
Mail string `form:"Mail" validate:"omitempty,email"` Mail string `form:"Mail" validate:"omitempty,email"`
Active bool `form:"Active" validate:"omitempty"` Active string `form:"Active" validate:"omitempty,oneof=yes no"`
} }
type updateUserRequest struct { type updateUserRequest struct {
@ -64,11 +63,11 @@ func (r *updateUserRequest) updatedUser(role interface{},
} }
// Only the Admin must be able to update users Active state // Only the Admin must be able to update users Active state
if r.Active != u.Active { if (r.Active == "yes" && u.Active == false) || (r.Active == "no" && u.Active == true) {
if role != "Admin" { if role != "Admin" {
return u, fmt.Errorf("Only Admin can update user's Active state") return u, fmt.Errorf("Only Admin can update user's Active state")
} else { } else {
u.Active = r.Active u.Active = !u.Active
} }
} }