diff --git a/models/fixtures/repo_topic.yml b/models/fixtures/repo_topic.yml index 58937031c..3a27442d4 100644 --- a/models/fixtures/repo_topic.yml +++ b/models/fixtures/repo_topic.yml @@ -9,3 +9,7 @@ - repo_id: 1 topic_id: 3 + +- + repo_id: 2 + topic_id: 2 diff --git a/models/repo_list.go b/models/repo_list.go index 1d7020aa8..c9183166d 100644 --- a/models/repo_list.go +++ b/models/repo_list.go @@ -251,11 +251,11 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (RepositoryList, int64, err } if opts.Keyword != "" { - sess = sess.Select("repository.*") - sess = sess.GroupBy("repository.id") - sess = sess.OrderBy("repository." + opts.OrderBy.String()) + sess.Select("repository.*") + sess.GroupBy("repository.id") + sess.OrderBy("repository." + opts.OrderBy.String()) } else { - sess = sess.OrderBy(opts.OrderBy.String()) + sess.OrderBy(opts.OrderBy.String()) } repos := make(RepositoryList, 0, opts.PageSize) diff --git a/models/repo_list_test.go b/models/repo_list_test.go index 164bc19bf..6ff7e75f6 100644 --- a/models/repo_list_test.go +++ b/models/repo_list_test.go @@ -222,3 +222,28 @@ func TestSearchRepositoryByName(t *testing.T) { }) } } + +func TestSearchRepositoryByTopicName(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + + testCases := []struct { + name string + opts *SearchRepoOptions + count int + }{ + {name: "AllPublic/SearchPublicRepositoriesFromTopic", + opts: &SearchRepoOptions{OwnerID: 2, AllPublic: true, Keyword: "golang"}, + count: 1}, + {name: "AllPublic/SearchPrivareRepositoriesFromTopic", + opts: &SearchRepoOptions{OwnerID: 2, AllPublic: true, Keyword: "database", Private: true}, + count: 2}, + } + + for _, testCase := range testCases { + t.Run(testCase.name, func(t *testing.T) { + _, count, err := SearchRepositoryByName(testCase.opts) + assert.NoError(t, err) + assert.Equal(t, int64(testCase.count), count) + }) + } +}