Skip to content

Commit

Permalink
Improve org error handling (#2117)
Browse files Browse the repository at this point in the history
* Improve ErrOrgNotExist type
Return new error type
Use good error check
Use new method to check error
Update tests

* Fix unchanged method name report
  • Loading branch information
sapk authored and lunny committed Jul 6, 2017
1 parent 2ef33b5 commit 30787e4
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 12 deletions.
16 changes: 16 additions & 0 deletions models/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
type ErrLastOrgOwner struct {
UID int64
Expand Down
6 changes: 2 additions & 4 deletions models/org.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ import (
)

var (
// ErrOrgNotExist organization does not exist
ErrOrgNotExist = errors.New("Organization does not exist")
// ErrTeamNotExist team does not exist
ErrTeamNotExist = errors.New("Team does not exist")
)
Expand Down Expand Up @@ -180,7 +178,7 @@ func CreateOrganization(org, owner *User) (err error) {
// GetOrgByName returns organization by given name.
func GetOrgByName(name string) (*User, error) {
if len(name) == 0 {
return nil, ErrOrgNotExist
return nil, ErrOrgNotExist{0, name}
}
u := &User{
LowerName: strings.ToLower(name),
Expand All @@ -190,7 +188,7 @@ func GetOrgByName(name string) (*User, error) {
if err != nil {
return nil, err
} else if !has {
return nil, ErrOrgNotExist
return nil, ErrOrgNotExist{0, name}
}
return u, nil
}
Expand Down
2 changes: 1 addition & 1 deletion models/org_team.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ func NewTeam(t *Team) (err error) {
if err != nil {
return err
} else if !has {
return ErrOrgNotExist
return ErrOrgNotExist{t.OrgID, ""}
}

t.LowerName = strings.ToLower(t.Name)
Expand Down
4 changes: 2 additions & 2 deletions models/org_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,10 +222,10 @@ func TestGetOrgByName(t *testing.T) {
assert.Equal(t, "user3", org.Name)

org, err = GetOrgByName("user2") // user2 is an individual
assert.Equal(t, ErrOrgNotExist, err)
assert.True(t, IsErrOrgNotExist(err))

org, err = GetOrgByName("") // corner case
assert.Equal(t, ErrOrgNotExist, err)
assert.True(t, IsErrOrgNotExist(err))
}

func TestCountOrganizations(t *testing.T) {
Expand Down
6 changes: 3 additions & 3 deletions routers/api/v1/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,12 +208,12 @@ func orgAssignment(args ...bool) macaron.Handler {

var err error
if assignOrg {
ctx.Org.Organization, err = models.GetUserByName(ctx.Params(":orgname"))
ctx.Org.Organization, err = models.GetOrgByName(ctx.Params(":orgname"))
if err != nil {
if models.IsErrUserNotExist(err) {
if models.IsErrOrgNotExist(err) {
ctx.Status(404)
} else {
ctx.Error(500, "GetUserByName", err)
ctx.Error(500, "GetOrgByName", err)
}
return
}
Expand Down
2 changes: 1 addition & 1 deletion routers/api/v1/repo/fork.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func CreateFork(ctx *context.APIContext, form api.CreateForkOption) {
} else {
org, err := models.GetOrgByName(*form.Organization)
if err != nil {
if err == models.ErrOrgNotExist {
if models.IsErrOrgNotExist(err) {
ctx.Error(422, "", err)
} else {
ctx.Error(500, "GetOrgByName", err)
Expand Down
2 changes: 1 addition & 1 deletion routers/api/v1/repo/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) {

org, err := models.GetOrgByName(ctx.Params(":org"))
if err != nil {
if models.IsErrUserNotExist(err) {
if models.IsErrOrgNotExist(err) {
ctx.Error(422, "", err)
} else {
ctx.Error(500, "GetOrgByName", err)
Expand Down

0 comments on commit 30787e4

Please sign in to comment.