Browse Source

Fix tracked time issues (#11349) (#11354)

Backport #11349 

* Fix tracked time issues (#11349)

* Fix nil exeption: #11313

* fix 500

* activate test 😆

* move logic

* Add missing import

Co-authored-by: 6543 <6543@obermui.de>
Co-authored-by: Guillermo Prandi <guillep2k@users.noreply.github.com>
tags/v1.11.5
guillep2k 4 years ago
parent
commit
0b216f40fd
No account linked to committer's email address

+ 3
- 3
integrations/api_issue_tracked_time_test.go View File

@@ -60,17 +60,17 @@ func TestAPIDeleteTrackedTime(t *testing.T) {
//Deletion not allowed
req := NewRequestf(t, "DELETE", "/api/v1/repos/%s/%s/issues/%d/times/%d?token=%s", user2.Name, issue2.Repo.Name, issue2.Index, time6.ID, token)
session.MakeRequest(t, req, http.StatusForbidden)
/* Delete own time <-- ToDo: timout without reason
time3 := models.AssertExistsAndLoadBean(t, &models.TrackedTime{ID: 3}).(*models.TrackedTime)
req = NewRequestf(t, "DELETE", "/api/v1/repos/%s/%s/issues/%d/times/%d?token=%s", user2.Name, issue2.Repo.Name, issue2.Index, time3.ID, token)
session.MakeRequest(t, req, http.StatusNoContent)
//Delete non existing time
session.MakeRequest(t, req, http.StatusInternalServerError) */
session.MakeRequest(t, req, http.StatusNotFound)

//Reset time of user 2 on issue 2
trackedSeconds, err := models.GetTrackedSeconds(models.FindTrackedTimesOptions{IssueID: 2, UserID: 2})
assert.NoError(t, err)
assert.Equal(t, int64(3662), trackedSeconds)
assert.Equal(t, int64(3661), trackedSeconds)

req = NewRequestf(t, "DELETE", "/api/v1/repos/%s/%s/issues/%d/times?token=%s", user2.Name, issue2.Repo.Name, issue2.Index, token)
session.MakeRequest(t, req, http.StatusNoContent)

+ 6
- 4
models/issue_tracked_time.go View File

@@ -273,6 +273,10 @@ func DeleteTime(t *TrackedTime) error {
return err
}

if err := t.loadAttributes(sess); err != nil {
return err
}

if err := deleteTime(sess, t); err != nil {
return err
}
@@ -312,10 +316,8 @@ func deleteTime(e Engine, t *TrackedTime) error {

// GetTrackedTimeByID returns raw TrackedTime without loading attributes by id
func GetTrackedTimeByID(id int64) (*TrackedTime, error) {
time := &TrackedTime{
ID: id,
}
has, err := x.Get(time)
time := new(TrackedTime)
has, err := x.ID(id).Get(time)
if err != nil {
return nil, err
} else if !has {

+ 5
- 0
routers/api/v1/repo/issue_tracked_time.go View File

@@ -5,6 +5,7 @@
package repo

import (
"fmt"
"net/http"
"time"

@@ -296,6 +297,10 @@ func DeleteTime(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "GetTrackedTimeByID", err)
return
}
if time.Deleted {
ctx.NotFound(fmt.Errorf("tracked time [%d] already deleted", time.ID))
return
}

if !ctx.User.IsAdmin && time.UserID != ctx.User.ID {
//Only Admin and User itself can delete their time

Loading…
Cancel
Save