|
| 1 | +// Copyright 2024 The Gitea Authors. All rights reserved. |
| 2 | +// SPDX-License-Identifier: MIT |
| 3 | + |
| 4 | +package renderhelper |
| 5 | + |
| 6 | +import ( |
| 7 | + "context" |
| 8 | + "testing" |
| 9 | + |
| 10 | + repo_model "code.gitea.io/gitea/models/repo" |
| 11 | + "code.gitea.io/gitea/models/unittest" |
| 12 | + "code.gitea.io/gitea/modules/markup" |
| 13 | + "code.gitea.io/gitea/modules/markup/markdown" |
| 14 | + |
| 15 | + "github.com/stretchr/testify/assert" |
| 16 | +) |
| 17 | + |
| 18 | +func TestRepoComment(t *testing.T) { |
| 19 | + unittest.PrepareTestEnv(t) |
| 20 | + markup.RenderBehaviorForTesting.DisableAdditionalAttributes = true |
| 21 | + markup.Init(&markup.RenderHelperFuncs{ |
| 22 | + IsUsernameMentionable: func(ctx context.Context, username string) bool { |
| 23 | + return username == "user2" |
| 24 | + }, |
| 25 | + }) |
| 26 | + |
| 27 | + repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) |
| 28 | + |
| 29 | + t.Run("AutoLink", func(t *testing.T) { |
| 30 | + rctx := NewRenderContextRepoComment(context.Background(), repo1).WithMarkupType(markdown.MarkupName) |
| 31 | + rendered, err := markup.RenderString(rctx, ` |
| 32 | +65f1bf27bc3bf70f64657658635e66094edbcb4d |
| 33 | +#1 |
| 34 | +@user2 |
| 35 | +`) |
| 36 | + assert.NoError(t, err) |
| 37 | + assert.Equal(t, |
| 38 | + `<p><a href="/user2/repo1/commit/65f1bf27bc3bf70f64657658635e66094edbcb4d" rel="nofollow"><code>65f1bf27bc</code></a><br/> |
| 39 | +<a href="/user2/repo1/issues/1" class="ref-issue" rel="nofollow">#1</a><br/> |
| 40 | +<a href="/user2" rel="nofollow">@user2</a></p> |
| 41 | +`, rendered) |
| 42 | + }) |
| 43 | + |
| 44 | + t.Run("AbsoluteAndRelative", func(t *testing.T) { |
| 45 | + rctx := NewRenderContextRepoComment(context.Background(), repo1).WithMarkupType(markdown.MarkupName) |
| 46 | + |
| 47 | + // It is Gitea's old behavior, the relative path is resolved to the repo path |
| 48 | + // It is different from GitHub, GitHub resolves relative links to current page's path |
| 49 | + rendered, err := markup.RenderString(rctx, ` |
| 50 | +[/test](/test) |
| 51 | +[./test](./test) |
| 52 | + |
| 53 | + |
| 54 | +`) |
| 55 | + assert.NoError(t, err) |
| 56 | + assert.Equal(t, |
| 57 | + `<p><a href="/user2/repo1/test" rel="nofollow">/test</a><br/> |
| 58 | +<a href="/user2/repo1/test" rel="nofollow">./test</a><br/> |
| 59 | +<a href="/user2/repo1/image" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/image" alt="/image"/></a><br/> |
| 60 | +<a href="/user2/repo1/image" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/image" alt="./image"/></a></p> |
| 61 | +`, rendered) |
| 62 | + }) |
| 63 | + |
| 64 | + t.Run("WithCurrentRefPath", func(t *testing.T) { |
| 65 | + rctx := NewRenderContextRepoComment(context.Background(), repo1, RepoCommentOptions{CurrentRefPath: "/commit/1234"}). |
| 66 | + WithMarkupType(markdown.MarkupName) |
| 67 | + |
| 68 | + // the ref path is only used to render commit message: a commit message is rendered at the commit page with its commit ID path |
| 69 | + rendered, err := markup.RenderString(rctx, ` |
| 70 | +[/test](/test) |
| 71 | +[./test](./test) |
| 72 | + |
| 73 | + |
| 74 | +`) |
| 75 | + assert.NoError(t, err) |
| 76 | + assert.Equal(t, `<p><a href="/user2/repo1/test" rel="nofollow">/test</a><br/> |
| 77 | +<a href="/user2/repo1/commit/1234/test" rel="nofollow">./test</a><br/> |
| 78 | +<a href="/user2/repo1/image" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/image" alt="/image"/></a><br/> |
| 79 | +<a href="/user2/repo1/commit/1234/image" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/commit/1234/image" alt="./image"/></a></p> |
| 80 | +`, rendered) |
| 81 | + }) |
| 82 | +} |
0 commit comments