You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

org_test.go 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package models
  5. import (
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestUser_IsOwnedBy(t *testing.T) {
  10. assert.NoError(t, PrepareTestDatabase())
  11. for _, testCase := range []struct {
  12. OrgID int64
  13. UserID int64
  14. ExpectedOwner bool
  15. }{
  16. {3, 2, true},
  17. {3, 1, false},
  18. {3, 3, false},
  19. {3, 4, false},
  20. {2, 2, false}, // user2 is not an organization
  21. {2, 3, false},
  22. } {
  23. org := AssertExistsAndLoadBean(t, &User{ID: testCase.OrgID}).(*User)
  24. isOwner, err := org.IsOwnedBy(testCase.UserID)
  25. assert.NoError(t, err)
  26. assert.Equal(t, testCase.ExpectedOwner, isOwner)
  27. }
  28. }
  29. func TestUser_IsOrgMember(t *testing.T) {
  30. assert.NoError(t, PrepareTestDatabase())
  31. for _, testCase := range []struct {
  32. OrgID int64
  33. UserID int64
  34. ExpectedMember bool
  35. }{
  36. {3, 2, true},
  37. {3, 4, true},
  38. {3, 1, false},
  39. {3, 3, false},
  40. {2, 2, false}, // user2 is not an organization
  41. {2, 3, false},
  42. } {
  43. org := AssertExistsAndLoadBean(t, &User{ID: testCase.OrgID}).(*User)
  44. isMember, err := org.IsOrgMember(testCase.UserID)
  45. assert.NoError(t, err)
  46. assert.Equal(t, testCase.ExpectedMember, isMember)
  47. }
  48. }
  49. func TestUser_GetTeam(t *testing.T) {
  50. assert.NoError(t, PrepareTestDatabase())
  51. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  52. team, err := org.GetTeam("team1")
  53. assert.NoError(t, err)
  54. assert.Equal(t, org.ID, team.OrgID)
  55. assert.Equal(t, "team1", team.LowerName)
  56. _, err = org.GetTeam("does not exist")
  57. assert.Equal(t, ErrTeamNotExist, err)
  58. nonOrg := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  59. _, err = nonOrg.GetTeam("team")
  60. assert.Equal(t, ErrTeamNotExist, err)
  61. }
  62. func TestUser_GetOwnerTeam(t *testing.T) {
  63. assert.NoError(t, PrepareTestDatabase())
  64. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  65. team, err := org.GetOwnerTeam()
  66. assert.NoError(t, err)
  67. assert.Equal(t, org.ID, team.OrgID)
  68. nonOrg := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  69. _, err = nonOrg.GetOwnerTeam()
  70. assert.Equal(t, ErrTeamNotExist, err)
  71. }
  72. func TestUser_GetTeams(t *testing.T) {
  73. assert.NoError(t, PrepareTestDatabase())
  74. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  75. assert.NoError(t, org.GetTeams())
  76. if assert.Len(t, org.Teams, 3) {
  77. assert.Equal(t, int64(1), org.Teams[0].ID)
  78. assert.Equal(t, int64(2), org.Teams[1].ID)
  79. assert.Equal(t, int64(7), org.Teams[2].ID)
  80. }
  81. }
  82. func TestUser_GetMembers(t *testing.T) {
  83. assert.NoError(t, PrepareTestDatabase())
  84. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  85. assert.NoError(t, org.GetMembers())
  86. if assert.Len(t, org.Members, 2) {
  87. assert.Equal(t, int64(2), org.Members[0].ID)
  88. assert.Equal(t, int64(4), org.Members[1].ID)
  89. }
  90. }
  91. func TestUser_AddMember(t *testing.T) {
  92. assert.NoError(t, PrepareTestDatabase())
  93. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  94. // add a user that is not a member
  95. AssertNotExistsBean(t, &OrgUser{UID: 5, OrgID: 3})
  96. prevNumMembers := org.NumMembers
  97. assert.NoError(t, org.AddMember(5))
  98. AssertExistsAndLoadBean(t, &OrgUser{UID: 5, OrgID: 3})
  99. org = AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  100. assert.Equal(t, prevNumMembers+1, org.NumMembers)
  101. // add a user that is already a member
  102. AssertExistsAndLoadBean(t, &OrgUser{UID: 4, OrgID: 3})
  103. prevNumMembers = org.NumMembers
  104. assert.NoError(t, org.AddMember(4))
  105. AssertExistsAndLoadBean(t, &OrgUser{UID: 4, OrgID: 3})
  106. org = AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  107. assert.Equal(t, prevNumMembers, org.NumMembers)
  108. CheckConsistencyFor(t, &User{})
  109. }
  110. func TestUser_RemoveMember(t *testing.T) {
  111. assert.NoError(t, PrepareTestDatabase())
  112. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  113. // remove a user that is a member
  114. AssertExistsAndLoadBean(t, &OrgUser{UID: 4, OrgID: 3})
  115. prevNumMembers := org.NumMembers
  116. assert.NoError(t, org.RemoveMember(4))
  117. AssertNotExistsBean(t, &OrgUser{UID: 4, OrgID: 3})
  118. org = AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  119. assert.Equal(t, prevNumMembers-1, org.NumMembers)
  120. // remove a user that is not a member
  121. AssertNotExistsBean(t, &OrgUser{UID: 5, OrgID: 3})
  122. prevNumMembers = org.NumMembers
  123. assert.NoError(t, org.RemoveMember(5))
  124. AssertNotExistsBean(t, &OrgUser{UID: 5, OrgID: 3})
  125. org = AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  126. assert.Equal(t, prevNumMembers, org.NumMembers)
  127. CheckConsistencyFor(t, &User{}, &Team{})
  128. }
  129. func TestUser_RemoveOrgRepo(t *testing.T) {
  130. assert.NoError(t, PrepareTestDatabase())
  131. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  132. repo := AssertExistsAndLoadBean(t, &Repository{OwnerID: org.ID}).(*Repository)
  133. // remove a repo that does belong to org
  134. AssertExistsAndLoadBean(t, &TeamRepo{RepoID: repo.ID, OrgID: org.ID})
  135. assert.NoError(t, org.RemoveOrgRepo(repo.ID))
  136. AssertNotExistsBean(t, &TeamRepo{RepoID: repo.ID, OrgID: org.ID})
  137. AssertExistsAndLoadBean(t, &Repository{ID: repo.ID}) // repo should still exist
  138. // remove a repo that does not belong to org
  139. assert.NoError(t, org.RemoveOrgRepo(repo.ID))
  140. AssertNotExistsBean(t, &TeamRepo{RepoID: repo.ID, OrgID: org.ID})
  141. assert.NoError(t, org.RemoveOrgRepo(NonexistentID))
  142. CheckConsistencyFor(t,
  143. &User{ID: org.ID},
  144. &Team{OrgID: org.ID},
  145. &Repository{ID: repo.ID})
  146. }
  147. func TestCreateOrganization(t *testing.T) {
  148. // successful creation of org
  149. assert.NoError(t, PrepareTestDatabase())
  150. owner := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  151. const newOrgName = "neworg"
  152. org := &User{
  153. Name: newOrgName,
  154. }
  155. AssertNotExistsBean(t, &User{Name: newOrgName, Type: UserTypeOrganization})
  156. assert.NoError(t, CreateOrganization(org, owner))
  157. org = AssertExistsAndLoadBean(t,
  158. &User{Name: newOrgName, Type: UserTypeOrganization}).(*User)
  159. ownerTeam := AssertExistsAndLoadBean(t,
  160. &Team{Name: ownerTeamName, OrgID: org.ID}).(*Team)
  161. AssertExistsAndLoadBean(t, &TeamUser{UID: owner.ID, TeamID: ownerTeam.ID})
  162. CheckConsistencyFor(t, &User{}, &Team{})
  163. }
  164. func TestCreateOrganization2(t *testing.T) {
  165. // unauthorized creation of org
  166. assert.NoError(t, PrepareTestDatabase())
  167. owner := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
  168. const newOrgName = "neworg"
  169. org := &User{
  170. Name: newOrgName,
  171. }
  172. AssertNotExistsBean(t, &User{Name: newOrgName, Type: UserTypeOrganization})
  173. err := CreateOrganization(org, owner)
  174. assert.Error(t, err)
  175. assert.True(t, IsErrUserNotAllowedCreateOrg(err))
  176. AssertNotExistsBean(t, &User{Name: newOrgName, Type: UserTypeOrganization})
  177. CheckConsistencyFor(t, &User{}, &Team{})
  178. }
  179. func TestCreateOrganization3(t *testing.T) {
  180. // create org with same name as existent org
  181. assert.NoError(t, PrepareTestDatabase())
  182. owner := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  183. org := &User{Name: "user3"} // should already exist
  184. AssertExistsAndLoadBean(t, &User{Name: org.Name}) // sanity check
  185. err := CreateOrganization(org, owner)
  186. assert.Error(t, err)
  187. assert.True(t, IsErrUserAlreadyExist(err))
  188. CheckConsistencyFor(t, &User{}, &Team{})
  189. }
  190. func TestCreateOrganization4(t *testing.T) {
  191. // create org with unusable name
  192. assert.NoError(t, PrepareTestDatabase())
  193. owner := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User)
  194. err := CreateOrganization(&User{Name: "assets"}, owner)
  195. assert.Error(t, err)
  196. assert.True(t, IsErrNameReserved(err))
  197. CheckConsistencyFor(t, &User{}, &Team{})
  198. }
  199. func TestGetOrgByName(t *testing.T) {
  200. assert.NoError(t, PrepareTestDatabase())
  201. org, err := GetOrgByName("user3")
  202. assert.NoError(t, err)
  203. assert.EqualValues(t, 3, org.ID)
  204. assert.Equal(t, "user3", org.Name)
  205. org, err = GetOrgByName("user2") // user2 is an individual
  206. assert.True(t, IsErrOrgNotExist(err))
  207. org, err = GetOrgByName("") // corner case
  208. assert.True(t, IsErrOrgNotExist(err))
  209. }
  210. func TestCountOrganizations(t *testing.T) {
  211. assert.NoError(t, PrepareTestDatabase())
  212. expected, err := x.Where("type=?", UserTypeOrganization).Count(&User{})
  213. assert.NoError(t, err)
  214. assert.Equal(t, expected, CountOrganizations())
  215. }
  216. func TestDeleteOrganization(t *testing.T) {
  217. assert.NoError(t, PrepareTestDatabase())
  218. org := AssertExistsAndLoadBean(t, &User{ID: 6}).(*User)
  219. assert.NoError(t, DeleteOrganization(org))
  220. AssertNotExistsBean(t, &User{ID: 6})
  221. AssertNotExistsBean(t, &OrgUser{OrgID: 6})
  222. AssertNotExistsBean(t, &Team{OrgID: 6})
  223. org = AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  224. err := DeleteOrganization(org)
  225. assert.Error(t, err)
  226. assert.True(t, IsErrUserOwnRepos(err))
  227. nonOrg := AssertExistsAndLoadBean(t, &User{ID: 5}).(*User)
  228. assert.Error(t, DeleteOrganization(nonOrg))
  229. CheckConsistencyFor(t, &User{}, &Team{})
  230. }
  231. func TestIsOrganizationOwner(t *testing.T) {
  232. assert.NoError(t, PrepareTestDatabase())
  233. test := func(orgID, userID int64, expected bool) {
  234. isOwner, err := IsOrganizationOwner(orgID, userID)
  235. assert.NoError(t, err)
  236. assert.EqualValues(t, expected, isOwner)
  237. }
  238. test(3, 2, true)
  239. test(3, 3, false)
  240. test(6, 5, true)
  241. test(6, 4, false)
  242. test(NonexistentID, NonexistentID, false)
  243. }
  244. func TestIsOrganizationMember(t *testing.T) {
  245. assert.NoError(t, PrepareTestDatabase())
  246. test := func(orgID, userID int64, expected bool) {
  247. isMember, err := IsOrganizationMember(orgID, userID)
  248. assert.NoError(t, err)
  249. assert.EqualValues(t, expected, isMember)
  250. }
  251. test(3, 2, true)
  252. test(3, 3, false)
  253. test(3, 4, true)
  254. test(6, 5, true)
  255. test(6, 4, false)
  256. test(NonexistentID, NonexistentID, false)
  257. }
  258. func TestIsPublicMembership(t *testing.T) {
  259. assert.NoError(t, PrepareTestDatabase())
  260. test := func(orgID, userID int64, expected bool) {
  261. isMember, err := IsPublicMembership(orgID, userID)
  262. assert.NoError(t, err)
  263. assert.EqualValues(t, expected, isMember)
  264. }
  265. test(3, 2, true)
  266. test(3, 3, false)
  267. test(3, 4, false)
  268. test(6, 5, true)
  269. test(6, 4, false)
  270. test(NonexistentID, NonexistentID, false)
  271. }
  272. func TestGetOrgsByUserID(t *testing.T) {
  273. assert.NoError(t, PrepareTestDatabase())
  274. orgs, err := GetOrgsByUserID(4, true)
  275. assert.NoError(t, err)
  276. if assert.Len(t, orgs, 1) {
  277. assert.EqualValues(t, 3, orgs[0].ID)
  278. }
  279. orgs, err = GetOrgsByUserID(4, false)
  280. assert.NoError(t, err)
  281. assert.Len(t, orgs, 0)
  282. }
  283. func TestGetOwnedOrgsByUserID(t *testing.T) {
  284. assert.NoError(t, PrepareTestDatabase())
  285. orgs, err := GetOwnedOrgsByUserID(2)
  286. assert.NoError(t, err)
  287. if assert.Len(t, orgs, 1) {
  288. assert.EqualValues(t, 3, orgs[0].ID)
  289. }
  290. orgs, err = GetOwnedOrgsByUserID(4)
  291. assert.NoError(t, err)
  292. assert.Len(t, orgs, 0)
  293. }
  294. func TestGetOwnedOrgsByUserIDDesc(t *testing.T) {
  295. assert.NoError(t, PrepareTestDatabase())
  296. orgs, err := GetOwnedOrgsByUserIDDesc(5, "id")
  297. assert.NoError(t, err)
  298. if assert.Len(t, orgs, 2) {
  299. assert.EqualValues(t, 7, orgs[0].ID)
  300. assert.EqualValues(t, 6, orgs[1].ID)
  301. }
  302. orgs, err = GetOwnedOrgsByUserIDDesc(4, "id")
  303. assert.NoError(t, err)
  304. assert.Len(t, orgs, 0)
  305. }
  306. func TestGetOrgUsersByUserID(t *testing.T) {
  307. assert.NoError(t, PrepareTestDatabase())
  308. orgUsers, err := GetOrgUsersByUserID(5, true)
  309. assert.NoError(t, err)
  310. if assert.Len(t, orgUsers, 2) {
  311. assert.Equal(t, OrgUser{
  312. ID: orgUsers[0].ID,
  313. OrgID: 6,
  314. UID: 5,
  315. IsPublic: true}, *orgUsers[0])
  316. assert.Equal(t, OrgUser{
  317. ID: orgUsers[1].ID,
  318. OrgID: 7,
  319. UID: 5,
  320. IsPublic: false}, *orgUsers[1])
  321. }
  322. publicOrgUsers, err := GetOrgUsersByUserID(5, false)
  323. assert.NoError(t, err)
  324. assert.Len(t, publicOrgUsers, 1)
  325. assert.Equal(t, *orgUsers[0], *publicOrgUsers[0])
  326. orgUsers, err = GetOrgUsersByUserID(1, true)
  327. assert.NoError(t, err)
  328. assert.Len(t, orgUsers, 0)
  329. }
  330. func TestGetOrgUsersByOrgID(t *testing.T) {
  331. assert.NoError(t, PrepareTestDatabase())
  332. orgUsers, err := GetOrgUsersByOrgID(3)
  333. assert.NoError(t, err)
  334. if assert.Len(t, orgUsers, 2) {
  335. assert.Equal(t, OrgUser{
  336. ID: orgUsers[0].ID,
  337. OrgID: 3,
  338. UID: 2,
  339. IsPublic: true}, *orgUsers[0])
  340. assert.Equal(t, OrgUser{
  341. ID: orgUsers[1].ID,
  342. OrgID: 3,
  343. UID: 4,
  344. IsPublic: false}, *orgUsers[1])
  345. }
  346. orgUsers, err = GetOrgUsersByOrgID(NonexistentID)
  347. assert.NoError(t, err)
  348. assert.Len(t, orgUsers, 0)
  349. }
  350. func TestChangeOrgUserStatus(t *testing.T) {
  351. assert.NoError(t, PrepareTestDatabase())
  352. testSuccess := func(orgID, userID int64, public bool) {
  353. assert.NoError(t, ChangeOrgUserStatus(orgID, userID, public))
  354. orgUser := AssertExistsAndLoadBean(t, &OrgUser{OrgID: orgID, UID: userID}).(*OrgUser)
  355. assert.Equal(t, public, orgUser.IsPublic)
  356. }
  357. testSuccess(3, 2, false)
  358. testSuccess(3, 2, false)
  359. testSuccess(3, 4, true)
  360. assert.NoError(t, ChangeOrgUserStatus(NonexistentID, NonexistentID, true))
  361. }
  362. func TestAddOrgUser(t *testing.T) {
  363. assert.NoError(t, PrepareTestDatabase())
  364. testSuccess := func(orgID, userID int64) {
  365. org := AssertExistsAndLoadBean(t, &User{ID: orgID}).(*User)
  366. expectedNumMembers := org.NumMembers
  367. if !BeanExists(t, &OrgUser{OrgID: orgID, UID: userID}) {
  368. expectedNumMembers++
  369. }
  370. assert.NoError(t, AddOrgUser(orgID, userID))
  371. AssertExistsAndLoadBean(t, &OrgUser{OrgID: orgID, UID: userID})
  372. org = AssertExistsAndLoadBean(t, &User{ID: orgID}).(*User)
  373. assert.EqualValues(t, expectedNumMembers, org.NumMembers)
  374. }
  375. testSuccess(3, 5)
  376. testSuccess(3, 5)
  377. testSuccess(6, 2)
  378. CheckConsistencyFor(t, &User{}, &Team{})
  379. }
  380. func TestRemoveOrgUser(t *testing.T) {
  381. assert.NoError(t, PrepareTestDatabase())
  382. testSuccess := func(orgID, userID int64) {
  383. org := AssertExistsAndLoadBean(t, &User{ID: orgID}).(*User)
  384. expectedNumMembers := org.NumMembers
  385. if BeanExists(t, &OrgUser{OrgID: orgID, UID: userID}) {
  386. expectedNumMembers--
  387. }
  388. assert.NoError(t, RemoveOrgUser(orgID, userID))
  389. AssertNotExistsBean(t, &OrgUser{OrgID: orgID, UID: userID})
  390. org = AssertExistsAndLoadBean(t, &User{ID: orgID}).(*User)
  391. assert.EqualValues(t, expectedNumMembers, org.NumMembers)
  392. }
  393. testSuccess(3, 4)
  394. testSuccess(3, 4)
  395. err := RemoveOrgUser(7, 5)
  396. assert.Error(t, err)
  397. assert.True(t, IsErrLastOrgOwner(err))
  398. AssertExistsAndLoadBean(t, &OrgUser{OrgID: 7, UID: 5})
  399. CheckConsistencyFor(t, &User{}, &Team{})
  400. }
  401. func TestUser_GetUserTeamIDs(t *testing.T) {
  402. assert.NoError(t, PrepareTestDatabase())
  403. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  404. testSuccess := func(userID int64, expected []int64) {
  405. teamIDs, err := org.GetUserTeamIDs(userID)
  406. assert.NoError(t, err)
  407. assert.Equal(t, expected, teamIDs)
  408. }
  409. testSuccess(2, []int64{1, 2})
  410. testSuccess(4, []int64{2})
  411. testSuccess(NonexistentID, []int64{})
  412. }
  413. func TestAccessibleReposEnv_CountRepos(t *testing.T) {
  414. assert.NoError(t, PrepareTestDatabase())
  415. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  416. testSuccess := func(userID, expectedCount int64) {
  417. env, err := org.AccessibleReposEnv(userID)
  418. assert.NoError(t, err)
  419. count, err := env.CountRepos()
  420. assert.NoError(t, err)
  421. assert.EqualValues(t, expectedCount, count)
  422. }
  423. testSuccess(2, 3)
  424. testSuccess(4, 2)
  425. }
  426. func TestAccessibleReposEnv_RepoIDs(t *testing.T) {
  427. assert.NoError(t, PrepareTestDatabase())
  428. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  429. testSuccess := func(userID, page, pageSize int64, expectedRepoIDs []int64) {
  430. env, err := org.AccessibleReposEnv(userID)
  431. assert.NoError(t, err)
  432. repoIDs, err := env.RepoIDs(1, 100)
  433. assert.NoError(t, err)
  434. assert.Equal(t, expectedRepoIDs, repoIDs)
  435. }
  436. testSuccess(2, 1, 100, []int64{3, 5, 32})
  437. testSuccess(4, 0, 100, []int64{3, 32})
  438. }
  439. func TestAccessibleReposEnv_Repos(t *testing.T) {
  440. assert.NoError(t, PrepareTestDatabase())
  441. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  442. testSuccess := func(userID int64, expectedRepoIDs []int64) {
  443. env, err := org.AccessibleReposEnv(userID)
  444. assert.NoError(t, err)
  445. repos, err := env.Repos(1, 100)
  446. assert.NoError(t, err)
  447. expectedRepos := make([]*Repository, len(expectedRepoIDs))
  448. for i, repoID := range expectedRepoIDs {
  449. expectedRepos[i] = AssertExistsAndLoadBean(t,
  450. &Repository{ID: repoID}).(*Repository)
  451. }
  452. assert.Equal(t, expectedRepos, repos)
  453. }
  454. testSuccess(2, []int64{3, 5, 32})
  455. testSuccess(4, []int64{3, 32})
  456. }
  457. func TestAccessibleReposEnv_MirrorRepos(t *testing.T) {
  458. assert.NoError(t, PrepareTestDatabase())
  459. org := AssertExistsAndLoadBean(t, &User{ID: 3}).(*User)
  460. testSuccess := func(userID int64, expectedRepoIDs []int64) {
  461. env, err := org.AccessibleReposEnv(userID)
  462. assert.NoError(t, err)
  463. repos, err := env.MirrorRepos()
  464. assert.NoError(t, err)
  465. expectedRepos := make([]*Repository, len(expectedRepoIDs))
  466. for i, repoID := range expectedRepoIDs {
  467. expectedRepos[i] = AssertExistsAndLoadBean(t,
  468. &Repository{ID: repoID}).(*Repository)
  469. }
  470. assert.Equal(t, expectedRepos, repos)
  471. }
  472. testSuccess(2, []int64{5})
  473. testSuccess(4, []int64{})
  474. }