diff options
author | Francisco Javier López <fjlopez@gitlab.com> | 2018-02-07 21:10:52 +0300 |
---|---|---|
committer | Francisco Javier López <fjlopez@gitlab.com> | 2018-02-07 21:10:52 +0300 |
commit | 0bfc1a7e33e224362f79cbfcd24f6087ef06c551 (patch) | |
tree | c3c0e27af5ef7229e52bc7ba37c571da7e6170e9 | |
parent | ad455f893382751b34a8d0af601e2c0c33afb702 (diff) | |
parent | 9bb3ed76223de162c388dcf0f2f8026408a8f5e4 (diff) |
Fixed bug in the method wiki_find_page and added regression tests
-rw-r--r-- | internal/service/wiki/find_page_test.go | 116 | ||||
-rw-r--r-- | ruby/lib/gitaly_server/wiki_service.rb | 2 |
2 files changed, 117 insertions, 1 deletions
diff --git a/internal/service/wiki/find_page_test.go b/internal/service/wiki/find_page_test.go index c630085b0..bf3e7bd54 100644 --- a/internal/service/wiki/find_page_test.go +++ b/internal/service/wiki/find_page_test.go @@ -139,6 +139,122 @@ func TestSuccessfulWikiFindPageRequest(t *testing.T) { } } +func TestSuccessfulWikiFindPageSameTitleDifferentPathRequest(t *testing.T) { + wikiRepo, _, cleanupFunc := setupWikiRepo(t) + defer cleanupFunc() + + server, serverSocketPath := runWikiServiceServer(t) + defer server.Stop() + + client, conn := newWikiClient(t, serverSocketPath) + defer conn.Close() + + page1Name := "page1" + page1Content := []byte("content " + page1Name) + + page2Name := "page1" + page2Path := "foo/" + page2Name + page2Content := []byte("content " + page2Name) + + createTestWikiPage(t, client, wikiRepo, createWikiPageOpts{title: page1Name, content: page1Content}) + page2Commit := createTestWikiPage(t, client, wikiRepo, createWikiPageOpts{title: page2Path, content: page2Content}) + + testCases := []struct { + desc string + request *pb.WikiFindPageRequest + expectedPage *pb.WikiPage + content []byte + }{ + { + desc: "finding page in root directory by title only", + request: &pb.WikiFindPageRequest{ + Repository: wikiRepo, + Title: []byte(page1Name), + }, + expectedPage: &pb.WikiPage{ + Version: &pb.WikiPageVersion{ + Commit: page2Commit, + Format: "markdown", + }, + Title: []byte(page1Name), + Format: "markdown", + UrlPath: "page1", + Path: []byte("page1.md"), + Name: []byte(page1Name), + Historical: false, + }, + content: page1Content, + }, + { + desc: "finding page in root directory by title + directory that includes the page", + request: &pb.WikiFindPageRequest{ + Repository: wikiRepo, + Title: []byte(page1Name), + Directory: []byte(""), + }, + expectedPage: &pb.WikiPage{ + Version: &pb.WikiPageVersion{ + Commit: page2Commit, + Format: "markdown", + }, + Title: []byte(page1Name), + Format: "markdown", + UrlPath: "page1", + Path: []byte("page1.md"), + Name: []byte(page1Name), + Historical: false, + }, + content: page1Content, + }, + { + desc: "finding page inside a directory by title + directory that includes the page", + request: &pb.WikiFindPageRequest{ + Repository: wikiRepo, + Title: []byte(page2Name), + Directory: []byte("foo"), + }, + expectedPage: &pb.WikiPage{ + Version: &pb.WikiPageVersion{ + Commit: page2Commit, + Format: "markdown", + }, + Title: []byte(page2Name), + Format: "markdown", + UrlPath: "foo/page1", + Path: []byte("foo/page1.md"), + Name: []byte(page2Name), + Historical: false, + }, + content: page2Content, + }, + } + + for _, testCase := range testCases { + t.Run(testCase.desc, func(t *testing.T) { + ctx, cancel := testhelper.Context() + defer cancel() + + c, err := client.WikiFindPage(ctx, testCase.request) + require.NoError(t, err) + + expectedPage := testCase.expectedPage + receivedPage := readFullWikiPageFromWikiFindPageClient(t, c) + + // require.Equal doesn't display a proper diff when either expected/actual has a field + // with large data (RawData in our case), so we compare page attributes and content separately. + receivedContent := receivedPage.GetRawData() + if receivedPage != nil { + receivedPage.RawData = nil + } + + require.Equal(t, expectedPage, receivedPage, "mismatched page attributes") + if expectedPage != nil { + require.Equal(t, testCase.content, receivedContent, "mismatched page content") + } + }) + } +} + func TestFailedWikiFindPageDueToValidation(t *testing.T) { wikiRepo, _, cleanupFunc := setupWikiRepo(t) defer cleanupFunc() diff --git a/ruby/lib/gitaly_server/wiki_service.rb b/ruby/lib/gitaly_server/wiki_service.rb index bba0f812a..cc59cf161 100644 --- a/ruby/lib/gitaly_server/wiki_service.rb +++ b/ruby/lib/gitaly_server/wiki_service.rb @@ -52,7 +52,7 @@ module GitalyServer page = wiki.page( title: set_utf8!(request.title), version: request.revision.presence, - dir: set_utf8!(request.directory).presence + dir: set_utf8!(request.directory) ) unless page |