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