Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancisco Javier López <fjlopez@gitlab.com>2018-02-07 21:10:52 +0300
committerFrancisco Javier López <fjlopez@gitlab.com>2018-02-07 21:10:52 +0300
commit0bfc1a7e33e224362f79cbfcd24f6087ef06c551 (patch)
treec3c0e27af5ef7229e52bc7ba37c571da7e6170e9
parentad455f893382751b34a8d0af601e2c0c33afb702 (diff)
parent9bb3ed76223de162c388dcf0f2f8026408a8f5e4 (diff)
Fixed bug in the method wiki_find_page and added regression tests
-rw-r--r--internal/service/wiki/find_page_test.go116
-rw-r--r--ruby/lib/gitaly_server/wiki_service.rb2
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