Skip to content
Permalink
Browse files
Merged in feature/shibui-1740 (pull request #503)
Feature/shibui 1740

Approved-by: Dmitriy Kopylenko
Approved-by: Bill Smith
  • Loading branch information
Jonathan Johnson committed Aug 11, 2021
2 parents 37bdabc + 032cdb8 commit 0888d2416ca9427e2a0ee7c447a15bc1e6735bc4
Showing with 6,904 additions and 2,332 deletions.
  1. +20 −15 ...internet2/tier/shibboleth/admin/ui/repository/envers/EntityDescriptorEnversVersioningTests.groovy
  2. +10 −4 ...nternet2/tier/shibboleth/admin/ui/service/envers/EnversEntityDescriptorVersionServiceTests.groovy
  3. +9 −5 backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy
  4. +303 −0 backend/src/integration/resources/SHIBUI-1740-1.side
  5. +310 −0 backend/src/integration/resources/SHIBUI-1740-2.side
  6. +384 −0 backend/src/integration/resources/SHIBUI-1740-3.side
  7. +585 −0 backend/src/integration/resources/SHIBUI-1740-4.side
  8. +72 −39 backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/configuration/DevConfig.groovy
  9. +7 −2 backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/UserBootstrap.groovy
  10. +66 −40 ...d/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/CoreShibUiConfiguration.java
  11. +67 −0 ...du/internet2/tier/shibboleth/admin/ui/configuration/auto/MigrationTasksContextLoadedListener.java
  12. +9 −4 ...nd/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/auto/WebSecurityConfig.java
  13. +42 −16 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/DangerController.java
  14. +87 −230 ...d/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorController.java
  15. +44 −0 ...edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerExceptionHandler.java
  16. +20 −17 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/AbstractAuditable.java
  17. +143 −122 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/EntityDescriptor.java
  18. +124 −118 ...n/java/edu/internet2/tier/shibboleth/admin/ui/domain/frontend/EntityDescriptorRepresentation.java
  19. +8 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/exception/EntityIdExistsException.java
  20. +7 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/exception/EntityNotFoundException.java
  21. +11 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/exception/ForbiddenException.java
  22. +10 −2 ...d/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/EntityDescriptorRepository.java
  23. +71 −0 ...end/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/controller/GroupController.java
  24. +46 −0 ...a/edu/internet2/tier/shibboleth/admin/ui/security/controller/GroupControllerExceptionHandler.java
  25. +54 −39 ...end/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersController.java
  26. +7 −0 ...src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/exception/GroupDeleteException.java
  27. +7 −0 .../java/edu/internet2/tier/shibboleth/admin/ui/security/exception/GroupExistsConflictException.java
  28. +7 −0 ...in/java/edu/internet2/tier/shibboleth/admin/ui/security/exception/OwnershipConflictException.java
  29. +78 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Group.java
  30. +13 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Ownable.java
  31. +5 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/OwnableType.java
  32. +13 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Owner.java
  33. +5 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/OwnerType.java
  34. +31 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Ownership.java
  35. +1 −1 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Role.java
  36. +103 −24 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/User.java
  37. +42 −0 ...va/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/GroupUpdatedEntityListener.java
  38. +10 −0 ...c/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/ILazyLoaderHelper.java
  39. +52 −0 ...ava/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/UserUpdatedEntityListener.java
  40. +18 −0 ...nd/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/GroupsRepository.java
  41. +66 −0 ...src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/OwnershipRepository.java
  42. +0 −1 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/repository/UserRepository.java
  43. +89 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceImpl.java
  44. +25 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/IGroupService.java
  45. +7 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/UserAccess.java
  46. +164 −36 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/UserService.java
  47. +66 −11 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EntityDescriptorService.java
  48. +3 −2 .../src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EntityDescriptorVersionService.java
  49. +12 −4 ...ain/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionService.java
  50. +125 −427 .../src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImpl.java
  51. +378 −0 backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/EntityDescriptorConversionUtils.java
  52. +1 −1 backend/src/main/resources/application.properties
  53. +17 −1 backend/src/main/resources/i18n/messages.properties
  54. +13 −0 ...end/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/configuration/TestConfiguration.groovy
  55. +25 −16 .../src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntitiesControllerTests.groovy
  56. +471 −699 ...t/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy
  57. +16 −0 backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/EntityDescriptorTest.groovy
  58. +1 −1 ...ternet2/tier/shibboleth/admin/ui/repository/CustomEntityAttributeDefinitionRepositoryTests.groovy
  59. +63 −2 ...st/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/EntityDescriptorRepositoryTest.groovy
  60. +2 −12 ...t/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/MetadataResolverRepositoryTests.groovy
  61. +19 −14 .../edu/internet2/tier/shibboleth/admin/ui/scheduled/EntityDescriptorFilesScheduledTasksTests.groovy
  62. +257 −0 ...du/internet2/tier/shibboleth/admin/ui/security/controller/GroupsControllerIntegrationTests.groovy
  63. +258 −110 ...edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersControllerIntegrationTests.groovy
  64. +230 −0 ...st/groovy/edu/internet2/tier/shibboleth/admin/ui/security/repository/GroupsRepositoryTests.groovy
  65. +273 −0 ...groovy/edu/internet2/tier/shibboleth/admin/ui/security/repository/OwnershipRepositoryTests.groovy
  66. +21 −0 ...test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceForTesting.groovy
  67. +283 −0 ...d/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/service/UserServiceTests.groovy
  68. +1 −8 ...roovy/edu/internet2/tier/shibboleth/admin/ui/security/springsecurity/AdminUserServiceTests.groovy
  69. +16 −12 ...d/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/AuxiliaryIntegrationTests.groovy
  70. +16 −1 ...edu/internet2/tier/shibboleth/admin/ui/service/IncommonJPAMetadataResolverServiceImplTests.groovy
  71. +16 −152 .../groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImplTests.groovy
  72. +131 −0 ...groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImplTests2.groovy
  73. +16 −0 .../groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy
  74. +15 −2 backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/UserBootstrapTests.groovy
  75. +55 −70 ...aryJPAEntityDescriptorServiceImplTests.groovy → util/EntityDescriptorConversionUtilsTests.groovy}
  76. +22 −0 ui/public/assets/schema/groups/group.json
  77. +3 −0 ui/public/group.json
  78. +3 −1 ui/src/app/App.js
  79. +32 −0 ui/src/app/admin/Groups.js
  80. +68 −0 ui/src/app/admin/component/GroupForm.js
  81. +71 −34 ui/src/app/admin/component/UserMaintenance.js
  82. +91 −0 ui/src/app/admin/container/EditGroup.js
  83. +82 −0 ui/src/app/admin/container/GroupsList.js
  84. +79 −0 ui/src/app/admin/container/NewGroup.js
  85. +18 −3 ui/src/app/admin/container/UserManagement.js
  86. +20 −0 ui/src/app/admin/hoc/GroupProvider.js
  87. +42 −0 ui/src/app/admin/hoc/GroupsProvider.js
  88. +20 −0 ui/src/app/admin/hooks.js
  89. 0 ui/src/app/{metadata/component → core/components}/DeleteConfirmation.js
  90. 0 ui/src/app/{metadata/component → core/components}/DeleteConfirmation.test.js
  91. +5 −1 ui/src/app/core/components/Header.js
  92. +12 −1 ui/src/app/core/user/UserContext.js
  93. +7 −2 ui/src/app/dashboard/view/AdminTab.js
  94. +16 −2 ui/src/app/dashboard/view/SourcesTab.js
  95. +105 −0 ui/src/app/form/FormManager.js
  96. +24 −0 ui/src/app/form/Schema.js
  97. +70 −8 ui/src/app/metadata/component/MetadataHeader.js
  98. +1 −1 ui/src/app/metadata/domain/filter/component/MetadataFilters.js
  99. +39 −9 ui/src/app/metadata/domain/source/component/SourceList.js
  100. +0 −3 ui/src/app/metadata/editor/MetadataEditorNav.js
  101. +3 −1 ui/src/app/metadata/hoc/MetadataSchema.js
  102. +13 −3 ui/src/app/metadata/hoc/MetadataSelector.js
  103. +2 −1 ui/src/app/metadata/hooks/api.js
  104. +1 −1 ui/src/app/metadata/view/MetadataAttributeList.js
  105. +3 −1 ui/src/app/metadata/view/MetadataOptions.js
@@ -42,6 +42,7 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.ServiceProviderSso
import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects
import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository
import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService
import edu.internet2.tier.shibboleth.admin.util.EntityDescriptorConversionUtils
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
@@ -80,6 +81,10 @@ class EntityDescriptorEnversVersioningTests extends Specification {

@Autowired
OpenSamlObjects openSamlObjects

def setup() {
EntityDescriptorConversionUtils.openSamlObjects = openSamlObjects
}

def "test versioning with contact persons"() {
setup:
@@ -303,7 +308,7 @@ class EntityDescriptorEnversVersioningTests extends Specification {
entityManager)

//Groovy FTW - able to call any private methods on ANY object. Get first revision
UIInfo uiinfo = entityDescriptorService.getUIInfo(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))
UIInfo uiinfo = EntityDescriptorConversionUtils.getUIInfo(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))

then:
entityDescriptorHistory.size() == 1
@@ -336,9 +341,9 @@ class EntityDescriptorEnversVersioningTests extends Specification {
entityManager)

//Get second revision
uiinfo = entityDescriptorService.getUIInfo(getTargetEntityForRevisionIndex(entityDescriptorHistory, 1))
uiinfo = EntityDescriptorConversionUtils.getUIInfo(getTargetEntityForRevisionIndex(entityDescriptorHistory, 1))
//And initial revision
def uiinfoInitialRevision = entityDescriptorService.getUIInfo(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))
def uiinfoInitialRevision = EntityDescriptorConversionUtils.getUIInfo(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))

then:
entityDescriptorHistory.size() == 2
@@ -389,7 +394,7 @@ class EntityDescriptorEnversVersioningTests extends Specification {

//Get initial revision
SPSSODescriptor spssoDescriptor =
entityDescriptorService.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,0))
EntityDescriptorConversionUtils.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,0))

KeyDescriptor keyDescriptor = spssoDescriptor.keyDescriptors[0]
X509Certificate x509cert = keyDescriptor.keyInfo.x509Datas[0].x509Certificates[0]
@@ -421,7 +426,7 @@ class EntityDescriptorEnversVersioningTests extends Specification {


//Get second revision
SPSSODescriptor spssoDescriptor_second = entityDescriptorService.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,1))
SPSSODescriptor spssoDescriptor_second = EntityDescriptorConversionUtils.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,1))

KeyDescriptor keyDescriptor_second1 = spssoDescriptor_second.keyDescriptors[0]
X509Certificate x509cert_second1 = keyDescriptor_second1.keyInfo.x509Datas[0].x509Certificates[0]
@@ -431,7 +436,7 @@ class EntityDescriptorEnversVersioningTests extends Specification {

//Get initial revision
spssoDescriptor =
entityDescriptorService.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,0))
EntityDescriptorConversionUtils.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,0))

keyDescriptor = spssoDescriptor.keyDescriptors[0]
x509cert = keyDescriptor.keyInfo.x509Datas[0].x509Certificates[0]
@@ -475,7 +480,7 @@ class EntityDescriptorEnversVersioningTests extends Specification {
entityManager)

SPSSODescriptor spssoDescriptor =
entityDescriptorService.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,0))
EntityDescriptorConversionUtils.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,0))
AssertionConsumerService acs = spssoDescriptor.assertionConsumerServices[0]

then:
@@ -500,12 +505,12 @@ class EntityDescriptorEnversVersioningTests extends Specification {
entityManager)

SPSSODescriptor spssoDescriptor2 =
entityDescriptorService.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,1))
EntityDescriptorConversionUtils.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,1))
def (acs1, acs2) = [spssoDescriptor2.assertionConsumerServices[0], spssoDescriptor2.assertionConsumerServices[1]]

//Initial revision
spssoDescriptor =
entityDescriptorService.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,0))
EntityDescriptorConversionUtils.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory,0))
acs = spssoDescriptor.assertionConsumerServices[0]

then:
@@ -543,7 +548,7 @@ class EntityDescriptorEnversVersioningTests extends Specification {
entityManager)

SPSSODescriptor spssoDescriptor =
entityDescriptorService.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))
EntityDescriptorConversionUtils.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))
SingleLogoutService slo = spssoDescriptor.singleLogoutServices[0]

then:
@@ -565,12 +570,12 @@ class EntityDescriptorEnversVersioningTests extends Specification {
entityManager)

SPSSODescriptor spssoDescriptor2 =
entityDescriptorService.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory, 1))
EntityDescriptorConversionUtils.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory, 1))
def (slo1, slo2) = [spssoDescriptor2.singleLogoutServices[0], spssoDescriptor2.singleLogoutServices[1]]

//Initial revision
spssoDescriptor =
entityDescriptorService.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))
EntityDescriptorConversionUtils.getSPSSODescriptorFromEntityDescriptor(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))
slo = spssoDescriptor.singleLogoutServices[0]

then:
@@ -608,7 +613,7 @@ class EntityDescriptorEnversVersioningTests extends Specification {
txMgr,
entityManager)

EntityAttributes attrs = entityDescriptorService.getEntityAttributes(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))
EntityAttributes attrs = EntityDescriptorConversionUtils.getEntityAttributes(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))

then:
entityDescriptorHistory.size() == 1
@@ -628,10 +633,10 @@ class EntityDescriptorEnversVersioningTests extends Specification {
txMgr,
entityManager)

EntityAttributes attrs2 = entityDescriptorService.getEntityAttributes(getTargetEntityForRevisionIndex(entityDescriptorHistory, 1))
EntityAttributes attrs2 = EntityDescriptorConversionUtils.getEntityAttributes(getTargetEntityForRevisionIndex(entityDescriptorHistory, 1))

//Initial revision
attrs = entityDescriptorService.getEntityAttributes(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))
attrs = EntityDescriptorConversionUtils.getEntityAttributes(getTargetEntityForRevisionIndex(entityDescriptorHistory, 0))

expectedModifiedPersistentEntities = [EntityDescriptor.name,
EntityAttributes.name,
@@ -6,6 +6,7 @@ import edu.internet2.tier.shibboleth.admin.ui.configuration.Internationalization
import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.TestConfiguration
import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor
import edu.internet2.tier.shibboleth.admin.ui.exception.EntityNotFoundException
import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository
import edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport
import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService
@@ -108,15 +109,20 @@ class EnversEntityDescriptorVersionServiceTests extends Specification {
v2EdRepresentation.id == ed.resourceId
}

def "versioning service returns null for non existent version number"() {
def "versioning service throws EntityNotFoundException for non existent version number"() {
when: 'Initial version'
EntityDescriptor ed = new EntityDescriptor(entityID: 'ed', serviceProviderName: 'SP1', createdBy: 'anonymousUser')
ed = edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport.doInExplicitTransaction(txMgr) {
entityDescriptorRepository.save(ed)
}
def edRepresentation = entityDescriptorVersionService.findSpecificVersionOfEntityDescriptor(ed.resourceId, '1000')


then:
!edRepresentation
try {
def edRepresentation = entityDescriptorVersionService.findSpecificVersionOfEntityDescriptor(ed.resourceId, '1000')
1 == 2
}
catch (EntityNotFoundException expected) {
1 == 1
}
}
}
@@ -15,7 +15,7 @@ import java.nio.file.Paths

//TODO: make config configurable
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = [ShibbolethUiApplication])
@ActiveProfiles(['dev'])
@ActiveProfiles(['dev', 'very-dangerous'])
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD, methodMode = DirtiesContext.MethodMode.AFTER_METHOD)
class SeleniumSIDETest extends Specification {
@Value('${local.server.port}')
@@ -101,7 +101,7 @@ class SeleniumSIDETest extends Specification {
// TODO: Uncomment the below commented tests once they've been updated to use the new configuration screen
where:
name | file
'SHIBUI-1364: Compare FBHTTPMP with filters' | '/SHIBUI-1364-1.side'
/* 'SHIBUI-1364: Compare FBHTTPMP with filters' | '/SHIBUI-1364-1.side'
'SHIBUI-1364: Compare FSMP with filters' | '/SHIBUI-1364-2.side'
'SHIBUI-1364: Compare LDMP with filters' | '/SHIBUI-1364-3.side'
'SHIBUI-1364: Compare DHTTPMP with filters' | '/SHIBUI-1364-4.side'
@@ -124,9 +124,13 @@ class SeleniumSIDETest extends Specification {
'SHIBUI-1391: Regex Validation' | '/SHIBUI-1391.side'
'SHIBUI-1407: Metadata source comparison highlights' | '/SHIBUI-1407-1.side'
'SHIBUI-1407: Metadata provider comparison highlights' | '/SHIBUI-1407-2.side'
'SHIBUI-1503: Non-admin can create metadata source' | '/SHIBUI-1503-1.side'
'SHIBUI-1503: User can be deleted' | '/SHIBUI-1503-2.side'
'SHIBUI-1503: User can be enabled' | '/SHIBUI-1503-3.side'
'SHIBUI-1503: Non-admin can create metadata source' | '/SHIBUI-1503-1.side'
'SHIBUI-1503: User can be deleted' | '/SHIBUI-1503-2.side'
'SHIBUI-1503: User can be enabled' | '/SHIBUI-1503-3.side'*/
'SHIBUI-1740: Group can be created, edited, deleted' | '/SHIBUI-1740-1.side'
'SHIBUI-1740: Verify dev profile group membership' | '/SHIBUI-1740-2.side'
'SHIBUI-1740: Verify admin-owned resource not visible to nonadmins' | '/SHIBUI-1740-3.side'
'SHIBUI-1740: Verify nonadmin-owned resource visibility' | '/SHIBUI-1740-4.side'
}
}

0 comments on commit 0888d24

Please sign in to comment.