Skip to content

Commit 310c586

Browse files
authored
Merge branch 'release/v1.24' into backport-35584-v1.24
2 parents 0a14a73 + 86d99e2 commit 310c586

File tree

5 files changed

+77
-7
lines changed

5 files changed

+77
-7
lines changed

models/issues/review_list.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ func GetReviewsByIssueID(ctx context.Context, issueID int64) (latestReviews, mig
173173
reviewersMap := make(map[int64][]*Review) // key is reviewer id
174174
originalReviewersMap := make(map[int64][]*Review) // key is original author id
175175
reviewTeamsMap := make(map[int64][]*Review) // key is reviewer team id
176-
countedReivewTypes := []ReviewType{ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest}
176+
countedReivewTypes := []ReviewType{ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest, ReviewTypeComment}
177177
for _, review := range reviews {
178178
if review.ReviewerTeamID == 0 && slices.Contains(countedReivewTypes, review.Type) && !review.Dismissed {
179179
if review.OriginalAuthorID != 0 {

models/issues/review_test.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,20 @@ func TestGetReviewersByIssueID(t *testing.T) {
123123
assert.NoError(t, unittest.PrepareTestDatabase())
124124

125125
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 3})
126+
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
126127
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
127128
org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3})
128129
user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
129130
user5 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5})
130131

131132
expectedReviews := []*issues_model.Review{}
132133
expectedReviews = append(expectedReviews,
134+
&issues_model.Review{
135+
ID: 5,
136+
Reviewer: user1,
137+
Type: issues_model.ReviewTypeComment,
138+
UpdatedUnix: 946684810,
139+
},
133140
&issues_model.Review{
134141
ID: 7,
135142
Reviewer: org3,
@@ -168,8 +175,9 @@ func TestGetReviewersByIssueID(t *testing.T) {
168175
for _, review := range allReviews {
169176
assert.NoError(t, review.LoadReviewer(db.DefaultContext))
170177
}
171-
if assert.Len(t, allReviews, 5) {
178+
if assert.Len(t, allReviews, 6) {
172179
for i, review := range allReviews {
180+
assert.Equal(t, expectedReviews[i].ID, review.ID)
173181
assert.Equal(t, expectedReviews[i].Reviewer, review.Reviewer)
174182
assert.Equal(t, expectedReviews[i].Type, review.Type)
175183
assert.Equal(t, expectedReviews[i].UpdatedUnix, review.UpdatedUnix)

models/perm/access/repo_permission.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -348,10 +348,8 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
348348

349349
for _, u := range repo.Units {
350350
for _, team := range teams {
351-
unitAccessMode := minAccessMode
352-
if teamMode, exist := team.UnitAccessModeEx(ctx, u.Type); exist {
353-
unitAccessMode = max(perm.unitsMode[u.Type], unitAccessMode, teamMode)
354-
}
351+
teamMode, _ := team.UnitAccessModeEx(ctx, u.Type)
352+
unitAccessMode := max(perm.unitsMode[u.Type], minAccessMode, teamMode)
355353
perm.unitsMode[u.Type] = unitAccessMode
356354
}
357355
}

models/perm/access/repo_permission_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,4 +197,37 @@ func TestGetUserRepoPermission(t *testing.T) {
197197
assert.Equal(t, perm_model.AccessModeWrite, perm.unitsMode[unit.TypeCode])
198198
assert.Equal(t, perm_model.AccessModeRead, perm.unitsMode[unit.TypeIssues])
199199
})
200+
201+
repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3}) // org private repo, same org as repo 32
202+
require.NoError(t, repo3.LoadOwner(ctx))
203+
require.True(t, repo3.Owner.IsOrganization())
204+
require.NoError(t, db.TruncateBeans(ctx, &organization.TeamUnit{}, &Access{})) // The user has access set of that repo, remove it, it is useless for our test
205+
require.NoError(t, db.Insert(ctx, &organization.TeamRepo{OrgID: org.ID, TeamID: team.ID, RepoID: repo3.ID}))
206+
t.Run("DoerWithNoopTeamOnPrivateRepo", func(t *testing.T) {
207+
perm, err := GetUserRepoPermission(ctx, repo3, user)
208+
require.NoError(t, err)
209+
assert.Equal(t, perm_model.AccessModeNone, perm.AccessMode)
210+
assert.Equal(t, perm_model.AccessModeNone, perm.unitsMode[unit.TypeCode])
211+
assert.Equal(t, perm_model.AccessModeNone, perm.unitsMode[unit.TypeIssues])
212+
})
213+
214+
require.NoError(t, db.Insert(ctx, &organization.TeamUnit{OrgID: org.ID, TeamID: team.ID, Type: unit.TypeCode, AccessMode: perm_model.AccessModeNone}))
215+
require.NoError(t, db.Insert(ctx, &organization.TeamUnit{OrgID: org.ID, TeamID: team.ID, Type: unit.TypeIssues, AccessMode: perm_model.AccessModeRead}))
216+
t.Run("DoerWithReadIssueTeamOnPrivateRepo", func(t *testing.T) {
217+
perm, err := GetUserRepoPermission(ctx, repo3, user)
218+
require.NoError(t, err)
219+
assert.Equal(t, perm_model.AccessModeNone, perm.AccessMode)
220+
assert.Equal(t, perm_model.AccessModeNone, perm.unitsMode[unit.TypeCode])
221+
assert.Equal(t, perm_model.AccessModeRead, perm.unitsMode[unit.TypeIssues])
222+
})
223+
224+
require.NoError(t, db.Insert(ctx, repo_model.Collaboration{RepoID: repo3.ID, UserID: user.ID, Mode: perm_model.AccessModeWrite}))
225+
require.NoError(t, db.Insert(ctx, Access{RepoID: repo3.ID, UserID: user.ID, Mode: perm_model.AccessModeWrite}))
226+
t.Run("DoerWithReadIssueTeamAndWriteCollaboratorOnPrivateRepo", func(t *testing.T) {
227+
perm, err := GetUserRepoPermission(ctx, repo3, user)
228+
require.NoError(t, err)
229+
assert.Equal(t, perm_model.AccessModeWrite, perm.AccessMode)
230+
assert.Equal(t, perm_model.AccessModeWrite, perm.unitsMode[unit.TypeCode])
231+
assert.Equal(t, perm_model.AccessModeWrite, perm.unitsMode[unit.TypeIssues])
232+
})
200233
}

modules/hcaptcha/hcaptcha_test.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
package hcaptcha
55

66
import (
7+
"errors"
8+
"io"
79
"net/http"
10+
"net/url"
811
"os"
912
"strings"
1013
"testing"
@@ -21,6 +24,33 @@ func TestMain(m *testing.M) {
2124
os.Exit(m.Run())
2225
}
2326

27+
type mockTransport struct{}
28+
29+
func (mockTransport) RoundTrip(req *http.Request) (*http.Response, error) {
30+
if req.URL.String() != verifyURL {
31+
return nil, errors.New("unsupported url")
32+
}
33+
34+
body, err := io.ReadAll(req.Body)
35+
if err != nil {
36+
return nil, err
37+
}
38+
39+
bodyValues, err := url.ParseQuery(string(body))
40+
if err != nil {
41+
return nil, err
42+
}
43+
44+
var responseText string
45+
if bodyValues.Get("response") == dummyToken {
46+
responseText = `{"success":true,"credit":false,"hostname":"dummy-key-pass","challenge_ts":"2025-10-08T16:02:56.136Z"}`
47+
} else {
48+
responseText = `{"success":false,"error-codes":["invalid-input-response"]}`
49+
}
50+
51+
return &http.Response{Request: req, Body: io.NopCloser(strings.NewReader(responseText))}, nil
52+
}
53+
2454
func TestCaptcha(t *testing.T) {
2555
tt := []struct {
2656
Name string
@@ -54,7 +84,8 @@ func TestCaptcha(t *testing.T) {
5484
for _, tc := range tt {
5585
t.Run(tc.Name, func(t *testing.T) {
5686
client, err := New(tc.Secret, WithHTTP(&http.Client{
57-
Timeout: time.Second * 5,
87+
Timeout: time.Second * 5,
88+
Transport: mockTransport{},
5889
}))
5990
if err != nil {
6091
// The only error that can be returned from creating a client

0 commit comments

Comments
 (0)