From be2090de352e5ff7e4ae479913bc845a6176d5d7 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Thu, 6 Jun 2019 10:10:55 -0400 Subject: [PATCH] SHIBUI-1262(1306) --- .../EnversEntityDescriptorVersionService.java | 22 +++++--- ...tyDescriptorVersioningConfiguration.groovy | 36 ------------ ...EntityDescriptorVersionServiceTests.groovy | 55 ++++++++++++------- 3 files changed, 48 insertions(+), 65 deletions(-) delete mode 100644 backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/configuration/TestEntityDescriptorVersioningConfiguration.groovy diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionService.java index 123940f35..fced0645f 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionService.java @@ -15,16 +15,18 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Arrays; +import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; +import static java.util.Comparator.comparing; +import static java.util.stream.Collectors.*; + /** * Hibernate Envers based implementation of {@link EntityDescriptorVersionService}. */ public class EnversEntityDescriptorVersionService implements EntityDescriptorVersionService { - private AuditReader auditReader; - private EntityManager entityManager; public EnversEntityDescriptorVersionService(EntityManager entityManager) { @@ -38,18 +40,20 @@ public List findVersionsForEntityDescriptor(String resourceId) { .add(AuditEntity.property("resourceId").eq(resourceId)) .getResultList(); - //TODO: sort - Object revEntities = revs.stream() - .map(it -> (PrincipalAwareRevisionEntity)((Object[])it)[1]) + Object listOfVersions = revs.stream() + .map(it -> ((Object[])it)[1]) .map(it -> { return new Version(((PrincipalAwareRevisionEntity) it).idAsString(), ((PrincipalAwareRevisionEntity) it).getPrincipalUserName(), - ((PrincipalAwareRevisionEntity) it).getRevisionDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + ((PrincipalAwareRevisionEntity) it).getRevisionDate() + .toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime()); }) - .collect(Collectors.toList()); - + .sorted(comparing(Version::getDate)) + .collect(toList()); - return (List)revEntities; + return (List)listOfVersions; } @Override diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/configuration/TestEntityDescriptorVersioningConfiguration.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/configuration/TestEntityDescriptorVersioningConfiguration.groovy deleted file mode 100644 index 06d16ca31..000000000 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/configuration/TestEntityDescriptorVersioningConfiguration.groovy +++ /dev/null @@ -1,36 +0,0 @@ -package edu.internet2.tier.shibboleth.admin.ui.configuration - -import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation -import edu.internet2.tier.shibboleth.admin.ui.domain.versioning.Version -import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService -import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorVersionService -import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration - -import java.time.LocalDateTime - -@Configuration -class TestEntityDescriptorVersioningConfiguration { - - @Autowired - EntityDescriptorService entityDescriptorService - - /*@Bean - EntityDescriptorVersionService stubEntityDescriptorVersionService() { - return new EntityDescriptorVersionService() { - @Override - List findVersionsForEntityDescriptor(String resourceId) { - return [new Version(id: '1', creator: 'kramer', date: LocalDateTime.now().minusDays(3)), - new Version(id: '2', creator: 'newman', date: LocalDateTime.now())] - } - - @Override - EntityDescriptorRepresentation findSpecificVersionOfEntityDescriptor(String resourceId, String versionId) { - return entityDescriptorService.createRepresentationFromDescriptor(new TestObjectGenerator().buildEntityDescriptor()) - } - } - }*/ - -} diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionServiceTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionServiceTests.groovy index 426c5eb6e..0114e2ffb 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionServiceTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/EnversEntityDescriptorVersionServiceTests.groovy @@ -1,24 +1,19 @@ package edu.internet2.tier.shibboleth.admin.ui.service -import edu.internet2.tier.shibboleth.admin.ui.configuration.CoreShibUiConfiguration -import edu.internet2.tier.shibboleth.admin.ui.configuration.EntitiesVersioningConfiguration -import edu.internet2.tier.shibboleth.admin.ui.configuration.InternationalizationConfiguration -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.configuration.* 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.repository.EntityDescriptorRepository -import edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.domain.EntityScan import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest import org.springframework.data.jpa.repository.config.EnableJpaRepositories +import org.springframework.test.annotation.DirtiesContext import org.springframework.test.context.ContextConfiguration import org.springframework.transaction.PlatformTransactionManager import spock.lang.Specification -import static edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport.* +import java.time.LocalDateTime + import static edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport.doInExplicitTransaction @DataJpaTest @@ -39,25 +34,45 @@ class EnversEntityDescriptorVersionServiceTests extends Specification { @Autowired PlatformTransactionManager txMgr - def "temp test"() { - def representation = new EntityDescriptorRepresentation().with { - it.contacts = [new ContactRepresentation(type: 'administrative', name: 'name', emailAddress: 'test@test')] - it - } - EntityDescriptor ed = entityDescriptorService.createDescriptorFromRepresentation(representation) + @DirtiesContext + def "versioning service returns correct number of versions sorted by modified date in natural order"() { + when: 'Initial version' + EntityDescriptor ed = new EntityDescriptor(entityID: 'ed', serviceProviderName: 'SP1') ed = doInExplicitTransaction(txMgr) { entityDescriptorRepository.save(ed) } - entityDescriptorVersionService.findVersionsForEntityDescriptor(ed.resourceId) + def versions = entityDescriptorVersionService.findVersionsForEntityDescriptor(ed.resourceId) - ed.entityID = "Entity ID" + then: + versions.size() == 1 + versions[0].id + versions[0].creator + versions[0].date < LocalDateTime.now() + + when: 'Third version' + ed.serviceProviderName = 'SP2' ed = doInExplicitTransaction(txMgr) { entityDescriptorRepository.save(ed) } + versions = entityDescriptorVersionService.findVersionsForEntityDescriptor(ed.resourceId) - def versions = entityDescriptorVersionService.findVersionsForEntityDescriptor(ed.resourceId) + then: + versions.size() == 2 + versions[0].id && versions[1].id + versions[0].creator && versions[1].creator + versions[0].date < versions[1].date + + when: 'Third version' + ed.serviceProviderName = 'SP3' + ed = doInExplicitTransaction(txMgr) { + entityDescriptorRepository.save(ed) + } + versions = entityDescriptorVersionService.findVersionsForEntityDescriptor(ed.resourceId) - expect: - true + then: + versions.size() == 3 + versions[0].id && versions[1].id && versions[2].id + versions[0].creator && versions[1].creator && versions[2].creator + (versions[0].date < versions[1].date) && (versions[1].date < versions[2].date) } }