* 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