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  }