mirror of
https://github.com/go-gitea/gitea.git
synced 2026-05-07 14:43:35 +02:00
Merge branch 'main' into lunny/fix_lfs_client
This commit is contained in:
commit
cfbf0f09ea
@ -699,7 +699,7 @@ func (c *Comment) LoadTime(ctx context.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
c.Time, err = GetTrackedTimeByID(ctx, c.TimeID)
|
c.Time, err = GetTrackedTimeByID(ctx, c.IssueID, c.TimeID)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -311,13 +311,13 @@ func deleteTime(ctx context.Context, t *TrackedTime) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetTrackedTimeByID returns raw TrackedTime without loading attributes by id
|
// GetTrackedTimeByID returns raw TrackedTime without loading attributes by id
|
||||||
func GetTrackedTimeByID(ctx context.Context, id int64) (*TrackedTime, error) {
|
func GetTrackedTimeByID(ctx context.Context, issueID, trackedTimeID int64) (*TrackedTime, error) {
|
||||||
time := new(TrackedTime)
|
time := new(TrackedTime)
|
||||||
has, err := db.GetEngine(ctx).ID(id).Get(time)
|
has, err := db.GetEngine(ctx).ID(trackedTimeID).Where("issue_id = ?", issueID).Get(time)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if !has {
|
} else if !has {
|
||||||
return nil, db.ErrNotExist{Resource: "tracked_time", ID: id}
|
return nil, db.ErrNotExist{Resource: "tracked_time", ID: trackedTimeID}
|
||||||
}
|
}
|
||||||
return time, nil
|
return time, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -356,7 +356,7 @@ func DeleteTime(ctx *context.APIContext) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
time, err := issues_model.GetTrackedTimeByID(ctx, ctx.PathParamInt64("id"))
|
time, err := issues_model.GetTrackedTimeByID(ctx, issue.ID, ctx.PathParamInt64("id"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if db.IsErrNotExist(err) {
|
if db.IsErrNotExist(err) {
|
||||||
ctx.APIErrorNotFound(err)
|
ctx.APIErrorNotFound(err)
|
||||||
|
|||||||
@ -60,7 +60,7 @@ func DeleteTime(c *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
t, err := issues_model.GetTrackedTimeByID(c, c.PathParamInt64("timeid"))
|
t, err := issues_model.GetTrackedTimeByID(c, issue.ID, c.PathParamInt64("timeid"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if db.IsErrNotExist(err) {
|
if db.IsErrNotExist(err) {
|
||||||
c.NotFound(err)
|
c.NotFound(err)
|
||||||
|
|||||||
@ -79,6 +79,12 @@ func TestAPIDeleteTrackedTime(t *testing.T) {
|
|||||||
AddTokenAuth(token)
|
AddTokenAuth(token)
|
||||||
MakeRequest(t, req, http.StatusForbidden)
|
MakeRequest(t, req, http.StatusForbidden)
|
||||||
|
|
||||||
|
// Deletion should be scoped to the issue in the URL
|
||||||
|
time5 := unittest.AssertExistsAndLoadBean(t, &issues_model.TrackedTime{ID: 5})
|
||||||
|
req = NewRequestf(t, "DELETE", "/api/v1/repos/%s/%s/issues/%d/times/%d", user2.Name, issue2.Repo.Name, issue2.Index, time5.ID).
|
||||||
|
AddTokenAuth(token)
|
||||||
|
MakeRequest(t, req, http.StatusNotFound)
|
||||||
|
|
||||||
time3 := unittest.AssertExistsAndLoadBean(t, &issues_model.TrackedTime{ID: 3})
|
time3 := unittest.AssertExistsAndLoadBean(t, &issues_model.TrackedTime{ID: 3})
|
||||||
req = NewRequestf(t, "DELETE", "/api/v1/repos/%s/%s/issues/%d/times/%d", user2.Name, issue2.Repo.Name, issue2.Index, time3.ID).
|
req = NewRequestf(t, "DELETE", "/api/v1/repos/%s/%s/issues/%d/times/%d", user2.Name, issue2.Repo.Name, issue2.Index, time3.ID).
|
||||||
AddTokenAuth(token)
|
AddTokenAuth(token)
|
||||||
|
|||||||
32
tests/integration/issue_timetrack_test.go
Normal file
32
tests/integration/issue_timetrack_test.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright 2026 The Gitea Authors. All rights reserved.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
package integration
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
issues_model "code.gitea.io/gitea/models/issues"
|
||||||
|
"code.gitea.io/gitea/models/unittest"
|
||||||
|
"code.gitea.io/gitea/tests"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestIssueTimeDeleteScoped(t *testing.T) {
|
||||||
|
defer tests.PrepareTestEnv(t)()
|
||||||
|
|
||||||
|
issue1 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
|
||||||
|
assert.NoError(t, issue1.LoadRepo(t.Context()))
|
||||||
|
tracked := unittest.AssertExistsAndLoadBean(t, &issues_model.TrackedTime{ID: 5})
|
||||||
|
|
||||||
|
session := loginUser(t, issue1.Repo.OwnerName)
|
||||||
|
url := fmt.Sprintf("/%s/%s/issues/%d/times/%d/delete", issue1.Repo.OwnerName, issue1.Repo.Name, issue1.Index, tracked.ID)
|
||||||
|
req := NewRequestWithValues(t, "POST", url, map[string]string{})
|
||||||
|
session.MakeRequest(t, req, http.StatusNotFound)
|
||||||
|
|
||||||
|
tracked = unittest.AssertExistsAndLoadBean(t, &issues_model.TrackedTime{ID: tracked.ID})
|
||||||
|
assert.False(t, tracked.Deleted)
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user