mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Add TestPrepareWikiFileName (#16487)
* Add TestPrepareWikiFileName * use LsTree as LsFiles is index only * ajust other tests Co-authored-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -1 +1 @@
 | 
			
		||||
423313fbd38093bb10d0c8387db9105409c6f196
 | 
			
		||||
0dca5bd9b5d7ef937710e056f575e86c0184ba85
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@
 | 
			
		||||
package git
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -45,3 +46,23 @@ func (t *Tree) SubTree(rpath string) (*Tree, error) {
 | 
			
		||||
	}
 | 
			
		||||
	return g, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LsTree checks if the given filenames are in the tree
 | 
			
		||||
func (repo *Repository) LsTree(ref string, filenames ...string) ([]string, error) {
 | 
			
		||||
	cmd := NewCommand("ls-tree", "-z", "--name-only", "--", ref)
 | 
			
		||||
	for _, arg := range filenames {
 | 
			
		||||
		if arg != "" {
 | 
			
		||||
			cmd.AddArguments(arg)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	res, err := cmd.RunInDirBytes(repo.Path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	filelist := make([]string, 0, len(filenames))
 | 
			
		||||
	for _, line := range bytes.Split(res, []byte{'\000'}) {
 | 
			
		||||
		filelist = append(filelist, string(line))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return filelist, err
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -81,7 +81,7 @@ func TestWiki(t *testing.T) {
 | 
			
		||||
	Wiki(ctx)
 | 
			
		||||
	assert.EqualValues(t, http.StatusOK, ctx.Resp.Status())
 | 
			
		||||
	assert.EqualValues(t, "Home", ctx.Data["Title"])
 | 
			
		||||
	assertPagesMetas(t, []string{"Home", "Page With Image", "Page With Spaced Name"}, ctx.Data["Pages"])
 | 
			
		||||
	assertPagesMetas(t, []string{"Home", "Page With Image", "Page With Spaced Name", "Unescaped File"}, ctx.Data["Pages"])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestWikiPages(t *testing.T) {
 | 
			
		||||
@@ -91,7 +91,7 @@ func TestWikiPages(t *testing.T) {
 | 
			
		||||
	test.LoadRepo(t, ctx, 1)
 | 
			
		||||
	WikiPages(ctx)
 | 
			
		||||
	assert.EqualValues(t, http.StatusOK, ctx.Resp.Status())
 | 
			
		||||
	assertPagesMetas(t, []string{"Home", "Page With Image", "Page With Spaced Name"}, ctx.Data["Pages"])
 | 
			
		||||
	assertPagesMetas(t, []string{"Home", "Page With Image", "Page With Spaced Name", "Unescaped File"}, ctx.Data["Pages"])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestNewWiki(t *testing.T) {
 | 
			
		||||
 
 | 
			
		||||
@@ -88,7 +88,7 @@ func prepareWikiFileName(gitRepo *git.Repository, wikiName string) (bool, string
 | 
			
		||||
	escaped := NameToFilename(wikiName)
 | 
			
		||||
 | 
			
		||||
	// Look for both files
 | 
			
		||||
	filesInIndex, err := gitRepo.LsFiles(unescaped, escaped)
 | 
			
		||||
	filesInIndex, err := gitRepo.LsTree("master", unescaped, escaped)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error("%v", err)
 | 
			
		||||
		return false, escaped, err
 | 
			
		||||
 
 | 
			
		||||
@@ -210,3 +210,54 @@ func TestRepository_DeleteWikiPage(t *testing.T) {
 | 
			
		||||
	_, err = masterTree.GetTreeEntryByPath(wikiPath)
 | 
			
		||||
	assert.Error(t, err)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPrepareWikiFileName(t *testing.T) {
 | 
			
		||||
	models.PrepareTestEnv(t)
 | 
			
		||||
	repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
 | 
			
		||||
	gitRepo, err := git.OpenRepository(repo.WikiPath())
 | 
			
		||||
	defer gitRepo.Close()
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		name      string
 | 
			
		||||
		arg       string
 | 
			
		||||
		existence bool
 | 
			
		||||
		wikiPath  string
 | 
			
		||||
		wantErr   bool
 | 
			
		||||
	}{{
 | 
			
		||||
		name:      "add suffix",
 | 
			
		||||
		arg:       "Home",
 | 
			
		||||
		existence: true,
 | 
			
		||||
		wikiPath:  "Home.md",
 | 
			
		||||
		wantErr:   false,
 | 
			
		||||
	}, {
 | 
			
		||||
		name:      "test special chars",
 | 
			
		||||
		arg:       "home of and & or wiki page!",
 | 
			
		||||
		existence: false,
 | 
			
		||||
		wikiPath:  "home-of-and-%26-or-wiki-page%21.md",
 | 
			
		||||
		wantErr:   false,
 | 
			
		||||
	}, {
 | 
			
		||||
		name:      "fount unescaped cases",
 | 
			
		||||
		arg:       "Unescaped File",
 | 
			
		||||
		existence: true,
 | 
			
		||||
		wikiPath:  "Unescaped File.md",
 | 
			
		||||
		wantErr:   false,
 | 
			
		||||
	}}
 | 
			
		||||
	for _, tt := range tests {
 | 
			
		||||
		t.Run(tt.name, func(t *testing.T) {
 | 
			
		||||
			existence, newWikiPath, err := prepareWikiFileName(gitRepo, tt.arg)
 | 
			
		||||
			if (err != nil) != tt.wantErr {
 | 
			
		||||
				assert.NoError(t, err)
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
			if existence != tt.existence {
 | 
			
		||||
				if existence {
 | 
			
		||||
					t.Errorf("expect to find no escaped file but we detect one")
 | 
			
		||||
				} else {
 | 
			
		||||
					t.Errorf("expect to find an escaped file but we could not detect one")
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			assert.Equal(t, tt.wikiPath, newWikiPath)
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user