* Add TestPrepareWikiFileName * use LsTree as LsFiles is index only * ajust other tests Co-authored-by: Andrew Thornton <art27@cantab.net>tags/v1.15.0-rc2
423313fbd38093bb10d0c8387db9105409c6f196 | |||||
0dca5bd9b5d7ef937710e056f575e86c0184ba85 |
package git | package git | ||||
import ( | import ( | ||||
"bytes" | |||||
"strings" | "strings" | ||||
) | ) | ||||
} | } | ||||
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 | |||||
} |
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) { | ||||
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) { |
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 |
_, 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) | |||||
}) | |||||
} | |||||
} |