From a328e514adfb5baefbc00fb3010396744028c8e6 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Tue, 28 May 2019 11:30:28 -0400 Subject: [PATCH] SHIBUI-1262 [1307 WIP] --- ...tityDescriptorEnversVersioningTests.groovy | 59 ++++++++++++++++++- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EntityDescriptorEnversVersioningTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EntityDescriptorEnversVersioningTests.groovy index 424eff552..73d857bb6 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EntityDescriptorEnversVersioningTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EntityDescriptorEnversVersioningTests.groovy @@ -5,8 +5,11 @@ 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.domain.frontend.ContactRepresentation +import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation 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 org.hibernate.envers.AuditReaderFactory import org.hibernate.envers.query.AuditQuery import org.springframework.beans.factory.annotation.Autowired @@ -21,6 +24,8 @@ import javax.persistence.EntityManager import static edu.internet2.tier.shibboleth.admin.ui.domain.util.entitydescriptors.EntityDescriptors.prebakedEntityDescriptor import static edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport.doInExplicitTransaction +import static org.opensaml.saml.saml2.metadata.ContactPersonTypeEnumeration.ADMINISTRATIVE +import static org.opensaml.saml.saml2.metadata.ContactPersonTypeEnumeration.OTHER /** * Testing entity descriptor envers versioning @@ -34,6 +39,9 @@ class EntityDescriptorEnversVersioningTests extends Specification { @Autowired EntityDescriptorRepository entityDescriptorRepository + @Autowired + EntityDescriptorService entityDescriptorService + @Autowired EntityManager entityManager @@ -48,18 +56,63 @@ class EntityDescriptorEnversVersioningTests extends Specification { EntityDescriptor ed = doInExplicitTransaction(txMgr) { entityDescriptorRepository.save(prebakedEntityDescriptor(openSamlObjects)) } - def entityDescriptorHistory = resolverHistory() + def entityDescriptorHistory = getRevisionHistory() then: entityDescriptorHistory.size() == 1 + + when: + def representation = new EntityDescriptorRepresentation().with { + it.contacts = [new ContactRepresentation(type: 'administrative', name: 'nameUPDATED', emailAddress: 'test@test')] + it + } + entityDescriptorHistory = updateAndGetRevisionHistory(ed, representation) + + then: + entityDescriptorHistory.size() == 2 + entityDescriptorHistory[1][0].contactPersons[0].givenName.name == 'nameUPDATED' + entityDescriptorHistory[1][0].contactPersons[0].type == ADMINISTRATIVE + entityDescriptorHistory[1][1].principalUserName == 'anonymous' + entityDescriptorHistory[1][1].timestamp > 0L + + when: + representation = new EntityDescriptorRepresentation().with { + it.contacts = [new ContactRepresentation(type: 'other', name: 'nameUPDATED', emailAddress: 'test@test.com')] + it + } + entityDescriptorHistory = updateAndGetRevisionHistory(ed, representation) + + ed.contactPersons[0].emailAddresses[0].address + then: + entityDescriptorHistory.size() == 3 + entityDescriptorHistory[2][0].contactPersons[0].givenName.name == 'nameUPDATED' + entityDescriptorHistory[2][0].contactPersons[0].type == OTHER + entityDescriptorHistory[2][0].contactPersons[0].emailAddresses[0].address == 'test@test.com' + entityDescriptorHistory[2][1].principalUserName == 'anonymous' + entityDescriptorHistory[2][1].timestamp > 0L + + //Also make sure we have our original revision + entityDescriptorHistory[0][0].contactPersons[0].givenName.name == 'name' + entityDescriptorHistory[0][0].contactPersons[0].type == ADMINISTRATIVE + entityDescriptorHistory[0][0].contactPersons[0].emailAddresses[0].address == 'test@test' + entityDescriptorHistory[0][1].principalUserName == 'anonymous' + entityDescriptorHistory[0][1].timestamp > 0L + } - private resolverHistory() { + private updateAndGetRevisionHistory(ed, representation) { + entityDescriptorService.updateDescriptorFromRepresentation(ed, representation) + doInExplicitTransaction(txMgr) { + entityDescriptorRepository.save(ed) + } + getRevisionHistory() + } + + private getRevisionHistory() { def auditReader = AuditReaderFactory.get(entityManager) AuditQuery auditQuery = auditReader .createQuery() .forRevisionsOfEntity(EntityDescriptor, false, false) auditQuery.resultList - } }