PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/resources/com/onresolve/jira/groovy/test/TestChangeFilterOwnership.groovy

https://bitbucket.org/sorin/jira-plugin-intellij
Groovy | 267 lines | 211 code | 46 blank | 10 comment | 0 complexity | bb57aff8fd8faa886ffd6924436e1f9e MD5 | raw file
  1. package com.onresolve.jira.groovy.test
  2. import org.junit.Before
  3. import org.apache.log4j.Category
  4. import org.junit.Test
  5. import com.atlassian.jira.bc.JiraServiceContextImpl
  6. import com.atlassian.jira.bc.JiraServiceContext
  7. import com.atlassian.jira.ComponentManager
  8. import com.atlassian.jira.bc.portal.PortalPageService
  9. import com.atlassian.jira.portal.PortalPage
  10. import com.atlassian.jira.sharing.SharedEntity.SharePermissions
  11. import org.junit.After
  12. import com.onresolve.jira.groovy.canned.admin.ChangeSharedEntityOwnership
  13. import com.atlassian.jira.portal.PortalPageManager
  14. import static junit.framework.Assert.*
  15. import com.atlassian.jira.portal.PortletConfigurationManager
  16. import com.atlassian.gadgets.dashboard.Color
  17. import com.atlassian.jira.issue.search.SearchRequestManager
  18. import com.atlassian.jira.issue.search.SearchRequest
  19. import com.atlassian.jira.bc.filter.SearchRequestService
  20. import com.atlassian.jira.jql.builder.JqlQueryBuilder
  21. import com.atlassian.query.Query
  22. import com.atlassian.jira.sharing.type.ShareType
  23. import com.atlassian.jira.sharing.SharePermissionImpl
  24. import com.atlassian.jira.user.util.UserUtil
  25. import com.atlassian.crowd.embedded.api.User
  26. import com.onresolve.jira.groovy.GroovyRunner
  27. class TestChangeFilterOwnership extends BaseSubTaskTest {
  28. Category log = Category.getInstance(this.class)
  29. ComponentManager componentManager = ComponentManager.getInstance()
  30. PortalPageService portalPageService = componentManager.getPortalPageService()
  31. PortalPageManager portalPageManager = componentManager.getPortalPageManager()
  32. UserUtil userUtil = ComponentManager.getInstance().getUserUtil()
  33. PortletConfigurationManager pcMgr = ComponentManager.getComponentInstanceOfType(PortletConfigurationManager.class) as PortletConfigurationManager
  34. GroovyRunner runner = new GroovyRunner()
  35. String sourceUserId
  36. String targetUserId
  37. JiraServiceContext sourceUserServiceCtx
  38. JiraServiceContext targetUserServiceCtx
  39. TestChangeFilterOwnership() {
  40. // def gcl = this.class.classLoader.parent
  41. // gcl.clearCache()
  42. }
  43. @Before
  44. public void setUp() {
  45. sourceUserId = "admin"
  46. targetUserId = "anuser"
  47. sourceUserServiceCtx = new JiraServiceContextImpl(userUtil.getUser(sourceUserId));
  48. targetUserServiceCtx = new JiraServiceContextImpl(userUtil.getUser(targetUserId));
  49. }
  50. @After
  51. public void tearDown() {
  52. // delete this dash
  53. }
  54. // @Test
  55. public void testSimpleChangeOwnership() {
  56. PortalPage page = createDash()
  57. Map<String, Object> inputs = [
  58. (ChangeSharedEntityOwnership.FIELD_FROM_USER_ID) : sourceUserId,
  59. (ChangeSharedEntityOwnership.FIELD_TO_USER_ID) : targetUserId,
  60. (ChangeSharedEntityOwnership.FIELD_DASHBOARD_IDS) : [page.id]
  61. ]
  62. Map params = new ChangeSharedEntityOwnership().doScript(inputs)
  63. log.debug(params)
  64. page = portalPageService.getPortalPage(targetUserServiceCtx, page.id)
  65. assertEquals(targetUserId, page.ownerUserName)
  66. deleteDash(targetUserServiceCtx, page)
  67. }
  68. // @Test
  69. public void testGetExistingDashboard() {
  70. PortalPage page = portalPageService.getPortalPage(sourceUserServiceCtx, 10052)
  71. log.debug portalPageService.getPortletConfigurations(sourceUserServiceCtx, page.id)
  72. // page = portalPageService.getSystemDefaultPortalPage()
  73. }
  74. @Test
  75. public void testChangeOwnershipWithFilters() {
  76. PortalPage page = createDash()
  77. // create a couple of filters
  78. SearchRequest sr1 = createFilter()
  79. SearchRequest sr2 = createFilter()
  80. log.debug(sr1)
  81. addGadgetsToPage(page, sr1, sr2)
  82. Map<String, Object> inputs = [
  83. (ChangeSharedEntityOwnership.FIELD_FROM_USER_ID) : sourceUserId,
  84. (ChangeSharedEntityOwnership.FIELD_TO_USER_ID) : targetUserId,
  85. (ChangeSharedEntityOwnership.FIELD_DASHBOARD_IDS) : [page.id]
  86. ]
  87. Map params = new ChangeSharedEntityOwnership().doScript(inputs)
  88. log.debug(params)
  89. page = portalPageService.getPortalPage(targetUserServiceCtx, page.id)
  90. assertNotNull(page)
  91. assertEquals(targetUserId, page.ownerUserName)
  92. sr1 = searchRequestService.getFilter(targetUserServiceCtx, sr1.id)
  93. sr2 = searchRequestService.getFilter(targetUserServiceCtx, sr2.id)
  94. assertEquals(targetUserId, sr1.ownerUserName)
  95. assertEquals(targetUserId, sr2.ownerUserName)
  96. deleteDash(targetUserServiceCtx, page)
  97. deleteFilter(targetUserServiceCtx, sr1)
  98. deleteFilter(targetUserServiceCtx, sr2)
  99. }
  100. @Test
  101. public void testChangeOwnershipWithFiltersSharedAndAlreadyOwned() {
  102. PortalPage page = createDash()
  103. // make one filter shared already and visible to the target
  104. // and one filter already owned by the target and shared to the source
  105. // and check the case where one filter is not owned by the source user - needs to be shared globally if not already
  106. SearchRequest sr1 = createFilter()
  107. sr1.setPermissions(SharePermissions.GLOBAL)
  108. searchRequestService.validateFilterForUpdate(sourceUserServiceCtx, sr1)
  109. assertFalse(sourceUserServiceCtx.errorCollection.hasAnyErrors())
  110. searchRequestService.updateFilter(sourceUserServiceCtx, sr1)
  111. SearchRequest sr2 = createFilter()
  112. SharePermissionImpl share = new SharePermissionImpl((new ShareType.Name("project")), "10010", null)
  113. SharePermissionImpl shareGroup = new SharePermissionImpl((new ShareType.Name("group")), "jira-users", null)
  114. sr2.setPermissions(new SharePermissions(new HashSet([share, shareGroup])))
  115. searchRequestService.validateFilterForUpdate(sourceUserServiceCtx, sr2)
  116. log.debug(sourceUserServiceCtx.errorCollection)
  117. searchRequestService.updateFilter(sourceUserServiceCtx, sr2)
  118. addGadgetsToPage(page, sr1, sr2)
  119. Map<String, Object> inputs = [
  120. (ChangeSharedEntityOwnership.FIELD_FROM_USER_ID) : sourceUserId,
  121. (ChangeSharedEntityOwnership.FIELD_TO_USER_ID) : targetUserId,
  122. (ChangeSharedEntityOwnership.FIELD_DASHBOARD_IDS) : [page.id]
  123. ]
  124. Map params = new ChangeSharedEntityOwnership().doScript(inputs)
  125. log.debug(params)
  126. page = portalPageService.getPortalPage(targetUserServiceCtx, page.id)
  127. assertNotNull(page)
  128. assertEquals(targetUserId, page.ownerUserName)
  129. sr1 = searchRequestService.getFilter(targetUserServiceCtx, sr1.id)
  130. sr2 = searchRequestService.getFilter(targetUserServiceCtx, sr2.id)
  131. assertEquals(targetUserId, sr1.ownerUserName)
  132. assertEquals(targetUserId, sr2.ownerUserName)
  133. deleteDash(targetUserServiceCtx, page)
  134. deleteFilter(targetUserServiceCtx, sr1)
  135. deleteFilter(targetUserServiceCtx, sr2)
  136. }
  137. @Test
  138. public void testChangeOwnershipWithFiltersOwnedByAnother() {
  139. PortalPage page = createDash()
  140. SearchRequest sr1 = createFilter()
  141. sr1.setPermissions(SharePermissions.GLOBAL)
  142. searchRequestService.validateFilterForUpdate(sourceUserServiceCtx, sr1)
  143. assertFalse(sourceUserServiceCtx.errorCollection.hasAnyErrors())
  144. searchRequestService.updateFilter(sourceUserServiceCtx, sr1)
  145. User userXyz = userUtil.getUser("xyz")
  146. JiraServiceContextImpl otherUserCtx = new JiraServiceContextImpl(userXyz)
  147. SearchRequest sr2 = createFilterAs(otherUserCtx)
  148. SharePermissionImpl share = new SharePermissionImpl((new ShareType.Name("project")), "10010", null)
  149. SharePermissionImpl shareGroup = new SharePermissionImpl((new ShareType.Name("group")), "jira-users", null)
  150. sr2.setPermissions(new SharePermissions(new HashSet([share, shareGroup])))
  151. searchRequestService.validateFilterForUpdate(otherUserCtx, sr2)
  152. log.debug(otherUserCtx.errorCollection)
  153. assertFalse(otherUserCtx.errorCollection.hasAnyErrors())
  154. searchRequestService.updateFilter(otherUserCtx, sr2)
  155. addGadgetsToPage(page, sr1, sr2)
  156. Map<String, Object> inputs = [
  157. (ChangeSharedEntityOwnership.FIELD_FROM_USER_ID) : sourceUserId,
  158. (ChangeSharedEntityOwnership.FIELD_TO_USER_ID) : targetUserId,
  159. (ChangeSharedEntityOwnership.FIELD_DASHBOARD_IDS) : [page.id]
  160. ]
  161. Map params = new ChangeSharedEntityOwnership().doScript(inputs)
  162. log.debug(params)
  163. page = portalPageService.getPortalPage(targetUserServiceCtx, page.id)
  164. assertNotNull(page)
  165. assertEquals(targetUserId, page.ownerUserName)
  166. sr1 = searchRequestService.getFilter(targetUserServiceCtx, sr1.id)
  167. sr2 = searchRequestService.getFilter(otherUserCtx, sr2.id)
  168. assertEquals(targetUserId, sr1.ownerUserName)
  169. assertEquals(otherUserCtx.user.name, sr2.ownerUserName)
  170. deleteDash(targetUserServiceCtx, page)
  171. deleteFilter(targetUserServiceCtx, sr1)
  172. deleteFilter(otherUserCtx, sr2)
  173. }
  174. private def addGadgetsToPage(PortalPage page, SearchRequest sr1, SearchRequest sr2) {
  175. log.debug portalPageService.getPortletConfigurations(sourceUserServiceCtx, page.id)
  176. pcMgr.addGadget(page.id, 0, 0, new URI('rest/gadgets/1.0/g/com.atlassian.jira.gadgets:assigned-to-me-gadget/gadgets/assigned-to-me-gadget.xml'),
  177. Color.color1, [num: "10", isConfigured: "true", refresh: "false", columnNames: "status|summary"]
  178. )
  179. pcMgr.addGadget(page.id, 0, 0, new URI('rest/gadgets/1.0/g/com.atlassian.jira.gadgets:filter-results-gadget/gadgets/filter-results-gadget.xml'),
  180. Color.color2, [num: "10", filterId: "filter-" + sr1.id as String, isConfigured: "true", isPopup: "false", refresh: "false", columnNames: "--Default--"]
  181. )
  182. pcMgr.addGadget(page.id, 1, 0, new URI('rest/gadgets/1.0/g/com.atlassian.jira.gadgets:pie-chart-gadget/gadgets/piechart-gadget.xml'),
  183. Color.color2, [
  184. statType: "assignees",
  185. projectOrFilterId: "filter-" + sr2.id as String,
  186. isConfigured: "true",
  187. isPopup: "false",
  188. refresh: "false",
  189. columnNames: "--Default--"
  190. ]
  191. )
  192. }
  193. private SearchRequest createFilter() {
  194. createFilterAs(sourceUserServiceCtx)
  195. }
  196. private SearchRequest createFilterAs(JiraServiceContext ctx) {
  197. JqlQueryBuilder jqlQueryBuilder = JqlQueryBuilder.newBuilder()
  198. Query query = jqlQueryBuilder.where().reporterIsCurrentUser().buildQuery()
  199. SearchRequest sr = new SearchRequest(query)
  200. sr.setName("My reporter issues + ${new Random().nextInt().toString()}")
  201. def serviceUser = ctx.user ?: ctx.loggedInUser
  202. sr.setOwnerUserName(serviceUser.getName())
  203. searchRequestService.validateFilterForCreate(ctx, sr)
  204. assertFalse(ctx.errorCollection.hasAnyErrors())
  205. sr = searchRequestService.createFilter(ctx, sr, true)
  206. return sr
  207. }
  208. private def deleteDash(JiraServiceContext ctx, PortalPage page) {
  209. portalPageService.validateForDelete(ctx, page.id)
  210. assertFalse(ctx.getErrorCollection().hasAnyErrors())
  211. portalPageService.deletePortalPage(ctx, page.id)
  212. }
  213. private PortalPage createDash() {
  214. PortalPage page = PortalPage.name("dash for test").owner(sourceUserId).description("desc").build()
  215. portalPageService.validateForCreate(sourceUserServiceCtx, page)
  216. log.debug(sourceUserServiceCtx.getErrorCollection())
  217. assertFalse(sourceUserServiceCtx.getErrorCollection().hasAnyErrors())
  218. page = portalPageService.createPortalPage(sourceUserServiceCtx, page, true)
  219. return page
  220. }
  221. }