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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package organization_test
  4. import (
  5. "testing"
  6. "code.gitea.io/gitea/models/db"
  7. "code.gitea.io/gitea/models/organization"
  8. repo_model "code.gitea.io/gitea/models/repo"
  9. "code.gitea.io/gitea/models/unittest"
  10. user_model "code.gitea.io/gitea/models/user"
  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.Organization{ID: testCase.OrgID})
  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.Organization{ID: testCase.OrgID})
  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.Organization{ID: 3})
  57. team, err := org.GetTeam(db.DefaultContext, "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(db.DefaultContext, "does not exist")
  62. assert.True(t, organization.IsErrTeamNotExist(err))
  63. nonOrg := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 2})
  64. _, err = nonOrg.GetTeam(db.DefaultContext, "team")
  65. assert.True(t, organization.IsErrTeamNotExist(err))
  66. }
  67. func TestUser_GetOwnerTeam(t *testing.T) {
  68. assert.NoError(t, unittest.PrepareTestDatabase())
  69. org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
  70. team, err := org.GetOwnerTeam(db.DefaultContext)
  71. assert.NoError(t, err)
  72. assert.Equal(t, org.ID, team.OrgID)
  73. nonOrg := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 2})
  74. _, err = nonOrg.GetOwnerTeam(db.DefaultContext)
  75. assert.True(t, organization.IsErrTeamNotExist(err))
  76. }
  77. func TestUser_GetTeams(t *testing.T) {
  78. assert.NoError(t, unittest.PrepareTestDatabase())
  79. org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
  80. teams, err := org.LoadTeams()
  81. assert.NoError(t, err)
  82. if assert.Len(t, teams, 5) {
  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(14), teams[3].ID)
  87. assert.Equal(t, int64(7), teams[4].ID)
  88. }
  89. }
  90. func TestUser_GetMembers(t *testing.T) {
  91. assert.NoError(t, unittest.PrepareTestDatabase())
  92. org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
  93. members, _, err := org.GetMembers()
  94. assert.NoError(t, err)
  95. if assert.Len(t, members, 3) {
  96. assert.Equal(t, int64(2), members[0].ID)
  97. assert.Equal(t, int64(28), members[1].ID)
  98. assert.Equal(t, int64(4), members[2].ID)
  99. }
  100. }
  101. func TestGetOrgByName(t *testing.T) {
  102. assert.NoError(t, unittest.PrepareTestDatabase())
  103. org, err := organization.GetOrgByName(db.DefaultContext, "user3")
  104. assert.NoError(t, err)
  105. assert.EqualValues(t, 3, org.ID)
  106. assert.Equal(t, "user3", org.Name)
  107. _, err = organization.GetOrgByName(db.DefaultContext, "user2") // user2 is an individual
  108. assert.True(t, organization.IsErrOrgNotExist(err))
  109. _, err = organization.GetOrgByName(db.DefaultContext, "") // corner case
  110. assert.True(t, organization.IsErrOrgNotExist(err))
  111. }
  112. func TestCountOrganizations(t *testing.T) {
  113. assert.NoError(t, unittest.PrepareTestDatabase())
  114. expected, err := db.GetEngine(db.DefaultContext).Where("type=?", user_model.UserTypeOrganization).Count(&organization.Organization{})
  115. assert.NoError(t, err)
  116. cnt, err := organization.CountOrgs(organization.FindOrgOptions{IncludePrivate: true})
  117. assert.NoError(t, err)
  118. assert.Equal(t, expected, cnt)
  119. }
  120. func TestIsOrganizationOwner(t *testing.T) {
  121. assert.NoError(t, unittest.PrepareTestDatabase())
  122. test := func(orgID, userID int64, expected bool) {
  123. isOwner, err := organization.IsOrganizationOwner(db.DefaultContext, orgID, userID)
  124. assert.NoError(t, err)
  125. assert.EqualValues(t, expected, isOwner)
  126. }
  127. test(3, 2, true)
  128. test(3, 3, false)
  129. test(6, 5, true)
  130. test(6, 4, false)
  131. test(unittest.NonexistentID, unittest.NonexistentID, false)
  132. }
  133. func TestIsOrganizationMember(t *testing.T) {
  134. assert.NoError(t, unittest.PrepareTestDatabase())
  135. test := func(orgID, userID int64, expected bool) {
  136. isMember, err := organization.IsOrganizationMember(db.DefaultContext, orgID, userID)
  137. assert.NoError(t, err)
  138. assert.EqualValues(t, expected, isMember)
  139. }
  140. test(3, 2, true)
  141. test(3, 3, false)
  142. test(3, 4, true)
  143. test(6, 5, true)
  144. test(6, 4, false)
  145. test(unittest.NonexistentID, unittest.NonexistentID, false)
  146. }
  147. func TestIsPublicMembership(t *testing.T) {
  148. assert.NoError(t, unittest.PrepareTestDatabase())
  149. test := func(orgID, userID int64, expected bool) {
  150. isMember, err := organization.IsPublicMembership(orgID, userID)
  151. assert.NoError(t, err)
  152. assert.EqualValues(t, expected, isMember)
  153. }
  154. test(3, 2, true)
  155. test(3, 3, false)
  156. test(3, 4, false)
  157. test(6, 5, true)
  158. test(6, 4, false)
  159. test(unittest.NonexistentID, unittest.NonexistentID, false)
  160. }
  161. func TestFindOrgs(t *testing.T) {
  162. assert.NoError(t, unittest.PrepareTestDatabase())
  163. orgs, err := organization.FindOrgs(organization.FindOrgOptions{
  164. UserID: 4,
  165. IncludePrivate: true,
  166. })
  167. assert.NoError(t, err)
  168. if assert.Len(t, orgs, 1) {
  169. assert.EqualValues(t, 3, orgs[0].ID)
  170. }
  171. orgs, err = organization.FindOrgs(organization.FindOrgOptions{
  172. UserID: 4,
  173. IncludePrivate: false,
  174. })
  175. assert.NoError(t, err)
  176. assert.Len(t, orgs, 0)
  177. total, err := organization.CountOrgs(organization.FindOrgOptions{
  178. UserID: 4,
  179. IncludePrivate: true,
  180. })
  181. assert.NoError(t, err)
  182. assert.EqualValues(t, 1, total)
  183. }
  184. func TestGetOrgUsersByUserID(t *testing.T) {
  185. assert.NoError(t, unittest.PrepareTestDatabase())
  186. orgUsers, err := organization.GetOrgUsersByUserID(5, &organization.SearchOrganizationsOptions{All: true})
  187. assert.NoError(t, err)
  188. if assert.Len(t, orgUsers, 3) {
  189. assert.Equal(t, organization.OrgUser{
  190. ID: orgUsers[0].ID,
  191. OrgID: 23,
  192. UID: 5,
  193. IsPublic: false,
  194. }, *orgUsers[0])
  195. assert.Equal(t, organization.OrgUser{
  196. ID: orgUsers[1].ID,
  197. OrgID: 6,
  198. UID: 5,
  199. IsPublic: true,
  200. }, *orgUsers[1])
  201. assert.Equal(t, organization.OrgUser{
  202. ID: orgUsers[2].ID,
  203. OrgID: 7,
  204. UID: 5,
  205. IsPublic: false,
  206. }, *orgUsers[2])
  207. }
  208. publicOrgUsers, err := organization.GetOrgUsersByUserID(5, &organization.SearchOrganizationsOptions{All: false})
  209. assert.NoError(t, err)
  210. assert.Len(t, publicOrgUsers, 1)
  211. assert.Equal(t, *orgUsers[1], *publicOrgUsers[0])
  212. orgUsers, err = organization.GetOrgUsersByUserID(1, &organization.SearchOrganizationsOptions{All: true})
  213. assert.NoError(t, err)
  214. assert.Len(t, orgUsers, 0)
  215. }
  216. func TestGetOrgUsersByOrgID(t *testing.T) {
  217. assert.NoError(t, unittest.PrepareTestDatabase())
  218. orgUsers, err := organization.GetOrgUsersByOrgID(db.DefaultContext, &organization.FindOrgMembersOpts{
  219. ListOptions: db.ListOptions{},
  220. OrgID: 3,
  221. PublicOnly: false,
  222. })
  223. assert.NoError(t, err)
  224. if assert.Len(t, orgUsers, 3) {
  225. assert.Equal(t, organization.OrgUser{
  226. ID: orgUsers[0].ID,
  227. OrgID: 3,
  228. UID: 2,
  229. IsPublic: true,
  230. }, *orgUsers[0])
  231. assert.Equal(t, organization.OrgUser{
  232. ID: orgUsers[1].ID,
  233. OrgID: 3,
  234. UID: 4,
  235. IsPublic: false,
  236. }, *orgUsers[1])
  237. assert.Equal(t, organization.OrgUser{
  238. ID: orgUsers[2].ID,
  239. OrgID: 3,
  240. UID: 28,
  241. IsPublic: true,
  242. }, *orgUsers[2])
  243. }
  244. orgUsers, err = organization.GetOrgUsersByOrgID(db.DefaultContext, &organization.FindOrgMembersOpts{
  245. ListOptions: db.ListOptions{},
  246. OrgID: unittest.NonexistentID,
  247. PublicOnly: false,
  248. })
  249. assert.NoError(t, err)
  250. assert.Len(t, orgUsers, 0)
  251. }
  252. func TestChangeOrgUserStatus(t *testing.T) {
  253. assert.NoError(t, unittest.PrepareTestDatabase())
  254. testSuccess := func(orgID, userID int64, public bool) {
  255. assert.NoError(t, organization.ChangeOrgUserStatus(orgID, userID, public))
  256. orgUser := unittest.AssertExistsAndLoadBean(t, &organization.OrgUser{OrgID: orgID, UID: userID})
  257. assert.Equal(t, public, orgUser.IsPublic)
  258. }
  259. testSuccess(3, 2, false)
  260. testSuccess(3, 2, false)
  261. testSuccess(3, 4, true)
  262. assert.NoError(t, organization.ChangeOrgUserStatus(unittest.NonexistentID, unittest.NonexistentID, true))
  263. }
  264. func TestUser_GetUserTeamIDs(t *testing.T) {
  265. assert.NoError(t, unittest.PrepareTestDatabase())
  266. org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
  267. testSuccess := func(userID int64, expected []int64) {
  268. teamIDs, err := org.GetUserTeamIDs(userID)
  269. assert.NoError(t, err)
  270. assert.Equal(t, expected, teamIDs)
  271. }
  272. testSuccess(2, []int64{1, 2, 14})
  273. testSuccess(4, []int64{2})
  274. testSuccess(unittest.NonexistentID, []int64{})
  275. }
  276. func TestAccessibleReposEnv_CountRepos(t *testing.T) {
  277. assert.NoError(t, unittest.PrepareTestDatabase())
  278. org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
  279. testSuccess := func(userID, expectedCount int64) {
  280. env, err := organization.AccessibleReposEnv(db.DefaultContext, org, userID)
  281. assert.NoError(t, err)
  282. count, err := env.CountRepos()
  283. assert.NoError(t, err)
  284. assert.EqualValues(t, expectedCount, count)
  285. }
  286. testSuccess(2, 3)
  287. testSuccess(4, 2)
  288. }
  289. func TestAccessibleReposEnv_RepoIDs(t *testing.T) {
  290. assert.NoError(t, unittest.PrepareTestDatabase())
  291. org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
  292. testSuccess := func(userID, _, pageSize int64, expectedRepoIDs []int64) {
  293. env, err := organization.AccessibleReposEnv(db.DefaultContext, org, userID)
  294. assert.NoError(t, err)
  295. repoIDs, err := env.RepoIDs(1, 100)
  296. assert.NoError(t, err)
  297. assert.Equal(t, expectedRepoIDs, repoIDs)
  298. }
  299. testSuccess(2, 1, 100, []int64{3, 5, 32})
  300. testSuccess(4, 0, 100, []int64{3, 32})
  301. }
  302. func TestAccessibleReposEnv_Repos(t *testing.T) {
  303. assert.NoError(t, unittest.PrepareTestDatabase())
  304. org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
  305. testSuccess := func(userID int64, expectedRepoIDs []int64) {
  306. env, err := organization.AccessibleReposEnv(db.DefaultContext, org, userID)
  307. assert.NoError(t, err)
  308. repos, err := env.Repos(1, 100)
  309. assert.NoError(t, err)
  310. expectedRepos := make(repo_model.RepositoryList, len(expectedRepoIDs))
  311. for i, repoID := range expectedRepoIDs {
  312. expectedRepos[i] = unittest.AssertExistsAndLoadBean(t,
  313. &repo_model.Repository{ID: repoID})
  314. }
  315. assert.Equal(t, expectedRepos, repos)
  316. }
  317. testSuccess(2, []int64{3, 5, 32})
  318. testSuccess(4, []int64{3, 32})
  319. }
  320. func TestAccessibleReposEnv_MirrorRepos(t *testing.T) {
  321. assert.NoError(t, unittest.PrepareTestDatabase())
  322. org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
  323. testSuccess := func(userID int64, expectedRepoIDs []int64) {
  324. env, err := organization.AccessibleReposEnv(db.DefaultContext, org, userID)
  325. assert.NoError(t, err)
  326. repos, err := env.MirrorRepos()
  327. assert.NoError(t, err)
  328. expectedRepos := make(repo_model.RepositoryList, len(expectedRepoIDs))
  329. for i, repoID := range expectedRepoIDs {
  330. expectedRepos[i] = unittest.AssertExistsAndLoadBean(t,
  331. &repo_model.Repository{ID: repoID})
  332. }
  333. assert.Equal(t, expectedRepos, repos)
  334. }
  335. testSuccess(2, []int64{5})
  336. testSuccess(4, []int64{})
  337. }
  338. func TestHasOrgVisibleTypePublic(t *testing.T) {
  339. assert.NoError(t, unittest.PrepareTestDatabase())
  340. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  341. user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3})
  342. const newOrgName = "test-org-public"
  343. org := &organization.Organization{
  344. Name: newOrgName,
  345. Visibility: structs.VisibleTypePublic,
  346. }
  347. unittest.AssertNotExistsBean(t, &user_model.User{Name: org.Name, Type: user_model.UserTypeOrganization})
  348. assert.NoError(t, organization.CreateOrganization(org, owner))
  349. org = unittest.AssertExistsAndLoadBean(t,
  350. &organization.Organization{Name: org.Name, Type: user_model.UserTypeOrganization})
  351. test1 := organization.HasOrgOrUserVisible(db.DefaultContext, org.AsUser(), owner)
  352. test2 := organization.HasOrgOrUserVisible(db.DefaultContext, org.AsUser(), user3)
  353. test3 := organization.HasOrgOrUserVisible(db.DefaultContext, org.AsUser(), nil)
  354. assert.True(t, test1) // owner of org
  355. assert.True(t, test2) // user not a part of org
  356. assert.True(t, test3) // logged out user
  357. }
  358. func TestHasOrgVisibleTypeLimited(t *testing.T) {
  359. assert.NoError(t, unittest.PrepareTestDatabase())
  360. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  361. user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3})
  362. const newOrgName = "test-org-limited"
  363. org := &organization.Organization{
  364. Name: newOrgName,
  365. Visibility: structs.VisibleTypeLimited,
  366. }
  367. unittest.AssertNotExistsBean(t, &user_model.User{Name: org.Name, Type: user_model.UserTypeOrganization})
  368. assert.NoError(t, organization.CreateOrganization(org, owner))
  369. org = unittest.AssertExistsAndLoadBean(t,
  370. &organization.Organization{Name: org.Name, Type: user_model.UserTypeOrganization})
  371. test1 := organization.HasOrgOrUserVisible(db.DefaultContext, org.AsUser(), owner)
  372. test2 := organization.HasOrgOrUserVisible(db.DefaultContext, org.AsUser(), user3)
  373. test3 := organization.HasOrgOrUserVisible(db.DefaultContext, org.AsUser(), nil)
  374. assert.True(t, test1) // owner of org
  375. assert.True(t, test2) // user not a part of org
  376. assert.False(t, test3) // logged out user
  377. }
  378. func TestHasOrgVisibleTypePrivate(t *testing.T) {
  379. assert.NoError(t, unittest.PrepareTestDatabase())
  380. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  381. user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3})
  382. const newOrgName = "test-org-private"
  383. org := &organization.Organization{
  384. Name: newOrgName,
  385. Visibility: structs.VisibleTypePrivate,
  386. }
  387. unittest.AssertNotExistsBean(t, &user_model.User{Name: org.Name, Type: user_model.UserTypeOrganization})
  388. assert.NoError(t, organization.CreateOrganization(org, owner))
  389. org = unittest.AssertExistsAndLoadBean(t,
  390. &organization.Organization{Name: org.Name, Type: user_model.UserTypeOrganization})
  391. test1 := organization.HasOrgOrUserVisible(db.DefaultContext, org.AsUser(), owner)
  392. test2 := organization.HasOrgOrUserVisible(db.DefaultContext, org.AsUser(), user3)
  393. test3 := organization.HasOrgOrUserVisible(db.DefaultContext, org.AsUser(), nil)
  394. assert.True(t, test1) // owner of org
  395. assert.False(t, test2) // user not a part of org
  396. assert.False(t, test3) // logged out user
  397. }
  398. func TestGetUsersWhoCanCreateOrgRepo(t *testing.T) {
  399. assert.NoError(t, unittest.PrepareTestDatabase())
  400. users, err := organization.GetUsersWhoCanCreateOrgRepo(db.DefaultContext, 3)
  401. assert.NoError(t, err)
  402. assert.Len(t, users, 2)
  403. var ids []int64
  404. for i := range users {
  405. ids = append(ids, users[i].ID)
  406. }
  407. assert.ElementsMatch(t, ids, []int64{2, 28})
  408. users, err = organization.GetUsersWhoCanCreateOrgRepo(db.DefaultContext, 7)
  409. assert.NoError(t, err)
  410. assert.Len(t, users, 1)
  411. assert.NotNil(t, users[5])
  412. }
  413. func TestUser_RemoveOrgRepo(t *testing.T) {
  414. assert.NoError(t, unittest.PrepareTestDatabase())
  415. org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
  416. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: org.ID})
  417. // remove a repo that does belong to org
  418. unittest.AssertExistsAndLoadBean(t, &organization.TeamRepo{RepoID: repo.ID, OrgID: org.ID})
  419. assert.NoError(t, organization.RemoveOrgRepo(db.DefaultContext, org.ID, repo.ID))
  420. unittest.AssertNotExistsBean(t, &organization.TeamRepo{RepoID: repo.ID, OrgID: org.ID})
  421. unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: repo.ID}) // repo should still exist
  422. // remove a repo that does not belong to org
  423. assert.NoError(t, organization.RemoveOrgRepo(db.DefaultContext, org.ID, repo.ID))
  424. unittest.AssertNotExistsBean(t, &organization.TeamRepo{RepoID: repo.ID, OrgID: org.ID})
  425. assert.NoError(t, organization.RemoveOrgRepo(db.DefaultContext, org.ID, unittest.NonexistentID))
  426. unittest.CheckConsistencyFor(t,
  427. &user_model.User{ID: org.ID},
  428. &organization.Team{OrgID: org.ID},
  429. &repo_model.Repository{ID: repo.ID})
  430. }
  431. func TestCreateOrganization(t *testing.T) {
  432. // successful creation of org
  433. assert.NoError(t, unittest.PrepareTestDatabase())
  434. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  435. const newOrgName = "neworg"
  436. org := &organization.Organization{
  437. Name: newOrgName,
  438. }
  439. unittest.AssertNotExistsBean(t, &user_model.User{Name: newOrgName, Type: user_model.UserTypeOrganization})
  440. assert.NoError(t, organization.CreateOrganization(org, owner))
  441. org = unittest.AssertExistsAndLoadBean(t,
  442. &organization.Organization{Name: newOrgName, Type: user_model.UserTypeOrganization})
  443. ownerTeam := unittest.AssertExistsAndLoadBean(t,
  444. &organization.Team{Name: organization.OwnerTeamName, OrgID: org.ID})
  445. unittest.AssertExistsAndLoadBean(t, &organization.TeamUser{UID: owner.ID, TeamID: ownerTeam.ID})
  446. unittest.CheckConsistencyFor(t, &user_model.User{}, &organization.Team{})
  447. }
  448. func TestCreateOrganization2(t *testing.T) {
  449. // unauthorized creation of org
  450. assert.NoError(t, unittest.PrepareTestDatabase())
  451. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5})
  452. const newOrgName = "neworg"
  453. org := &organization.Organization{
  454. Name: newOrgName,
  455. }
  456. unittest.AssertNotExistsBean(t, &organization.Organization{Name: newOrgName, Type: user_model.UserTypeOrganization})
  457. err := organization.CreateOrganization(org, owner)
  458. assert.Error(t, err)
  459. assert.True(t, organization.IsErrUserNotAllowedCreateOrg(err))
  460. unittest.AssertNotExistsBean(t, &organization.Organization{Name: newOrgName, Type: user_model.UserTypeOrganization})
  461. unittest.CheckConsistencyFor(t, &organization.Organization{}, &organization.Team{})
  462. }
  463. func TestCreateOrganization3(t *testing.T) {
  464. // create org with same name as existent org
  465. assert.NoError(t, unittest.PrepareTestDatabase())
  466. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  467. org := &organization.Organization{Name: "user3"} // should already exist
  468. unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: org.Name}) // sanity check
  469. err := organization.CreateOrganization(org, owner)
  470. assert.Error(t, err)
  471. assert.True(t, user_model.IsErrUserAlreadyExist(err))
  472. unittest.CheckConsistencyFor(t, &user_model.User{}, &organization.Team{})
  473. }
  474. func TestCreateOrganization4(t *testing.T) {
  475. // create org with unusable name
  476. assert.NoError(t, unittest.PrepareTestDatabase())
  477. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  478. err := organization.CreateOrganization(&organization.Organization{Name: "assets"}, owner)
  479. assert.Error(t, err)
  480. assert.True(t, db.IsErrNameReserved(err))
  481. unittest.CheckConsistencyFor(t, &organization.Organization{}, &organization.Team{})
  482. }