]> source.dussan.org Git - gitea.git/commitdiff
Fix tracked time issues (#11349)
author6543 <6543@obermui.de>
Sat, 9 May 2020 14:18:44 +0000 (16:18 +0200)
committerGitHub <noreply@github.com>
Sat, 9 May 2020 14:18:44 +0000 (11:18 -0300)
* Fix nil exeption: #11313

* fix 500

* activate test ðŸ˜†

* move logic

integrations/api_issue_tracked_time_test.go
models/issue_tracked_time.go
routers/api/v1/repo/issue_tracked_time.go

index 97d401ff9d87de7780faca40350dfc7ba1c36658..1a0ee99a43ad85507bff6d6b0c3357718f53e9e1 100644 (file)
@@ -72,17 +72,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)
index 49fefd327985cf7760cc378ac8929aeee3a6b7e9..195f3e785034bad0f227af3ec6709a0ea83d01a1 100644 (file)
@@ -260,6 +260,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
        }
@@ -299,10 +303,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 {
index 66f8a0879ad70ab47c312618d1bab0c89deed31e..19242d1fae78a8baac4c622f2d2f7902ccdf8dff 100644 (file)
@@ -324,6 +324,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