forked from NYANDEV/forgejo
* 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:
parent
0c3467ffb7
commit
09a4364b21
7 changed files with 76 additions and 4 deletions
Binary file not shown.
Binary file not shown.
|
@ -1 +1 @@
|
||||||
423313fbd38093bb10d0c8387db9105409c6f196
|
0dca5bd9b5d7ef937710e056f575e86c0184ba85
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package git
|
package git
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -45,3 +46,23 @@ func (t *Tree) SubTree(rpath string) (*Tree, error) {
|
||||||
}
|
}
|
||||||
return g, nil
|
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)
|
Wiki(ctx)
|
||||||
assert.EqualValues(t, http.StatusOK, ctx.Resp.Status())
|
assert.EqualValues(t, http.StatusOK, ctx.Resp.Status())
|
||||||
assert.EqualValues(t, "Home", ctx.Data["Title"])
|
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) {
|
func TestWikiPages(t *testing.T) {
|
||||||
|
@ -91,7 +91,7 @@ func TestWikiPages(t *testing.T) {
|
||||||
test.LoadRepo(t, ctx, 1)
|
test.LoadRepo(t, ctx, 1)
|
||||||
WikiPages(ctx)
|
WikiPages(ctx)
|
||||||
assert.EqualValues(t, http.StatusOK, ctx.Resp.Status())
|
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) {
|
func TestNewWiki(t *testing.T) {
|
||||||
|
|
|
@ -88,7 +88,7 @@ func prepareWikiFileName(gitRepo *git.Repository, wikiName string) (bool, string
|
||||||
escaped := NameToFilename(wikiName)
|
escaped := NameToFilename(wikiName)
|
||||||
|
|
||||||
// Look for both files
|
// Look for both files
|
||||||
filesInIndex, err := gitRepo.LsFiles(unescaped, escaped)
|
filesInIndex, err := gitRepo.LsTree("master", unescaped, escaped)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("%v", err)
|
log.Error("%v", err)
|
||||||
return false, escaped, err
|
return false, escaped, err
|
||||||
|
|
|
@ -210,3 +210,54 @@ func TestRepository_DeleteWikiPage(t *testing.T) {
|
||||||
_, err = masterTree.GetTreeEntryByPath(wikiPath)
|
_, err = masterTree.GetTreeEntryByPath(wikiPath)
|
||||||
assert.Error(t, err)
|
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)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue