Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 107 additions & 1 deletion integrations/api_repo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package integrations

import (
"fmt"
"net/http"
"testing"

Expand Down Expand Up @@ -32,7 +33,7 @@ func TestAPIUserReposNotLogin(t *testing.T) {
}
}

func TestAPISearchRepoNotLogin(t *testing.T) {
func TestAPISearchRepo(t *testing.T) {
prepareTestEnv(t)
const keyword = "test"

Expand All @@ -46,6 +47,111 @@ func TestAPISearchRepoNotLogin(t *testing.T) {
assert.Contains(t, repo.Name, keyword)
assert.False(t, repo.Private)
}

user := models.AssertExistsAndLoadBean(t, &models.User{ID: 15}).(*models.User)
user2 := models.AssertExistsAndLoadBean(t, &models.User{ID: 16}).(*models.User)
orgUser := models.AssertExistsAndLoadBean(t, &models.User{ID: 17}).(*models.User)

type privacyType int

const (
_ privacyType = iota
privacyTypePrivate
privacyTypePublic
)

// Map of expected results, where key is user for login
type expectedResults map[*models.User]struct {
count int
repoOwnerID int64
repoName string
privacy privacyType
}

testCases := []struct {
name, requestURL string
expectedResults
}{
{name: "RepositoriesMax50", requestURL: "/api/v1/repos/search?limit=50", expectedResults: expectedResults{
nil: {count: 15, privacy: privacyTypePublic},
user: {count: 15, privacy: privacyTypePublic},
user2: {count: 15, privacy: privacyTypePublic}},
},
{name: "RepositoriesMax10", requestURL: "/api/v1/repos/search?limit=10", expectedResults: expectedResults{
nil: {count: 10, privacy: privacyTypePublic},
user: {count: 10, privacy: privacyTypePublic},
user2: {count: 10, privacy: privacyTypePublic}},
},
{name: "RepositoriesDefaultMax10", requestURL: "/api/v1/repos/search", expectedResults: expectedResults{
nil: {count: 10, privacy: privacyTypePublic},
user: {count: 10, privacy: privacyTypePublic},
user2: {count: 10, privacy: privacyTypePublic}},
},
{name: "RepositoriesByName", requestURL: fmt.Sprintf("/api/v1/repos/search?q=%s", "big_test_"), expectedResults: expectedResults{
nil: {count: 7, repoName: "big_test_", privacy: privacyTypePublic},
user: {count: 7, repoName: "big_test_", privacy: privacyTypePublic},
user2: {count: 7, repoName: "big_test_", privacy: privacyTypePublic}},
},
{name: "RepositoriesAccessibleAndRelatedToUser", requestURL: fmt.Sprintf("/api/v1/repos/search?uid=%d&limit=50", user.ID), expectedResults: expectedResults{
nil: {count: 7, privacy: privacyTypePublic},
user: {count: 14},
user2: {count: 7, privacy: privacyTypePublic}},
},
{name: "RepositoriesAccessibleAndRelatedToUser2", requestURL: fmt.Sprintf("/api/v1/repos/search?uid=%d", user2.ID), expectedResults: expectedResults{
nil: {count: 1, privacy: privacyTypePublic},
user: {count: 1, privacy: privacyTypePublic},
user2: {count: 2}},
},
{name: "RepositoriesOwnedByOrganization", requestURL: fmt.Sprintf("/api/v1/repos/search?uid=%d", orgUser.ID), expectedResults: expectedResults{
nil: {count: 2, repoOwnerID: orgUser.ID, privacy: privacyTypePublic},
user: {count: 4, repoOwnerID: orgUser.ID},
user2: {count: 2, repoOwnerID: orgUser.ID, privacy: privacyTypePublic}},
},
}

for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
for userToLogin, expected := range testCase.expectedResults {
var session *TestSession
var testName string
if userToLogin != nil && userToLogin.ID > 0 {
testName = fmt.Sprintf("LoggedUser%d", userToLogin.ID)
session = loginUser(t, userToLogin.Name)
} else {
testName = "AnonymousUser"
session = emptyTestSession(t)
}

t.Run(testName, func(t *testing.T) {
request := NewRequest(t, "GET", testCase.requestURL)
response := session.MakeRequest(t, request, http.StatusOK)

var body api.SearchResults
DecodeJSON(t, response, &body)

assert.Len(t, body.Data, expected.count)
for _, repo := range body.Data {
assert.NotEmpty(t, repo.Name)

if len(expected.repoName) > 0 {
assert.Contains(t, repo.Name, expected.repoName)
}

if expected.repoOwnerID > 0 {
assert.Equal(t, expected.repoOwnerID, repo.Owner.ID)
}

switch expected.privacy {
case privacyTypePrivate:
assert.True(t, repo.Private)
case privacyTypePublic:
assert.False(t, repo.Private)
}
}
})
}
})
}
}

func TestAPIViewRepo(t *testing.T) {
Expand Down
35 changes: 35 additions & 0 deletions models/fixtures/access.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,38 @@
user_id: 4
repo_id: 3
mode: 2 # write

-
id: 4
user_id: 15
repo_id: 22
mode: 2 # write

-
id: 5
user_id: 15
repo_id: 21
mode: 2 # write

-
id: 6
user_id: 15
repo_id: 23
mode: 4 # owner

-
id: 7
user_id: 15
repo_id: 24
mode: 4 # owner
-
id: 8
user_id: 15
repo_id: 27
mode: 4 # owner

-
id: 9
user_id: 15
repo_id: 28
mode: 4 # owner
8 changes: 8 additions & 0 deletions models/fixtures/org_user.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,11 @@
is_public: false
is_owner: true
num_teams: 1

-
id: 5
uid: 15
org_id: 17
is_public: true
is_owner: true
num_teams: 1
191 changes: 191 additions & 0 deletions models/fixtures/repository.yml
Original file line number Diff line number Diff line change
Expand Up @@ -188,3 +188,194 @@
num_pulls: 0
num_closed_pulls: 0
num_watches: 0

-
id: 17
owner_id: 15
lower_name: big_test_public_1
name: big_test_public_1
is_private: false
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
num_watches: 0
is_mirror: false
is_fork: false

-
id: 18
owner_id: 15
lower_name: big_test_public_2
name: big_test_public_2
is_private: false
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
is_mirror: false
is_fork: false

-
id: 19
owner_id: 15
lower_name: big_test_private_1
name: big_test_private_1
is_private: true
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
is_mirror: false
is_fork: false

-
id: 20
owner_id: 15
lower_name: big_test_private_2
name: big_test_private_2
is_private: true
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
is_mirror: false
is_fork: false

-
id: 21
owner_id: 16
lower_name: big_test_public_3
name: big_test_public_3
is_private: false
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
is_mirror: false
is_fork: false

-
id: 22
owner_id: 16
lower_name: big_test_private_3
name: big_test_private_3
is_private: true
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
is_mirror: false
is_fork: false

-
id: 23
owner_id: 17
lower_name: big_test_public_4
name: big_test_public_4
is_private: false
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
is_mirror: false
is_fork: false

-
id: 24
owner_id: 17
lower_name: big_test_private_4
name: big_test_private_4
is_private: true
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
is_mirror: false
is_fork: false

-
id: 25
owner_id: 15
lower_name: big_test_public_mirror_5
name: big_test_public_mirror_5
is_private: false
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
num_watches: 0
is_mirror: true
is_fork: false

-
id: 26
owner_id: 15
lower_name: big_test_private_mirror_5
name: big_test_private_mirror_5
is_private: true
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
num_watches: 0
is_mirror: true
is_fork: false

-
id: 27
owner_id: 17
lower_name: big_test_public_mirror_6
name: big_test_public_mirror_6
is_private: false
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
num_watches: 0
is_mirror: true
num_forks: 1
is_fork: false

-
id: 28
owner_id: 17
lower_name: big_test_private_mirror_6
name: big_test_private_mirror_6
is_private: true
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
num_watches: 0
is_mirror: true
num_forks: 1
is_fork: false

-
id: 29
fork_id: 27
owner_id: 15
lower_name: big_test_public_fork_7
name: big_test_public_fork_7
is_private: false
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
is_mirror: false
is_fork: true

-
id: 30
fork_id: 28
owner_id: 15
lower_name: big_test_private_fork_7
name: big_test_private_fork_7
is_private: true
num_issues: 0
num_closed_issues: 0
num_pulls: 0
num_closed_pulls: 0
is_mirror: false
is_fork: true
9 changes: 9 additions & 0 deletions models/fixtures/team.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,12 @@
num_repos: 0
num_members: 1
unit_types: '[1,2,3,4,5,6,7]'
-
id: 5
org_id: 17
lower_name: owners
name: Owners
authorize: 4 # owner
num_repos: 4
num_members: 1
unit_types: '[1,2,3,4,5,6,7]'
Loading