code.gitea.io/gitea@v1.22.3/routers/web/repo/pull_review_test.go (about) 1 // Copyright 2024 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repo 5 6 import ( 7 "net/http" 8 "net/http/httptest" 9 "testing" 10 11 "code.gitea.io/gitea/models/db" 12 issues_model "code.gitea.io/gitea/models/issues" 13 "code.gitea.io/gitea/models/unittest" 14 "code.gitea.io/gitea/modules/templates" 15 "code.gitea.io/gitea/services/context" 16 "code.gitea.io/gitea/services/contexttest" 17 "code.gitea.io/gitea/services/pull" 18 19 "github.com/stretchr/testify/assert" 20 ) 21 22 func TestRenderConversation(t *testing.T) { 23 unittest.PrepareTestEnv(t) 24 25 pr, _ := issues_model.GetPullRequestByID(db.DefaultContext, 2) 26 _ = pr.LoadIssue(db.DefaultContext) 27 _ = pr.Issue.LoadPoster(db.DefaultContext) 28 _ = pr.Issue.LoadRepo(db.DefaultContext) 29 30 run := func(name string, cb func(t *testing.T, ctx *context.Context, resp *httptest.ResponseRecorder)) { 31 t.Run(name, func(t *testing.T) { 32 ctx, resp := contexttest.MockContext(t, "/", contexttest.MockContextOption{Render: templates.HTMLRenderer()}) 33 contexttest.LoadUser(t, ctx, pr.Issue.PosterID) 34 contexttest.LoadRepo(t, ctx, pr.BaseRepoID) 35 contexttest.LoadGitRepo(t, ctx) 36 defer ctx.Repo.GitRepo.Close() 37 cb(t, ctx, resp) 38 }) 39 } 40 41 var preparedComment *issues_model.Comment 42 run("prepare", func(t *testing.T, ctx *context.Context, resp *httptest.ResponseRecorder) { 43 comment, err := pull.CreateCodeComment(ctx, pr.Issue.Poster, ctx.Repo.GitRepo, pr.Issue, 1, "content", "", false, 0, pr.HeadCommitID, nil) 44 if !assert.NoError(t, err) { 45 return 46 } 47 comment.Invalidated = true 48 err = issues_model.UpdateCommentInvalidate(ctx, comment) 49 if !assert.NoError(t, err) { 50 return 51 } 52 preparedComment = comment 53 }) 54 if !assert.NotNil(t, preparedComment) { 55 return 56 } 57 run("diff with outdated", func(t *testing.T, ctx *context.Context, resp *httptest.ResponseRecorder) { 58 ctx.Data["ShowOutdatedComments"] = true 59 renderConversation(ctx, preparedComment, "diff") 60 assert.Contains(t, resp.Body.String(), `<div class="content comment-container"`) 61 }) 62 run("diff without outdated", func(t *testing.T, ctx *context.Context, resp *httptest.ResponseRecorder) { 63 ctx.Data["ShowOutdatedComments"] = false 64 renderConversation(ctx, preparedComment, "diff") 65 assert.Contains(t, resp.Body.String(), `conversation-not-existing`) 66 }) 67 run("timeline with outdated", func(t *testing.T, ctx *context.Context, resp *httptest.ResponseRecorder) { 68 ctx.Data["ShowOutdatedComments"] = true 69 renderConversation(ctx, preparedComment, "timeline") 70 assert.Contains(t, resp.Body.String(), `<div id="code-comments-`) 71 }) 72 run("timeline is not affected by ShowOutdatedComments=false", func(t *testing.T, ctx *context.Context, resp *httptest.ResponseRecorder) { 73 ctx.Data["ShowOutdatedComments"] = false 74 renderConversation(ctx, preparedComment, "timeline") 75 assert.Contains(t, resp.Body.String(), `<div id="code-comments-`) 76 }) 77 run("diff non-existing review", func(t *testing.T, ctx *context.Context, resp *httptest.ResponseRecorder) { 78 err := db.TruncateBeans(db.DefaultContext, &issues_model.Review{}) 79 assert.NoError(t, err) 80 ctx.Data["ShowOutdatedComments"] = true 81 renderConversation(ctx, preparedComment, "diff") 82 assert.Equal(t, http.StatusOK, resp.Code) 83 assert.NotContains(t, resp.Body.String(), `status-page-500`) 84 }) 85 run("timeline non-existing review", func(t *testing.T, ctx *context.Context, resp *httptest.ResponseRecorder) { 86 err := db.TruncateBeans(db.DefaultContext, &issues_model.Review{}) 87 assert.NoError(t, err) 88 ctx.Data["ShowOutdatedComments"] = true 89 renderConversation(ctx, preparedComment, "timeline") 90 assert.Equal(t, http.StatusOK, resp.Code) 91 assert.NotContains(t, resp.Body.String(), `status-page-500`) 92 }) 93 }