/src/main/resources/com/onresolve/jira/groovy/test/TestChangeFilterOwnership.groovy
Groovy | 267 lines | 211 code | 46 blank | 10 comment | 0 complexity | bb57aff8fd8faa886ffd6924436e1f9e MD5 | raw file
- package com.onresolve.jira.groovy.test
-
- import org.junit.Before
- import org.apache.log4j.Category
- import org.junit.Test
- import com.atlassian.jira.bc.JiraServiceContextImpl
- import com.atlassian.jira.bc.JiraServiceContext
- import com.atlassian.jira.ComponentManager
- import com.atlassian.jira.bc.portal.PortalPageService
- import com.atlassian.jira.portal.PortalPage
- import com.atlassian.jira.sharing.SharedEntity.SharePermissions
- import org.junit.After
- import com.onresolve.jira.groovy.canned.admin.ChangeSharedEntityOwnership
- import com.atlassian.jira.portal.PortalPageManager
- import static junit.framework.Assert.*
- import com.atlassian.jira.portal.PortletConfigurationManager
- import com.atlassian.gadgets.dashboard.Color
- import com.atlassian.jira.issue.search.SearchRequestManager
- import com.atlassian.jira.issue.search.SearchRequest
- import com.atlassian.jira.bc.filter.SearchRequestService
-
- import com.atlassian.jira.jql.builder.JqlQueryBuilder
- import com.atlassian.query.Query
-
- import com.atlassian.jira.sharing.type.ShareType
- import com.atlassian.jira.sharing.SharePermissionImpl
- import com.atlassian.jira.user.util.UserUtil
- import com.atlassian.crowd.embedded.api.User
- import com.onresolve.jira.groovy.GroovyRunner
-
- class TestChangeFilterOwnership extends BaseSubTaskTest {
-
- Category log = Category.getInstance(this.class)
- ComponentManager componentManager = ComponentManager.getInstance()
- PortalPageService portalPageService = componentManager.getPortalPageService()
- PortalPageManager portalPageManager = componentManager.getPortalPageManager()
- UserUtil userUtil = ComponentManager.getInstance().getUserUtil()
- PortletConfigurationManager pcMgr = ComponentManager.getComponentInstanceOfType(PortletConfigurationManager.class) as PortletConfigurationManager
- GroovyRunner runner = new GroovyRunner()
-
- String sourceUserId
- String targetUserId
- JiraServiceContext sourceUserServiceCtx
- JiraServiceContext targetUserServiceCtx
-
- TestChangeFilterOwnership() {
- // def gcl = this.class.classLoader.parent
- // gcl.clearCache()
- }
-
- @Before
- public void setUp() {
- sourceUserId = "admin"
- targetUserId = "anuser"
- sourceUserServiceCtx = new JiraServiceContextImpl(userUtil.getUser(sourceUserId));
- targetUserServiceCtx = new JiraServiceContextImpl(userUtil.getUser(targetUserId));
-
- }
-
- @After
- public void tearDown() {
- // delete this dash
- }
-
- // @Test
- public void testSimpleChangeOwnership() {
- PortalPage page = createDash()
-
- Map<String, Object> inputs = [
- (ChangeSharedEntityOwnership.FIELD_FROM_USER_ID) : sourceUserId,
- (ChangeSharedEntityOwnership.FIELD_TO_USER_ID) : targetUserId,
- (ChangeSharedEntityOwnership.FIELD_DASHBOARD_IDS) : [page.id]
- ]
-
- Map params = new ChangeSharedEntityOwnership().doScript(inputs)
- log.debug(params)
-
- page = portalPageService.getPortalPage(targetUserServiceCtx, page.id)
- assertEquals(targetUserId, page.ownerUserName)
-
- deleteDash(targetUserServiceCtx, page)
- }
-
- // @Test
- public void testGetExistingDashboard() {
- PortalPage page = portalPageService.getPortalPage(sourceUserServiceCtx, 10052)
- log.debug portalPageService.getPortletConfigurations(sourceUserServiceCtx, page.id)
- // page = portalPageService.getSystemDefaultPortalPage()
- }
-
- @Test
- public void testChangeOwnershipWithFilters() {
- PortalPage page = createDash()
-
- // create a couple of filters
- SearchRequest sr1 = createFilter()
- SearchRequest sr2 = createFilter()
- log.debug(sr1)
-
- addGadgetsToPage(page, sr1, sr2)
-
- Map<String, Object> inputs = [
- (ChangeSharedEntityOwnership.FIELD_FROM_USER_ID) : sourceUserId,
- (ChangeSharedEntityOwnership.FIELD_TO_USER_ID) : targetUserId,
- (ChangeSharedEntityOwnership.FIELD_DASHBOARD_IDS) : [page.id]
- ]
-
- Map params = new ChangeSharedEntityOwnership().doScript(inputs)
- log.debug(params)
-
- page = portalPageService.getPortalPage(targetUserServiceCtx, page.id)
- assertNotNull(page)
- assertEquals(targetUserId, page.ownerUserName)
- sr1 = searchRequestService.getFilter(targetUserServiceCtx, sr1.id)
- sr2 = searchRequestService.getFilter(targetUserServiceCtx, sr2.id)
- assertEquals(targetUserId, sr1.ownerUserName)
- assertEquals(targetUserId, sr2.ownerUserName)
-
- deleteDash(targetUserServiceCtx, page)
- deleteFilter(targetUserServiceCtx, sr1)
- deleteFilter(targetUserServiceCtx, sr2)
- }
-
- @Test
- public void testChangeOwnershipWithFiltersSharedAndAlreadyOwned() {
- PortalPage page = createDash()
-
- // make one filter shared already and visible to the target
- // and one filter already owned by the target and shared to the source
- // and check the case where one filter is not owned by the source user - needs to be shared globally if not already
- SearchRequest sr1 = createFilter()
- sr1.setPermissions(SharePermissions.GLOBAL)
- searchRequestService.validateFilterForUpdate(sourceUserServiceCtx, sr1)
- assertFalse(sourceUserServiceCtx.errorCollection.hasAnyErrors())
- searchRequestService.updateFilter(sourceUserServiceCtx, sr1)
-
- SearchRequest sr2 = createFilter()
- SharePermissionImpl share = new SharePermissionImpl((new ShareType.Name("project")), "10010", null)
- SharePermissionImpl shareGroup = new SharePermissionImpl((new ShareType.Name("group")), "jira-users", null)
- sr2.setPermissions(new SharePermissions(new HashSet([share, shareGroup])))
- searchRequestService.validateFilterForUpdate(sourceUserServiceCtx, sr2)
- log.debug(sourceUserServiceCtx.errorCollection)
- searchRequestService.updateFilter(sourceUserServiceCtx, sr2)
-
- addGadgetsToPage(page, sr1, sr2)
-
- Map<String, Object> inputs = [
- (ChangeSharedEntityOwnership.FIELD_FROM_USER_ID) : sourceUserId,
- (ChangeSharedEntityOwnership.FIELD_TO_USER_ID) : targetUserId,
- (ChangeSharedEntityOwnership.FIELD_DASHBOARD_IDS) : [page.id]
- ]
-
- Map params = new ChangeSharedEntityOwnership().doScript(inputs)
- log.debug(params)
-
- page = portalPageService.getPortalPage(targetUserServiceCtx, page.id)
- assertNotNull(page)
- assertEquals(targetUserId, page.ownerUserName)
- sr1 = searchRequestService.getFilter(targetUserServiceCtx, sr1.id)
- sr2 = searchRequestService.getFilter(targetUserServiceCtx, sr2.id)
- assertEquals(targetUserId, sr1.ownerUserName)
- assertEquals(targetUserId, sr2.ownerUserName)
-
- deleteDash(targetUserServiceCtx, page)
- deleteFilter(targetUserServiceCtx, sr1)
- deleteFilter(targetUserServiceCtx, sr2)
- }
-
- @Test
- public void testChangeOwnershipWithFiltersOwnedByAnother() {
- PortalPage page = createDash()
- SearchRequest sr1 = createFilter()
- sr1.setPermissions(SharePermissions.GLOBAL)
- searchRequestService.validateFilterForUpdate(sourceUserServiceCtx, sr1)
- assertFalse(sourceUserServiceCtx.errorCollection.hasAnyErrors())
- searchRequestService.updateFilter(sourceUserServiceCtx, sr1)
-
- User userXyz = userUtil.getUser("xyz")
- JiraServiceContextImpl otherUserCtx = new JiraServiceContextImpl(userXyz)
- SearchRequest sr2 = createFilterAs(otherUserCtx)
- SharePermissionImpl share = new SharePermissionImpl((new ShareType.Name("project")), "10010", null)
- SharePermissionImpl shareGroup = new SharePermissionImpl((new ShareType.Name("group")), "jira-users", null)
- sr2.setPermissions(new SharePermissions(new HashSet([share, shareGroup])))
- searchRequestService.validateFilterForUpdate(otherUserCtx, sr2)
- log.debug(otherUserCtx.errorCollection)
- assertFalse(otherUserCtx.errorCollection.hasAnyErrors())
- searchRequestService.updateFilter(otherUserCtx, sr2)
-
- addGadgetsToPage(page, sr1, sr2)
-
- Map<String, Object> inputs = [
- (ChangeSharedEntityOwnership.FIELD_FROM_USER_ID) : sourceUserId,
- (ChangeSharedEntityOwnership.FIELD_TO_USER_ID) : targetUserId,
- (ChangeSharedEntityOwnership.FIELD_DASHBOARD_IDS) : [page.id]
- ]
-
- Map params = new ChangeSharedEntityOwnership().doScript(inputs)
- log.debug(params)
-
- page = portalPageService.getPortalPage(targetUserServiceCtx, page.id)
- assertNotNull(page)
- assertEquals(targetUserId, page.ownerUserName)
- sr1 = searchRequestService.getFilter(targetUserServiceCtx, sr1.id)
- sr2 = searchRequestService.getFilter(otherUserCtx, sr2.id)
- assertEquals(targetUserId, sr1.ownerUserName)
- assertEquals(otherUserCtx.user.name, sr2.ownerUserName)
-
- deleteDash(targetUserServiceCtx, page)
- deleteFilter(targetUserServiceCtx, sr1)
- deleteFilter(otherUserCtx, sr2)
- }
-
- private def addGadgetsToPage(PortalPage page, SearchRequest sr1, SearchRequest sr2) {
- log.debug portalPageService.getPortletConfigurations(sourceUserServiceCtx, page.id)
- 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'),
- Color.color1, [num: "10", isConfigured: "true", refresh: "false", columnNames: "status|summary"]
- )
-
- 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'),
- Color.color2, [num: "10", filterId: "filter-" + sr1.id as String, isConfigured: "true", isPopup: "false", refresh: "false", columnNames: "--Default--"]
- )
-
- pcMgr.addGadget(page.id, 1, 0, new URI('rest/gadgets/1.0/g/com.atlassian.jira.gadgets:pie-chart-gadget/gadgets/piechart-gadget.xml'),
- Color.color2, [
- statType: "assignees",
- projectOrFilterId: "filter-" + sr2.id as String,
- isConfigured: "true",
- isPopup: "false",
- refresh: "false",
- columnNames: "--Default--"
- ]
- )
- }
-
- private SearchRequest createFilter() {
- createFilterAs(sourceUserServiceCtx)
- }
-
- private SearchRequest createFilterAs(JiraServiceContext ctx) {
- JqlQueryBuilder jqlQueryBuilder = JqlQueryBuilder.newBuilder()
- Query query = jqlQueryBuilder.where().reporterIsCurrentUser().buildQuery()
- SearchRequest sr = new SearchRequest(query)
- sr.setName("My reporter issues + ${new Random().nextInt().toString()}")
-
- def serviceUser = ctx.user ?: ctx.loggedInUser
- sr.setOwnerUserName(serviceUser.getName())
- searchRequestService.validateFilterForCreate(ctx, sr)
- assertFalse(ctx.errorCollection.hasAnyErrors())
- sr = searchRequestService.createFilter(ctx, sr, true)
- return sr
- }
-
- private def deleteDash(JiraServiceContext ctx, PortalPage page) {
- portalPageService.validateForDelete(ctx, page.id)
- assertFalse(ctx.getErrorCollection().hasAnyErrors())
- portalPageService.deletePortalPage(ctx, page.id)
- }
-
- private PortalPage createDash() {
- PortalPage page = PortalPage.name("dash for test").owner(sourceUserId).description("desc").build()
- portalPageService.validateForCreate(sourceUserServiceCtx, page)
- log.debug(sourceUserServiceCtx.getErrorCollection())
- assertFalse(sourceUserServiceCtx.getErrorCollection().hasAnyErrors())
- page = portalPageService.createPortalPage(sourceUserServiceCtx, page, true)
- return page
- }
- }