aboutsummaryrefslogtreecommitdiffstats
path: root/models/renderhelper/repo_file_test.go
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2024-11-24 16:18:57 +0800
committerGitHub <noreply@github.com>2024-11-24 16:18:57 +0800
commit633785a5f3fe00789a6cba7cc0db1333de1e9c52 (patch)
tree2a2703ee9ed41c9caa508bd72c3fb5b52716af16 /models/renderhelper/repo_file_test.go
parentfa175c16949f09757ae85db6697cec327c44cba9 (diff)
downloadgitea-633785a5f3fe00789a6cba7cc0db1333de1e9c52.tar.gz
gitea-633785a5f3fe00789a6cba7cc0db1333de1e9c52.zip
Refactor markup render system (#32612)
This PR removes (almost) all path tricks, and introduces "renderhelper" package. Now we can clearly see the rendering behaviors for comment/file/wiki, more details are in "renderhelper" tests. Fix #31411 , fix #18592, fix #25632 and maybe more problems. (ps: fix #32608 by the way)
Diffstat (limited to 'models/renderhelper/repo_file_test.go')
-rw-r--r--models/renderhelper/repo_file_test.go83
1 files changed, 83 insertions, 0 deletions
diff --git a/models/renderhelper/repo_file_test.go b/models/renderhelper/repo_file_test.go
new file mode 100644
index 0000000000..40027ec76f
--- /dev/null
+++ b/models/renderhelper/repo_file_test.go
@@ -0,0 +1,83 @@
+// Copyright 2024 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package renderhelper
+
+import (
+ "context"
+ "testing"
+
+ repo_model "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/models/unittest"
+ "code.gitea.io/gitea/modules/markup"
+ "code.gitea.io/gitea/modules/markup/markdown"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestRepoFile(t *testing.T) {
+ unittest.PrepareTestEnv(t)
+ repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
+
+ t.Run("AutoLink", func(t *testing.T) {
+ rctx := NewRenderContextRepoFile(context.Background(), repo1).WithMarkupType(markdown.MarkupName)
+ rendered, err := markup.RenderString(rctx, `
+65f1bf27bc3bf70f64657658635e66094edbcb4d
+#1
+@user2
+`)
+ assert.NoError(t, err)
+ assert.Equal(t,
+ `<p><a href="/user2/repo1/commit/65f1bf27bc3bf70f64657658635e66094edbcb4d" rel="nofollow"><code>65f1bf27bc</code></a>
+#1
+<a href="/user2" rel="nofollow">@user2</a></p>
+`, rendered)
+ })
+
+ t.Run("AbsoluteAndRelative", func(t *testing.T) {
+ rctx := NewRenderContextRepoFile(context.Background(), repo1, RepoFileOptions{CurrentRefPath: "branch/main"}).
+ WithMarkupType(markdown.MarkupName)
+ rendered, err := markup.RenderString(rctx, `
+[/test](/test)
+[./test](./test)
+![/image](/image)
+![./image](./image)
+`)
+ assert.NoError(t, err)
+ assert.Equal(t,
+ `<p><a href="/user2/repo1/src/branch/main/test" rel="nofollow">/test</a>
+<a href="/user2/repo1/src/branch/main/test" rel="nofollow">./test</a>
+<a href="/user2/repo1/media/branch/main/image" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/media/branch/main/image" alt="/image"/></a>
+<a href="/user2/repo1/media/branch/main/image" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/media/branch/main/image" alt="./image"/></a></p>
+`, rendered)
+ })
+
+ t.Run("WithCurrentRefPath", func(t *testing.T) {
+ rctx := NewRenderContextRepoFile(context.Background(), repo1, RepoFileOptions{CurrentRefPath: "/commit/1234"}).
+ WithMarkupType(markdown.MarkupName)
+ rendered, err := markup.RenderString(rctx, `
+[/test](/test)
+![/image](/image)
+`)
+ assert.NoError(t, err)
+ assert.Equal(t, `<p><a href="/user2/repo1/src/commit/1234/test" rel="nofollow">/test</a>
+<a href="/user2/repo1/media/commit/1234/image" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/media/commit/1234/image" alt="/image"/></a></p>
+`, rendered)
+ })
+
+ t.Run("WithCurrentRefPathByTag", func(t *testing.T) {
+ rctx := NewRenderContextRepoFile(context.Background(), repo1, RepoFileOptions{
+ CurrentRefPath: "/commit/1234",
+ CurrentTreePath: "my-dir",
+ }).
+ WithMarkupType(markdown.MarkupName)
+ rendered, err := markup.RenderString(rctx, `
+<img src="LINK">
+<video src="LINK">
+`)
+ assert.NoError(t, err)
+ assert.Equal(t, `<a href="/user2/repo1/media/commit/1234/my-dir/LINK" target="_blank" rel="nofollow noopener"><img src="/user2/repo1/media/commit/1234/my-dir/LINK"/></a>
+<video src="/user2/repo1/media/commit/1234/my-dir/LINK">
+</video>`, rendered)
+ })
+}