44package integration
55
66import (
7- "bytes"
87 "io"
98 "net/http"
9+ "net/url"
1010 "strings"
1111 "testing"
1212
13+ repo_model "code.gitea.io/gitea/models/repo"
14+ "code.gitea.io/gitea/models/unittest"
15+ user_model "code.gitea.io/gitea/models/user"
1316 "code.gitea.io/gitea/modules/markup"
1417 "code.gitea.io/gitea/modules/markup/external"
1518 "code.gitea.io/gitea/modules/setting"
19+ "code.gitea.io/gitea/modules/test"
1620 "code.gitea.io/gitea/tests"
1721
1822 "github.com/stretchr/testify/assert"
23+ "github.com/stretchr/testify/require"
1924)
2025
2126func TestExternalMarkupRenderer (t * testing.T ) {
@@ -25,36 +30,52 @@ func TestExternalMarkupRenderer(t *testing.T) {
2530 return
2631 }
2732
28- req := NewRequest (t , "GET" , "/user30/renderer/src/branch/master/README.html" )
29- resp := MakeRequest (t , req , http .StatusOK )
30- assert .Equal (t , "text/html; charset=utf-8" , resp .Header ().Get ("Content-Type" ))
31-
32- bs , err := io .ReadAll (resp .Body )
33- assert .NoError (t , err )
34-
35- doc := NewHTMLParser (t , bytes .NewBuffer (bs ))
36- div := doc .Find ("div.file-view" )
37- data , err := div .Html ()
38- assert .NoError (t , err )
39- assert .Equal (t , "<div>\n \t test external renderer\n </div>" , strings .TrimSpace (data ))
40-
41- r := markup .GetRendererByFileName ("a.html" ).(* external.Renderer )
42- r .RenderContentMode = setting .RenderContentModeIframe
43-
44- req = NewRequest (t , "GET" , "/user30/renderer/src/branch/master/README.html" )
45- resp = MakeRequest (t , req , http .StatusOK )
46- assert .Equal (t , "text/html; charset=utf-8" , resp .Header ().Get ("Content-Type" ))
47- bs , err = io .ReadAll (resp .Body )
48- assert .NoError (t , err )
49- doc = NewHTMLParser (t , bytes .NewBuffer (bs ))
50- iframe := doc .Find ("iframe" )
51- assert .Equal (t , "/user30/renderer/render/branch/master/README.html" , iframe .AttrOr ("src" , "" ))
52-
53- req = NewRequest (t , "GET" , "/user30/renderer/render/branch/master/README.html" )
54- resp = MakeRequest (t , req , http .StatusOK )
55- assert .Equal (t , "text/html; charset=utf-8" , resp .Header ().Get ("Content-Type" ))
56- bs , err = io .ReadAll (resp .Body )
57- assert .NoError (t , err )
58- assert .Equal (t , "frame-src 'self'; sandbox allow-scripts" , resp .Header ().Get ("Content-Security-Policy" ))
59- assert .Equal (t , "<div>\n \t test external renderer\n </div>\n " , string (bs ))
33+ onGiteaRun (t , func (t * testing.T , _ * url.URL ) {
34+ t .Run ("RenderNoSanitizer" , func (t * testing.T ) {
35+ user2 := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
36+ repo1 := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 1 })
37+ _ , err := createFile (user2 , repo1 , "file.no-sanitizer" , "master" , `any content` )
38+ require .NoError (t , err )
39+
40+ req := NewRequest (t , "GET" , "/user2/repo1/src/branch/master/file.no-sanitizer" )
41+ resp := MakeRequest (t , req , http .StatusOK )
42+ doc := NewHTMLParser (t , resp .Body )
43+ div := doc .Find ("div.file-view" )
44+ data , err := div .Html ()
45+ assert .NoError (t , err )
46+ assert .Equal (t , `<script>window.alert("hi")</script>` , strings .TrimSpace (data ))
47+ })
48+ })
49+
50+ t .Run ("RenderContentDirectly" , func (t * testing.T ) {
51+ req := NewRequest (t , "GET" , "/user30/renderer/src/branch/master/README.html" )
52+ resp := MakeRequest (t , req , http .StatusOK )
53+ assert .Equal (t , "text/html; charset=utf-8" , resp .Header ().Get ("Content-Type" ))
54+
55+ doc := NewHTMLParser (t , resp .Body )
56+ div := doc .Find ("div.file-view" )
57+ data , err := div .Html ()
58+ assert .NoError (t , err )
59+ assert .Equal (t , "<div>\n \t test external renderer\n </div>" , strings .TrimSpace (data ))
60+ })
61+
62+ r := markup .GetRendererByFileName ("any-file.html" ).(* external.Renderer )
63+ defer test .MockVariableValue (& r .RenderContentMode , setting .RenderContentModeIframe )()
64+
65+ t .Run ("RenderContentInIFrame" , func (t * testing.T ) {
66+ req := NewRequest (t , "GET" , "/user30/renderer/src/branch/master/README.html" )
67+ resp := MakeRequest (t , req , http .StatusOK )
68+ assert .Equal (t , "text/html; charset=utf-8" , resp .Header ().Get ("Content-Type" ))
69+ doc := NewHTMLParser (t , resp .Body )
70+ iframe := doc .Find ("iframe" )
71+ assert .Equal (t , "/user30/renderer/render/branch/master/README.html" , iframe .AttrOr ("src" , "" ))
72+
73+ req = NewRequest (t , "GET" , "/user30/renderer/render/branch/master/README.html" )
74+ resp = MakeRequest (t , req , http .StatusOK )
75+ assert .Equal (t , "text/html; charset=utf-8" , resp .Header ().Get ("Content-Type" ))
76+ bs , err := io .ReadAll (resp .Body )
77+ assert .NoError (t , err )
78+ assert .Equal (t , "frame-src 'self'; sandbox allow-scripts" , resp .Header ().Get ("Content-Security-Policy" ))
79+ assert .Equal (t , "<div>\n \t test external renderer\n </div>\n " , string (bs ))
80+ })
6081}
0 commit comments