diff options
Diffstat (limited to 'internal/gitaly/service/repository/search_files_test.go')
-rw-r--r-- | internal/gitaly/service/repository/search_files_test.go | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/internal/gitaly/service/repository/search_files_test.go b/internal/gitaly/service/repository/search_files_test.go index ff4f20f13..9aeab951a 100644 --- a/internal/gitaly/service/repository/search_files_test.go +++ b/internal/gitaly/service/repository/search_files_test.go @@ -337,6 +337,116 @@ func TestSearchFilesByNameSuccessful(t *testing.T) { } } +func TestSearchFilesByNameUnusualFileNamesSuccessful(t *testing.T) { + t.Parallel() + ctx := testhelper.Context(t) + + cfg, repo, repoPath, client := setupRepositoryService(ctx, t) + + gittest.WriteCommit(t, cfg, repoPath, + gittest.WithBranch("unusual_file_names"), + gittest.WithMessage("commit message"), + gittest.WithTreeEntries( + gittest.TreeEntry{Path: "\"file with quote.txt", Mode: "100644", Content: "something"}, + gittest.TreeEntry{Path: ".vimrc", Mode: "100644", Content: "something"}, + gittest.TreeEntry{Path: "cuộc đời là những chuyến đi.md", Mode: "100644", Content: "something"}, + gittest.TreeEntry{Path: "编码 'foo'.md", Mode: "100644", Content: "something"}, + ), + ) + + testCases := []struct { + desc string + ref []byte + query string + filter string + testFiles [][]byte + }{ + { + desc: "file with quote", + ref: []byte("unusual_file_names"), + query: "\"file with quote.txt", + testFiles: [][]byte{[]byte("\"file with quote.txt")}, + }, + { + desc: "dotfiles", + ref: []byte("unusual_file_names"), + query: ".vimrc", + testFiles: [][]byte{[]byte(".vimrc")}, + }, + { + desc: "latin-base language", + ref: []byte("unusual_file_names"), + query: "cuộc đời là những chuyến đi.md", + testFiles: [][]byte{[]byte("cuộc đời là những chuyến đi.md")}, + }, + { + desc: "non-latin language", + ref: []byte("unusual_file_names"), + query: "编码 'foo'.md", + testFiles: [][]byte{[]byte("编码 'foo'.md")}, + }, + { + desc: "filter file with quote", + ref: []byte("unusual_file_names"), + query: ".", + filter: "^\"file.*", + testFiles: [][]byte{[]byte("\"file with quote.txt")}, + }, + { + desc: "filter dotfiles", + ref: []byte("unusual_file_names"), + query: ".", + filter: "^\\..*", + testFiles: [][]byte{[]byte(".vimrc")}, + }, + { + desc: "filter latin-base language", + ref: []byte("unusual_file_names"), + query: ".", + filter: "cuộc đời .*\\.md", + testFiles: [][]byte{[]byte("cuộc đời là những chuyến đi.md")}, + }, + { + desc: "filter non-latin language", + ref: []byte("unusual_file_names"), + query: ".", + filter: "编码 'foo'\\.(md|txt|rdoc)", + testFiles: [][]byte{[]byte("编码 'foo'.md")}, + }, + { + desc: "wildcard filter", + ref: []byte("unusual_file_names"), + query: ".", + filter: ".*", + testFiles: [][]byte{ + []byte("\"file with quote.txt"), + []byte(".vimrc"), + []byte("cuộc đời là những chuyến đi.md"), + []byte("编码 'foo'.md"), + }, + }, + } + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + stream, err := client.SearchFilesByName(ctx, &gitalypb.SearchFilesByNameRequest{ + Repository: repo, + Ref: tc.ref, + Query: tc.query, + Filter: tc.filter, + }) + require.NoError(t, err) + + var files [][]byte + files, err = consumeFilenameByName(stream) + require.NoError(t, err) + require.Equal(t, len(tc.testFiles), len(files)) + for i, f := range tc.testFiles { + require.Equal(t, f, files[i]) + } + }) + } +} + func TestSearchFilesByNameFailure(t *testing.T) { t.Parallel() cfg := testcfg.Build(t) |