gitea源码

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