Improve org error handling (#2117)
* Improve ErrOrgNotExist type Return new error type Use good error check Use new method to check error Update tests * Fix unchanged method name report
This commit is contained in:
parent
2ef33b5338
commit
30787e48f2
7 changed files with 26 additions and 12 deletions
|
@ -448,6 +448,22 @@ func (err ErrAccessTokenEmpty) Error() string {
|
||||||
// \_______ /__| \___ (____ /___| /__/_____ \(____ /__| |__|\____/|___| /
|
// \_______ /__| \___ (____ /___| /__/_____ \(____ /__| |__|\____/|___| /
|
||||||
// \/ /_____/ \/ \/ \/ \/ \/
|
// \/ /_____/ \/ \/ \/ \/ \/
|
||||||
|
|
||||||
|
// ErrOrgNotExist represents a "OrgNotExist" kind of error.
|
||||||
|
type ErrOrgNotExist struct {
|
||||||
|
ID int64
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsErrOrgNotExist checks if an error is a ErrOrgNotExist.
|
||||||
|
func IsErrOrgNotExist(err error) bool {
|
||||||
|
_, ok := err.(ErrOrgNotExist)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
func (err ErrOrgNotExist) Error() string {
|
||||||
|
return fmt.Sprintf("org does not exist [id: %d, name: %s]", err.ID, err.Name)
|
||||||
|
}
|
||||||
|
|
||||||
// ErrLastOrgOwner represents a "LastOrgOwner" kind of error.
|
// ErrLastOrgOwner represents a "LastOrgOwner" kind of error.
|
||||||
type ErrLastOrgOwner struct {
|
type ErrLastOrgOwner struct {
|
||||||
UID int64
|
UID int64
|
||||||
|
|
|
@ -16,8 +16,6 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// ErrOrgNotExist organization does not exist
|
|
||||||
ErrOrgNotExist = errors.New("Organization does not exist")
|
|
||||||
// ErrTeamNotExist team does not exist
|
// ErrTeamNotExist team does not exist
|
||||||
ErrTeamNotExist = errors.New("Team does not exist")
|
ErrTeamNotExist = errors.New("Team does not exist")
|
||||||
)
|
)
|
||||||
|
@ -180,7 +178,7 @@ func CreateOrganization(org, owner *User) (err error) {
|
||||||
// GetOrgByName returns organization by given name.
|
// GetOrgByName returns organization by given name.
|
||||||
func GetOrgByName(name string) (*User, error) {
|
func GetOrgByName(name string) (*User, error) {
|
||||||
if len(name) == 0 {
|
if len(name) == 0 {
|
||||||
return nil, ErrOrgNotExist
|
return nil, ErrOrgNotExist{0, name}
|
||||||
}
|
}
|
||||||
u := &User{
|
u := &User{
|
||||||
LowerName: strings.ToLower(name),
|
LowerName: strings.ToLower(name),
|
||||||
|
@ -190,7 +188,7 @@ func GetOrgByName(name string) (*User, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if !has {
|
} else if !has {
|
||||||
return nil, ErrOrgNotExist
|
return nil, ErrOrgNotExist{0, name}
|
||||||
}
|
}
|
||||||
return u, nil
|
return u, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -230,7 +230,7 @@ func NewTeam(t *Team) (err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
} else if !has {
|
} else if !has {
|
||||||
return ErrOrgNotExist
|
return ErrOrgNotExist{t.OrgID, ""}
|
||||||
}
|
}
|
||||||
|
|
||||||
t.LowerName = strings.ToLower(t.Name)
|
t.LowerName = strings.ToLower(t.Name)
|
||||||
|
|
|
@ -222,10 +222,10 @@ func TestGetOrgByName(t *testing.T) {
|
||||||
assert.Equal(t, "user3", org.Name)
|
assert.Equal(t, "user3", org.Name)
|
||||||
|
|
||||||
org, err = GetOrgByName("user2") // user2 is an individual
|
org, err = GetOrgByName("user2") // user2 is an individual
|
||||||
assert.Equal(t, ErrOrgNotExist, err)
|
assert.True(t, IsErrOrgNotExist(err))
|
||||||
|
|
||||||
org, err = GetOrgByName("") // corner case
|
org, err = GetOrgByName("") // corner case
|
||||||
assert.Equal(t, ErrOrgNotExist, err)
|
assert.True(t, IsErrOrgNotExist(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCountOrganizations(t *testing.T) {
|
func TestCountOrganizations(t *testing.T) {
|
||||||
|
|
|
@ -208,12 +208,12 @@ func orgAssignment(args ...bool) macaron.Handler {
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
if assignOrg {
|
if assignOrg {
|
||||||
ctx.Org.Organization, err = models.GetUserByName(ctx.Params(":orgname"))
|
ctx.Org.Organization, err = models.GetOrgByName(ctx.Params(":orgname"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if models.IsErrUserNotExist(err) {
|
if models.IsErrOrgNotExist(err) {
|
||||||
ctx.Status(404)
|
ctx.Status(404)
|
||||||
} else {
|
} else {
|
||||||
ctx.Error(500, "GetUserByName", err)
|
ctx.Error(500, "GetOrgByName", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ func CreateFork(ctx *context.APIContext, form api.CreateForkOption) {
|
||||||
} else {
|
} else {
|
||||||
org, err := models.GetOrgByName(*form.Organization)
|
org, err := models.GetOrgByName(*form.Organization)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == models.ErrOrgNotExist {
|
if models.IsErrOrgNotExist(err) {
|
||||||
ctx.Error(422, "", err)
|
ctx.Error(422, "", err)
|
||||||
} else {
|
} else {
|
||||||
ctx.Error(500, "GetOrgByName", err)
|
ctx.Error(500, "GetOrgByName", err)
|
||||||
|
|
|
@ -156,7 +156,7 @@ func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) {
|
||||||
|
|
||||||
org, err := models.GetOrgByName(ctx.Params(":org"))
|
org, err := models.GetOrgByName(ctx.Params(":org"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if models.IsErrUserNotExist(err) {
|
if models.IsErrOrgNotExist(err) {
|
||||||
ctx.Error(422, "", err)
|
ctx.Error(422, "", err)
|
||||||
} else {
|
} else {
|
||||||
ctx.Error(500, "GetOrgByName", err)
|
ctx.Error(500, "GetOrgByName", err)
|
||||||
|
|
Reference in a new issue