1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2024-11-23 08:47:42 -05:00
forgejo/integrations/repo_commits_search_test.go
Mura Li 3186ef554c Support search operators for commits search (#6479)
* Support searching commits with prefix syntax

For now, support auther: committer:
When more than one prefix is supplied is presented, the result is the union.
When different prefixes are supplied, the result is the intersection.

For example,
"author:alice author:bob"
=> the result is all commits authored by Alice OR Bob

"hello committer:alice"
=> the result is all commits committed by Alice AND has the keyword
'hello' in the message.

Note that there should NOT have any space after the colon(:) of the prefix.
For example,
"author:bill" => correct
"author: bill" => wrong

* Remove unneeded logging

* Add missing files of test repository

* Add missing repo_unit entries to test fixtures

* Update test cases

* Add tooltip for commits search button

* Update tooltip text

I have no idea about how to format it with line breaks.

* Make the usage example more real

* Add a test case

* Add new options struct for SearchCommits

* Prefer len(s) > 0 over s != ""

* Add NewSearchCommitsOptions
2019-04-12 10:28:44 +08:00

37 lines
1.2 KiB
Go

// Copyright 2019 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package integrations
import (
"net/http"
"net/url"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func testRepoCommitsSearch(t *testing.T, query, commit string) {
prepareTestEnv(t)
session := loginUser(t, "user2")
// Request repository commits page
req := NewRequestf(t, "GET", "/user2/commits_search_test/commits/branch/master/search?q=%s", url.QueryEscape(query))
resp := session.MakeRequest(t, req, http.StatusOK)
doc := NewHTMLParser(t, resp.Body)
sel := doc.doc.Find("#commits-table tbody tr td.sha a")
assert.EqualValues(t, commit, strings.TrimSpace(sel.Text()))
}
func TestRepoCommitsSearch(t *testing.T) {
testRepoCommitsSearch(t, "author:alice", "6e8eabd9a7")
testRepoCommitsSearch(t, "committer:Tom", "58e97d1a24")
testRepoCommitsSearch(t, "author:bob commit-4", "58e97d1a24")
testRepoCommitsSearch(t, "author:bob commit after:2019-03-03", "58e97d1a24")
testRepoCommitsSearch(t, "committer:alice commit before:2019-03-02", "6e8eabd9a7")
testRepoCommitsSearch(t, "committer:alice author:tom commit before:2019-03-04 after:2019-03-02", "0a8499a22a")
}