loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request '[BUG] Return blocking errors as JSON errors' (#4914) from gusted/forgejo-block-json into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4914
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>

+46 -20
+2 -2
routers/web/repo/issue.go
··· 1263 1263 1264 1264 if err := issue_service.NewIssue(ctx, repo, issue, labelIDs, attachments, assigneeIDs); err != nil { 1265 1265 if errors.Is(err, user_model.ErrBlockedByUser) { 1266 - ctx.RenderWithErr(ctx.Tr("repo.issues.blocked_by_user"), tplIssueNew, form) 1266 + ctx.JSONError(ctx.Tr("repo.issues.blocked_by_user")) 1267 1267 return 1268 1268 } else if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) { 1269 1269 ctx.Error(http.StatusBadRequest, "UserDoesNotHaveAccessToRepo", err.Error()) ··· 3197 3197 comment, err := issue_service.CreateIssueComment(ctx, ctx.Doer, ctx.Repo.Repository, issue, form.Content, attachments) 3198 3198 if err != nil { 3199 3199 if errors.Is(err, user_model.ErrBlockedByUser) { 3200 - ctx.Flash.Error(ctx.Tr("repo.issues.comment.blocked_by_user")) 3200 + ctx.JSONError(ctx.Tr("repo.issues.comment.blocked_by_user")) 3201 3201 } else { 3202 3202 ctx.ServerError("CreateIssueComment", err) 3203 3203 }
+1 -2
routers/web/repo/pull.go
··· 1525 1525 1526 1526 if err := pull_service.NewPullRequest(ctx, repo, pullIssue, labelIDs, attachments, pullRequest, assigneeIDs); err != nil { 1527 1527 if errors.Is(err, user_model.ErrBlockedByUser) { 1528 - ctx.Flash.Error(ctx.Tr("repo.pulls.blocked_by_user")) 1529 - ctx.Redirect(ctx.Link) 1528 + ctx.JSONError(ctx.Tr("repo.pulls.blocked_by_user")) 1530 1529 return 1531 1530 } else if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) { 1532 1531 ctx.Error(http.StatusBadRequest, "UserDoesNotHaveAccessToRepo", err.Error())
+43 -16
tests/integration/block_test.go
··· 159 159 doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) 160 160 blockedUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) 161 161 blockedUser2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 10}) 162 + repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1, OwnerID: doer.ID}) 162 163 repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2, OwnerID: doer.ID}) 163 164 repo7 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 7, OwnerID: blockedUser2.ID}) 164 165 issue4 := unittest.AssertExistsAndLoadBean(t, &issue_model.Issue{ID: 4, RepoID: repo2.ID}) ··· 173 174 BlockUser(t, doer, blockedUser) 174 175 BlockUser(t, doer, blockedUser2) 175 176 176 - // Ensures that issue creation on doer's ownen repositories are blocked. 177 + type errorJSON struct { 178 + Error string `json:"errorMessage"` 179 + } 180 + locale := translation.NewLocale("en-US") 181 + 182 + // Ensures that issue creation on doer's owned repositories are blocked. 177 183 t.Run("Issue creation", func(t *testing.T) { 178 184 defer tests.PrintCurrentTest(t)() 179 185 ··· 185 191 "title": "Title", 186 192 "content": "Hello!", 187 193 }) 188 - resp := session.MakeRequest(t, req, http.StatusOK) 194 + resp := session.MakeRequest(t, req, http.StatusBadRequest) 195 + 196 + var errorResp errorJSON 197 + DecodeJSON(t, resp, &errorResp) 198 + 199 + assert.EqualValues(t, locale.Tr("repo.issues.blocked_by_user"), errorResp.Error) 200 + }) 201 + 202 + // Ensures that pull creation on doer's owned repositories are blocked. 203 + t.Run("Pull creation", func(t *testing.T) { 204 + defer tests.PrintCurrentTest(t)() 205 + 206 + session := loginUser(t, blockedUser.Name) 207 + link := fmt.Sprintf("%s/compare/v1.1...master", repo1.FullName()) 208 + 209 + req := NewRequestWithValues(t, "POST", link, map[string]string{ 210 + "_csrf": GetCSRF(t, session, link), 211 + "title": "Title", 212 + "content": "Hello!", 213 + }) 214 + resp := session.MakeRequest(t, req, http.StatusBadRequest) 215 + 216 + var errorResp errorJSON 217 + DecodeJSON(t, resp, &errorResp) 189 218 190 - htmlDoc := NewHTMLParser(t, resp.Body) 191 - assert.Contains(t, 192 - htmlDoc.doc.Find(".ui.negative.message").Text(), 193 - translation.NewLocale("en-US").Tr("repo.issues.blocked_by_user"), 194 - ) 219 + assert.EqualValues(t, locale.Tr("repo.pulls.blocked_by_user"), errorResp.Error) 195 220 }) 196 221 197 222 // Ensures that comment creation on doer's owned repositories and doer's 198 223 // posted issues are blocked. 199 224 t.Run("Comment creation", func(t *testing.T) { 200 - expectedFlash := "error%3DYou%2Bcannot%2Bcreate%2Ba%2Bcomment%2Bon%2Bthis%2Bissue%2Bbecause%2Byou%2Bare%2Bblocked%2Bby%2Bthe%2Brepository%2Bowner%2Bor%2Bthe%2Bposter%2Bof%2Bthe%2Bissue." 225 + expectedMessage := locale.Tr("repo.issues.comment.blocked_by_user") 201 226 202 227 t.Run("Blocked by repository owner", func(t *testing.T) { 203 228 defer tests.PrintCurrentTest(t)() ··· 208 233 "_csrf": GetCSRF(t, session, issue10URL), 209 234 "content": "Not a kind comment", 210 235 }) 211 - session.MakeRequest(t, req, http.StatusOK) 236 + resp := session.MakeRequest(t, req, http.StatusBadRequest) 237 + 238 + var errorResp errorJSON 239 + DecodeJSON(t, resp, &errorResp) 212 240 213 - flashCookie := session.GetCookie(forgejo_context.CookieNameFlash) 214 - assert.NotNil(t, flashCookie) 215 - assert.EqualValues(t, expectedFlash, flashCookie.Value) 241 + assert.EqualValues(t, expectedMessage, errorResp.Error) 216 242 }) 217 243 218 244 t.Run("Blocked by issue poster", func(t *testing.T) { ··· 228 254 "_csrf": GetCSRF(t, session, issueURL), 229 255 "content": "Not a kind comment", 230 256 }) 231 - session.MakeRequest(t, req, http.StatusOK) 257 + resp := session.MakeRequest(t, req, http.StatusBadRequest) 258 + 259 + var errorResp errorJSON 260 + DecodeJSON(t, resp, &errorResp) 232 261 233 - flashCookie := session.GetCookie(forgejo_context.CookieNameFlash) 234 - assert.NotNil(t, flashCookie) 235 - assert.EqualValues(t, expectedFlash, flashCookie.Value) 262 + assert.EqualValues(t, expectedMessage, errorResp.Error) 236 263 }) 237 264 }) 238 265