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 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  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. "code.gitea.io/gitea/models/db"
  8. "code.gitea.io/gitea/models/unittest"
  9. user_model "code.gitea.io/gitea/models/user"
  10. "code.gitea.io/gitea/modules/setting"
  11. "code.gitea.io/gitea/modules/structs"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestUser_IsOwnedBy(t *testing.T) {
  15. assert.NoError(t, unittest.PrepareTestDatabase())
  16. for _, testCase := range []struct {
  17. OrgID int64
  18. UserID int64
  19. ExpectedOwner bool
  20. }{
  21. {3, 2, true},
  22. {3, 1, false},
  23. {3, 3, false},
  24. {3, 4, false},
  25. {2, 2, false}, // user2 is not an organization
  26. {2, 3, false},
  27. } {
  28. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: testCase.OrgID}).(*Organization)
  29. isOwner, err := org.IsOwnedBy(testCase.UserID)
  30. assert.NoError(t, err)
  31. assert.Equal(t, testCase.ExpectedOwner, isOwner)
  32. }
  33. }
  34. func TestUser_IsOrgMember(t *testing.T) {
  35. assert.NoError(t, unittest.PrepareTestDatabase())
  36. for _, testCase := range []struct {
  37. OrgID int64
  38. UserID int64
  39. ExpectedMember bool
  40. }{
  41. {3, 2, true},
  42. {3, 4, true},
  43. {3, 1, false},
  44. {3, 3, false},
  45. {2, 2, false}, // user2 is not an organization
  46. {2, 3, false},
  47. } {
  48. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: testCase.OrgID}).(*Organization)
  49. isMember, err := org.IsOrgMember(testCase.UserID)
  50. assert.NoError(t, err)
  51. assert.Equal(t, testCase.ExpectedMember, isMember)
  52. }
  53. }
  54. func TestUser_GetTeam(t *testing.T) {
  55. assert.NoError(t, unittest.PrepareTestDatabase())
  56. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  57. team, err := org.GetTeam("team1")
  58. assert.NoError(t, err)
  59. assert.Equal(t, org.ID, team.OrgID)
  60. assert.Equal(t, "team1", team.LowerName)
  61. _, err = org.GetTeam("does not exist")
  62. assert.True(t, IsErrTeamNotExist(err))
  63. nonOrg := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 2}).(*Organization)
  64. _, err = nonOrg.GetTeam("team")
  65. assert.True(t, IsErrTeamNotExist(err))
  66. }
  67. func TestUser_GetOwnerTeam(t *testing.T) {
  68. assert.NoError(t, unittest.PrepareTestDatabase())
  69. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  70. team, err := org.GetOwnerTeam()
  71. assert.NoError(t, err)
  72. assert.Equal(t, org.ID, team.OrgID)
  73. nonOrg := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 2}).(*Organization)
  74. _, err = nonOrg.GetOwnerTeam()
  75. assert.True(t, IsErrTeamNotExist(err))
  76. }
  77. func TestUser_GetTeams(t *testing.T) {
  78. assert.NoError(t, unittest.PrepareTestDatabase())
  79. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  80. teams, err := org.LoadTeams()
  81. assert.NoError(t, err)
  82. if assert.Len(t, teams, 4) {
  83. assert.Equal(t, int64(1), teams[0].ID)
  84. assert.Equal(t, int64(2), teams[1].ID)
  85. assert.Equal(t, int64(12), teams[2].ID)
  86. assert.Equal(t, int64(7), teams[3].ID)
  87. }
  88. }
  89. func TestUser_GetMembers(t *testing.T) {
  90. assert.NoError(t, unittest.PrepareTestDatabase())
  91. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  92. members, _, err := org.GetMembers()
  93. assert.NoError(t, err)
  94. if assert.Len(t, members, 3) {
  95. assert.Equal(t, int64(2), members[0].ID)
  96. assert.Equal(t, int64(28), members[1].ID)
  97. assert.Equal(t, int64(4), members[2].ID)
  98. }
  99. }
  100. func TestUser_AddMember(t *testing.T) {
  101. assert.NoError(t, unittest.PrepareTestDatabase())
  102. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  103. // add a user that is not a member
  104. unittest.AssertNotExistsBean(t, &OrgUser{UID: 5, OrgID: 3})
  105. prevNumMembers := org.NumMembers
  106. assert.NoError(t, org.AddMember(5))
  107. unittest.AssertExistsAndLoadBean(t, &OrgUser{UID: 5, OrgID: 3})
  108. org = unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  109. assert.Equal(t, prevNumMembers+1, org.NumMembers)
  110. // add a user that is already a member
  111. unittest.AssertExistsAndLoadBean(t, &OrgUser{UID: 4, OrgID: 3})
  112. prevNumMembers = org.NumMembers
  113. assert.NoError(t, org.AddMember(4))
  114. unittest.AssertExistsAndLoadBean(t, &OrgUser{UID: 4, OrgID: 3})
  115. org = unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  116. assert.Equal(t, prevNumMembers, org.NumMembers)
  117. unittest.CheckConsistencyFor(t, &user_model.User{})
  118. }
  119. func TestUser_RemoveMember(t *testing.T) {
  120. assert.NoError(t, unittest.PrepareTestDatabase())
  121. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  122. // remove a user that is a member
  123. unittest.AssertExistsAndLoadBean(t, &OrgUser{UID: 4, OrgID: 3})
  124. prevNumMembers := org.NumMembers
  125. assert.NoError(t, org.RemoveMember(4))
  126. unittest.AssertNotExistsBean(t, &OrgUser{UID: 4, OrgID: 3})
  127. org = unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  128. assert.Equal(t, prevNumMembers-1, org.NumMembers)
  129. // remove a user that is not a member
  130. unittest.AssertNotExistsBean(t, &OrgUser{UID: 5, OrgID: 3})
  131. prevNumMembers = org.NumMembers
  132. assert.NoError(t, org.RemoveMember(5))
  133. unittest.AssertNotExistsBean(t, &OrgUser{UID: 5, OrgID: 3})
  134. org = unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  135. assert.Equal(t, prevNumMembers, org.NumMembers)
  136. unittest.CheckConsistencyFor(t, &user_model.User{}, &Team{})
  137. }
  138. func TestUser_RemoveOrgRepo(t *testing.T) {
  139. assert.NoError(t, unittest.PrepareTestDatabase())
  140. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  141. repo := unittest.AssertExistsAndLoadBean(t, &Repository{OwnerID: org.ID}).(*Repository)
  142. // remove a repo that does belong to org
  143. unittest.AssertExistsAndLoadBean(t, &TeamRepo{RepoID: repo.ID, OrgID: org.ID})
  144. assert.NoError(t, org.RemoveOrgRepo(repo.ID))
  145. unittest.AssertNotExistsBean(t, &TeamRepo{RepoID: repo.ID, OrgID: org.ID})
  146. unittest.AssertExistsAndLoadBean(t, &Repository{ID: repo.ID}) // repo should still exist
  147. // remove a repo that does not belong to org
  148. assert.NoError(t, org.RemoveOrgRepo(repo.ID))
  149. unittest.AssertNotExistsBean(t, &TeamRepo{RepoID: repo.ID, OrgID: org.ID})
  150. assert.NoError(t, org.RemoveOrgRepo(unittest.NonexistentID))
  151. unittest.CheckConsistencyFor(t,
  152. &user_model.User{ID: org.ID},
  153. &Team{OrgID: org.ID},
  154. &Repository{ID: repo.ID})
  155. }
  156. func TestCreateOrganization(t *testing.T) {
  157. // successful creation of org
  158. assert.NoError(t, unittest.PrepareTestDatabase())
  159. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
  160. const newOrgName = "neworg"
  161. org := &Organization{
  162. Name: newOrgName,
  163. }
  164. unittest.AssertNotExistsBean(t, &user_model.User{Name: newOrgName, Type: user_model.UserTypeOrganization})
  165. assert.NoError(t, CreateOrganization(org, owner))
  166. org = unittest.AssertExistsAndLoadBean(t,
  167. &Organization{Name: newOrgName, Type: user_model.UserTypeOrganization}).(*Organization)
  168. ownerTeam := unittest.AssertExistsAndLoadBean(t,
  169. &Team{Name: ownerTeamName, OrgID: org.ID}).(*Team)
  170. unittest.AssertExistsAndLoadBean(t, &TeamUser{UID: owner.ID, TeamID: ownerTeam.ID})
  171. unittest.CheckConsistencyFor(t, &user_model.User{}, &Team{})
  172. }
  173. func TestCreateOrganization2(t *testing.T) {
  174. // unauthorized creation of org
  175. assert.NoError(t, unittest.PrepareTestDatabase())
  176. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5}).(*user_model.User)
  177. const newOrgName = "neworg"
  178. org := &Organization{
  179. Name: newOrgName,
  180. }
  181. unittest.AssertNotExistsBean(t, &Organization{Name: newOrgName, Type: user_model.UserTypeOrganization})
  182. err := CreateOrganization(org, owner)
  183. assert.Error(t, err)
  184. assert.True(t, IsErrUserNotAllowedCreateOrg(err))
  185. unittest.AssertNotExistsBean(t, &Organization{Name: newOrgName, Type: user_model.UserTypeOrganization})
  186. unittest.CheckConsistencyFor(t, &Organization{}, &Team{})
  187. }
  188. func TestCreateOrganization3(t *testing.T) {
  189. // create org with same name as existent org
  190. assert.NoError(t, unittest.PrepareTestDatabase())
  191. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
  192. org := &Organization{Name: "user3"} // should already exist
  193. unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: org.Name}) // sanity check
  194. err := CreateOrganization(org, owner)
  195. assert.Error(t, err)
  196. assert.True(t, user_model.IsErrUserAlreadyExist(err))
  197. unittest.CheckConsistencyFor(t, &user_model.User{}, &Team{})
  198. }
  199. func TestCreateOrganization4(t *testing.T) {
  200. // create org with unusable name
  201. assert.NoError(t, unittest.PrepareTestDatabase())
  202. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
  203. err := CreateOrganization(&Organization{Name: "assets"}, owner)
  204. assert.Error(t, err)
  205. assert.True(t, db.IsErrNameReserved(err))
  206. unittest.CheckConsistencyFor(t, &Organization{}, &Team{})
  207. }
  208. func TestGetOrgByName(t *testing.T) {
  209. assert.NoError(t, unittest.PrepareTestDatabase())
  210. org, err := GetOrgByName("user3")
  211. assert.NoError(t, err)
  212. assert.EqualValues(t, 3, org.ID)
  213. assert.Equal(t, "user3", org.Name)
  214. _, err = GetOrgByName("user2") // user2 is an individual
  215. assert.True(t, IsErrOrgNotExist(err))
  216. _, err = GetOrgByName("") // corner case
  217. assert.True(t, IsErrOrgNotExist(err))
  218. }
  219. func TestCountOrganizations(t *testing.T) {
  220. assert.NoError(t, unittest.PrepareTestDatabase())
  221. expected, err := db.GetEngine(db.DefaultContext).Where("type=?", user_model.UserTypeOrganization).Count(&user_model.User{})
  222. assert.NoError(t, err)
  223. assert.Equal(t, expected, CountOrganizations())
  224. }
  225. func TestIsOrganizationOwner(t *testing.T) {
  226. assert.NoError(t, unittest.PrepareTestDatabase())
  227. test := func(orgID, userID int64, expected bool) {
  228. isOwner, err := IsOrganizationOwner(orgID, userID)
  229. assert.NoError(t, err)
  230. assert.EqualValues(t, expected, isOwner)
  231. }
  232. test(3, 2, true)
  233. test(3, 3, false)
  234. test(6, 5, true)
  235. test(6, 4, false)
  236. test(unittest.NonexistentID, unittest.NonexistentID, false)
  237. }
  238. func TestIsOrganizationMember(t *testing.T) {
  239. assert.NoError(t, unittest.PrepareTestDatabase())
  240. test := func(orgID, userID int64, expected bool) {
  241. isMember, err := IsOrganizationMember(orgID, userID)
  242. assert.NoError(t, err)
  243. assert.EqualValues(t, expected, isMember)
  244. }
  245. test(3, 2, true)
  246. test(3, 3, false)
  247. test(3, 4, true)
  248. test(6, 5, true)
  249. test(6, 4, false)
  250. test(unittest.NonexistentID, unittest.NonexistentID, false)
  251. }
  252. func TestIsPublicMembership(t *testing.T) {
  253. assert.NoError(t, unittest.PrepareTestDatabase())
  254. test := func(orgID, userID int64, expected bool) {
  255. isMember, err := IsPublicMembership(orgID, userID)
  256. assert.NoError(t, err)
  257. assert.EqualValues(t, expected, isMember)
  258. }
  259. test(3, 2, true)
  260. test(3, 3, false)
  261. test(3, 4, false)
  262. test(6, 5, true)
  263. test(6, 4, false)
  264. test(unittest.NonexistentID, unittest.NonexistentID, false)
  265. }
  266. func TestFindOrgs(t *testing.T) {
  267. assert.NoError(t, unittest.PrepareTestDatabase())
  268. orgs, err := FindOrgs(FindOrgOptions{
  269. UserID: 4,
  270. IncludePrivate: true,
  271. })
  272. assert.NoError(t, err)
  273. if assert.Len(t, orgs, 1) {
  274. assert.EqualValues(t, 3, orgs[0].ID)
  275. }
  276. orgs, err = FindOrgs(FindOrgOptions{
  277. UserID: 4,
  278. IncludePrivate: false,
  279. })
  280. assert.NoError(t, err)
  281. assert.Len(t, orgs, 0)
  282. total, err := CountOrgs(FindOrgOptions{
  283. UserID: 4,
  284. IncludePrivate: true,
  285. })
  286. assert.NoError(t, err)
  287. assert.EqualValues(t, 1, total)
  288. }
  289. func TestGetOwnedOrgsByUserID(t *testing.T) {
  290. assert.NoError(t, unittest.PrepareTestDatabase())
  291. orgs, err := GetOwnedOrgsByUserID(2)
  292. assert.NoError(t, err)
  293. if assert.Len(t, orgs, 1) {
  294. assert.EqualValues(t, 3, orgs[0].ID)
  295. }
  296. orgs, err = GetOwnedOrgsByUserID(4)
  297. assert.NoError(t, err)
  298. assert.Len(t, orgs, 0)
  299. }
  300. func TestGetOwnedOrgsByUserIDDesc(t *testing.T) {
  301. assert.NoError(t, unittest.PrepareTestDatabase())
  302. orgs, err := GetOwnedOrgsByUserIDDesc(5, "id")
  303. assert.NoError(t, err)
  304. if assert.Len(t, orgs, 2) {
  305. assert.EqualValues(t, 7, orgs[0].ID)
  306. assert.EqualValues(t, 6, orgs[1].ID)
  307. }
  308. orgs, err = GetOwnedOrgsByUserIDDesc(4, "id")
  309. assert.NoError(t, err)
  310. assert.Len(t, orgs, 0)
  311. }
  312. func TestGetOrgUsersByUserID(t *testing.T) {
  313. assert.NoError(t, unittest.PrepareTestDatabase())
  314. orgUsers, err := GetOrgUsersByUserID(5, &SearchOrganizationsOptions{All: true})
  315. assert.NoError(t, err)
  316. if assert.Len(t, orgUsers, 2) {
  317. assert.Equal(t, OrgUser{
  318. ID: orgUsers[0].ID,
  319. OrgID: 6,
  320. UID: 5,
  321. IsPublic: true,
  322. }, *orgUsers[0])
  323. assert.Equal(t, OrgUser{
  324. ID: orgUsers[1].ID,
  325. OrgID: 7,
  326. UID: 5,
  327. IsPublic: false,
  328. }, *orgUsers[1])
  329. }
  330. publicOrgUsers, err := GetOrgUsersByUserID(5, &SearchOrganizationsOptions{All: false})
  331. assert.NoError(t, err)
  332. assert.Len(t, publicOrgUsers, 1)
  333. assert.Equal(t, *orgUsers[0], *publicOrgUsers[0])
  334. orgUsers, err = GetOrgUsersByUserID(1, &SearchOrganizationsOptions{All: true})
  335. assert.NoError(t, err)
  336. assert.Len(t, orgUsers, 0)
  337. }
  338. func TestGetOrgUsersByOrgID(t *testing.T) {
  339. assert.NoError(t, unittest.PrepareTestDatabase())
  340. orgUsers, err := GetOrgUsersByOrgID(&FindOrgMembersOpts{
  341. ListOptions: db.ListOptions{},
  342. OrgID: 3,
  343. PublicOnly: false,
  344. })
  345. assert.NoError(t, err)
  346. if assert.Len(t, orgUsers, 3) {
  347. assert.Equal(t, OrgUser{
  348. ID: orgUsers[0].ID,
  349. OrgID: 3,
  350. UID: 2,
  351. IsPublic: true,
  352. }, *orgUsers[0])
  353. assert.Equal(t, OrgUser{
  354. ID: orgUsers[1].ID,
  355. OrgID: 3,
  356. UID: 4,
  357. IsPublic: false,
  358. }, *orgUsers[1])
  359. }
  360. orgUsers, err = GetOrgUsersByOrgID(&FindOrgMembersOpts{
  361. ListOptions: db.ListOptions{},
  362. OrgID: unittest.NonexistentID,
  363. PublicOnly: false,
  364. })
  365. assert.NoError(t, err)
  366. assert.Len(t, orgUsers, 0)
  367. }
  368. func TestChangeOrgUserStatus(t *testing.T) {
  369. assert.NoError(t, unittest.PrepareTestDatabase())
  370. testSuccess := func(orgID, userID int64, public bool) {
  371. assert.NoError(t, ChangeOrgUserStatus(orgID, userID, public))
  372. orgUser := unittest.AssertExistsAndLoadBean(t, &OrgUser{OrgID: orgID, UID: userID}).(*OrgUser)
  373. assert.Equal(t, public, orgUser.IsPublic)
  374. }
  375. testSuccess(3, 2, false)
  376. testSuccess(3, 2, false)
  377. testSuccess(3, 4, true)
  378. assert.NoError(t, ChangeOrgUserStatus(unittest.NonexistentID, unittest.NonexistentID, true))
  379. }
  380. func TestAddOrgUser(t *testing.T) {
  381. assert.NoError(t, unittest.PrepareTestDatabase())
  382. testSuccess := func(orgID, userID int64, isPublic bool) {
  383. org := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: orgID}).(*user_model.User)
  384. expectedNumMembers := org.NumMembers
  385. if !unittest.BeanExists(t, &OrgUser{OrgID: orgID, UID: userID}) {
  386. expectedNumMembers++
  387. }
  388. assert.NoError(t, AddOrgUser(orgID, userID))
  389. ou := &OrgUser{OrgID: orgID, UID: userID}
  390. unittest.AssertExistsAndLoadBean(t, ou)
  391. assert.Equal(t, isPublic, ou.IsPublic)
  392. org = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: orgID}).(*user_model.User)
  393. assert.EqualValues(t, expectedNumMembers, org.NumMembers)
  394. }
  395. setting.Service.DefaultOrgMemberVisible = false
  396. testSuccess(3, 5, false)
  397. testSuccess(3, 5, false)
  398. testSuccess(6, 2, false)
  399. setting.Service.DefaultOrgMemberVisible = true
  400. testSuccess(6, 3, true)
  401. unittest.CheckConsistencyFor(t, &user_model.User{}, &Team{})
  402. }
  403. func TestRemoveOrgUser(t *testing.T) {
  404. assert.NoError(t, unittest.PrepareTestDatabase())
  405. testSuccess := func(orgID, userID int64) {
  406. org := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: orgID}).(*user_model.User)
  407. expectedNumMembers := org.NumMembers
  408. if unittest.BeanExists(t, &OrgUser{OrgID: orgID, UID: userID}) {
  409. expectedNumMembers--
  410. }
  411. assert.NoError(t, RemoveOrgUser(orgID, userID))
  412. unittest.AssertNotExistsBean(t, &OrgUser{OrgID: orgID, UID: userID})
  413. org = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: orgID}).(*user_model.User)
  414. assert.EqualValues(t, expectedNumMembers, org.NumMembers)
  415. }
  416. testSuccess(3, 4)
  417. testSuccess(3, 4)
  418. err := RemoveOrgUser(7, 5)
  419. assert.Error(t, err)
  420. assert.True(t, IsErrLastOrgOwner(err))
  421. unittest.AssertExistsAndLoadBean(t, &OrgUser{OrgID: 7, UID: 5})
  422. unittest.CheckConsistencyFor(t, &user_model.User{}, &Team{})
  423. }
  424. func TestUser_GetUserTeamIDs(t *testing.T) {
  425. assert.NoError(t, unittest.PrepareTestDatabase())
  426. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  427. testSuccess := func(userID int64, expected []int64) {
  428. teamIDs, err := org.GetUserTeamIDs(userID)
  429. assert.NoError(t, err)
  430. assert.Equal(t, expected, teamIDs)
  431. }
  432. testSuccess(2, []int64{1, 2})
  433. testSuccess(4, []int64{2})
  434. testSuccess(unittest.NonexistentID, []int64{})
  435. }
  436. func TestAccessibleReposEnv_CountRepos(t *testing.T) {
  437. assert.NoError(t, unittest.PrepareTestDatabase())
  438. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  439. testSuccess := func(userID, expectedCount int64) {
  440. env, err := org.AccessibleReposEnv(userID)
  441. assert.NoError(t, err)
  442. count, err := env.CountRepos()
  443. assert.NoError(t, err)
  444. assert.EqualValues(t, expectedCount, count)
  445. }
  446. testSuccess(2, 3)
  447. testSuccess(4, 2)
  448. }
  449. func TestAccessibleReposEnv_RepoIDs(t *testing.T) {
  450. assert.NoError(t, unittest.PrepareTestDatabase())
  451. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  452. testSuccess := func(userID, _, pageSize int64, expectedRepoIDs []int64) {
  453. env, err := org.AccessibleReposEnv(userID)
  454. assert.NoError(t, err)
  455. repoIDs, err := env.RepoIDs(1, 100)
  456. assert.NoError(t, err)
  457. assert.Equal(t, expectedRepoIDs, repoIDs)
  458. }
  459. testSuccess(2, 1, 100, []int64{3, 5, 32})
  460. testSuccess(4, 0, 100, []int64{3, 32})
  461. }
  462. func TestAccessibleReposEnv_Repos(t *testing.T) {
  463. assert.NoError(t, unittest.PrepareTestDatabase())
  464. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  465. testSuccess := func(userID int64, expectedRepoIDs []int64) {
  466. env, err := org.AccessibleReposEnv(userID)
  467. assert.NoError(t, err)
  468. repos, err := env.Repos(1, 100)
  469. assert.NoError(t, err)
  470. expectedRepos := make([]*Repository, len(expectedRepoIDs))
  471. for i, repoID := range expectedRepoIDs {
  472. expectedRepos[i] = unittest.AssertExistsAndLoadBean(t,
  473. &Repository{ID: repoID}).(*Repository)
  474. }
  475. assert.Equal(t, expectedRepos, repos)
  476. }
  477. testSuccess(2, []int64{3, 5, 32})
  478. testSuccess(4, []int64{3, 32})
  479. }
  480. func TestAccessibleReposEnv_MirrorRepos(t *testing.T) {
  481. assert.NoError(t, unittest.PrepareTestDatabase())
  482. org := unittest.AssertExistsAndLoadBean(t, &Organization{ID: 3}).(*Organization)
  483. testSuccess := func(userID int64, expectedRepoIDs []int64) {
  484. env, err := org.AccessibleReposEnv(userID)
  485. assert.NoError(t, err)
  486. repos, err := env.MirrorRepos()
  487. assert.NoError(t, err)
  488. expectedRepos := make([]*Repository, len(expectedRepoIDs))
  489. for i, repoID := range expectedRepoIDs {
  490. expectedRepos[i] = unittest.AssertExistsAndLoadBean(t,
  491. &Repository{ID: repoID}).(*Repository)
  492. }
  493. assert.Equal(t, expectedRepos, repos)
  494. }
  495. testSuccess(2, []int64{5})
  496. testSuccess(4, []int64{})
  497. }
  498. func TestHasOrgVisibleTypePublic(t *testing.T) {
  499. assert.NoError(t, unittest.PrepareTestDatabase())
  500. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
  501. user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3}).(*user_model.User)
  502. const newOrgName = "test-org-public"
  503. org := &Organization{
  504. Name: newOrgName,
  505. Visibility: structs.VisibleTypePublic,
  506. }
  507. unittest.AssertNotExistsBean(t, &user_model.User{Name: org.Name, Type: user_model.UserTypeOrganization})
  508. assert.NoError(t, CreateOrganization(org, owner))
  509. org = unittest.AssertExistsAndLoadBean(t,
  510. &Organization{Name: org.Name, Type: user_model.UserTypeOrganization}).(*Organization)
  511. test1 := HasOrgOrUserVisible(org.AsUser(), owner)
  512. test2 := HasOrgOrUserVisible(org.AsUser(), user3)
  513. test3 := HasOrgOrUserVisible(org.AsUser(), nil)
  514. assert.True(t, test1) // owner of org
  515. assert.True(t, test2) // user not a part of org
  516. assert.True(t, test3) // logged out user
  517. }
  518. func TestHasOrgVisibleTypeLimited(t *testing.T) {
  519. assert.NoError(t, unittest.PrepareTestDatabase())
  520. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
  521. user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3}).(*user_model.User)
  522. const newOrgName = "test-org-limited"
  523. org := &Organization{
  524. Name: newOrgName,
  525. Visibility: structs.VisibleTypeLimited,
  526. }
  527. unittest.AssertNotExistsBean(t, &user_model.User{Name: org.Name, Type: user_model.UserTypeOrganization})
  528. assert.NoError(t, CreateOrganization(org, owner))
  529. org = unittest.AssertExistsAndLoadBean(t,
  530. &Organization{Name: org.Name, Type: user_model.UserTypeOrganization}).(*Organization)
  531. test1 := HasOrgOrUserVisible(org.AsUser(), owner)
  532. test2 := HasOrgOrUserVisible(org.AsUser(), user3)
  533. test3 := HasOrgOrUserVisible(org.AsUser(), nil)
  534. assert.True(t, test1) // owner of org
  535. assert.True(t, test2) // user not a part of org
  536. assert.False(t, test3) // logged out user
  537. }
  538. func TestHasOrgVisibleTypePrivate(t *testing.T) {
  539. assert.NoError(t, unittest.PrepareTestDatabase())
  540. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
  541. user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3}).(*user_model.User)
  542. const newOrgName = "test-org-private"
  543. org := &Organization{
  544. Name: newOrgName,
  545. Visibility: structs.VisibleTypePrivate,
  546. }
  547. unittest.AssertNotExistsBean(t, &user_model.User{Name: org.Name, Type: user_model.UserTypeOrganization})
  548. assert.NoError(t, CreateOrganization(org, owner))
  549. org = unittest.AssertExistsAndLoadBean(t,
  550. &Organization{Name: org.Name, Type: user_model.UserTypeOrganization}).(*Organization)
  551. test1 := HasOrgOrUserVisible(org.AsUser(), owner)
  552. test2 := HasOrgOrUserVisible(org.AsUser(), user3)
  553. test3 := HasOrgOrUserVisible(org.AsUser(), nil)
  554. assert.True(t, test1) // owner of org
  555. assert.False(t, test2) // user not a part of org
  556. assert.False(t, test3) // logged out user
  557. }
  558. func TestGetUsersWhoCanCreateOrgRepo(t *testing.T) {
  559. assert.NoError(t, unittest.PrepareTestDatabase())
  560. users, err := GetUsersWhoCanCreateOrgRepo(3)
  561. assert.NoError(t, err)
  562. assert.Len(t, users, 2)
  563. var ids []int64
  564. for i := range users {
  565. ids = append(ids, users[i].ID)
  566. }
  567. assert.ElementsMatch(t, ids, []int64{2, 28})
  568. users, err = GetUsersWhoCanCreateOrgRepo(7)
  569. assert.NoError(t, err)
  570. assert.Len(t, users, 1)
  571. assert.EqualValues(t, 5, users[0].ID)
  572. }