Skip to content

Commit

Permalink
SHIBUI-1262(1315, 1316)
Browse files Browse the repository at this point in the history
  • Loading branch information
dima767 committed Jun 11, 2019
1 parent 079f645 commit 17e10a0
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.internet2.tier.shibboleth.admin.ui.configuration;

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.service.EnversEntityDescriptorVersionService;
import org.springframework.context.annotation.Bean;
Expand All @@ -15,7 +16,7 @@ public class EntitiesVersioningConfiguration {
private EntityManager entityManager;

@Bean
EntityDescriptorVersionService entityDescriptorVersionService() {
return new EnversEntityDescriptorVersionService(entityManager);
EntityDescriptorVersionService entityDescriptorVersionService(EntityDescriptorService entityDescriptorService) {
return new EnversEntityDescriptorVersionService(entityManager, entityDescriptorService);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,28 +17,4 @@ public interface EntityDescriptorVersionService {
List<Version> findVersionsForEntityDescriptor(String resourceId);

EntityDescriptorRepresentation findSpecificVersionOfEntityDescriptor(String resourceId, String versionId);

/* Factory method to return stub impl for dev and testing purposes */
static EntityDescriptorVersionService stubImpl(final EntityDescriptorService entityDescriptorService,
final EntityDescriptorRepository entityDescriptorRepository) {
return new EntityDescriptorVersionService() {
@Override
public List<Version> findVersionsForEntityDescriptor(String resourceId) {
return Arrays.asList(
new Version("1", "kramer", LocalDateTime.now().minusDays(10)),
new Version("2", "newman", LocalDateTime.now().minusDays(5))
);
}

@Override
public EntityDescriptorRepresentation findSpecificVersionOfEntityDescriptor(String resourceId, String versionId) {
EntityDescriptor ed = new EntityDescriptor();
ed.setID("1");
ed.setEntityID("http://versioning/stub");
ed.setCreatedBy("kramer");
ed.setCreatedDate(LocalDateTime.now().minusDays(10));
return entityDescriptorService.createRepresentationFromDescriptor(ed);
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.springframework.data.jpa.repository.JpaContext;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import java.time.LocalDateTime;
import java.time.ZoneId;
Expand All @@ -29,8 +30,11 @@ public class EnversEntityDescriptorVersionService implements EntityDescriptorVer

private EntityManager entityManager;

public EnversEntityDescriptorVersionService(EntityManager entityManager) {
private EntityDescriptorService entityDescriptorService;

public EnversEntityDescriptorVersionService(EntityManager entityManager, EntityDescriptorService entityDescriptorService) {
this.entityManager = entityManager;
this.entityDescriptorService = entityDescriptorService;
}

@Override
Expand Down Expand Up @@ -58,6 +62,16 @@ public List<Version> findVersionsForEntityDescriptor(String resourceId) {

@Override
public EntityDescriptorRepresentation findSpecificVersionOfEntityDescriptor(String resourceId, String versionId) {
return null;
try {
Object revision = AuditReaderFactory.get(entityManager).createQuery()
.forEntitiesAtRevision(EntityDescriptor.class, Integer.valueOf(versionId))
.add(AuditEntity.property("resourceId").eq(resourceId))
.add(AuditEntity.revisionNumber().eq(Integer.valueOf(versionId)))
.getSingleResult();
return entityDescriptorService.createRepresentationFromDescriptor((EntityDescriptor) revision);
}
catch (NoResultException e) {
return null;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.internet2.tier.shibboleth.admin.ui.controller

import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor
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.MetadataResolverRepository
import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator
Expand Down Expand Up @@ -28,6 +29,8 @@ class EntityDescriptorControllerVersionEndpointsIntegrationTests extends Specifi

static ALL_VERSIONS_URI = "$BASE_URI/%s/Versions"

static SPECIFIC_VERSION_URI = "$BASE_URI/%s/Versions/%s"

def "GET /api/EntityDescriptor/{resourceId}/Versions with non-existent entity descriptor"() {
when:
def result = getAllEntityDescriptorVersions('non-existent-ed-id', String)
Expand Down Expand Up @@ -68,12 +71,49 @@ class EntityDescriptorControllerVersionEndpointsIntegrationTests extends Specifi
result.body[0].date < result.body[1].date
}

def "GET /api/EntityDescriptor{resourceId}/Versions/{version} for non existent version"() {
given:
EntityDescriptor ed = new EntityDescriptor(entityID: 'http://test/controller', createdBy: 'anonymousUser')
ed = entityDescriptorRepository.save(ed)

when:
def result = getEntityDescriptorForVersion(ed.resourceId, '1000', EntityDescriptorRepresentation)

then:
result.statusCodeValue == 404
}

def "GET /api/EntityDescriptor{resourceId}/Versions/{version} with 2 entity descriptor versions returns correct ED for specific versions"() {
given:
EntityDescriptor ed = new EntityDescriptor(entityID: 'http://test/controller', createdBy: 'anonymousUser', serviceProviderName: 'SP1')
ed = entityDescriptorRepository.save(ed)
//Will created a second version for UPDATE revision
ed.serviceProviderName = 'SP2'
entityDescriptorRepository.save(ed)

when:
def allVersions = getAllEntityDescriptorVersions(ed.resourceId, List)
def edv1 = getEntityDescriptorForVersion(ed.resourceId, allVersions.body[0].id, EntityDescriptorRepresentation)
def edv2 = getEntityDescriptorForVersion(ed.resourceId, allVersions.body[1].id, EntityDescriptorRepresentation)

then:
edv1.statusCodeValue == 200
edv1.body.serviceProviderName == 'SP1'
edv2.statusCodeValue == 200
edv2.body.serviceProviderName == 'SP2'
}

private getAllEntityDescriptorVersions(String resourceId, responseType) {
this.restTemplate.getForEntity(resourceUriFor(ALL_VERSIONS_URI, resourceId), responseType)
}

private getEntityDescriptorForVersion(String resourceId, String version, responseType) {
this.restTemplate.getForEntity(resourceUriFor(SPECIFIC_VERSION_URI, resourceId, version), responseType)
}

private static resourceUriFor(String uriTemplate, String resourceId, String version) {
String.format(uriTemplate, resourceId, version)
}

private static resourceUriFor(String uriTemplate, String resourceId) {
String.format(uriTemplate, resourceId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,42 @@ class EnversEntityDescriptorVersionServiceTests extends Specification {
versions[0].creator && versions[1].creator && versions[2].creator
(versions[0].date < versions[1].date) && (versions[1].date < versions[2].date)
}

def "versioning service returns correct entity descriptor for version number"() {
when: 'Initial version'
EntityDescriptor ed = new EntityDescriptor(entityID: 'ed', serviceProviderName: 'SP1', createdBy: 'anonymousUser')
ed = doInExplicitTransaction(txMgr) {
entityDescriptorRepository.save(ed)
}
def versions = entityDescriptorVersionService.findVersionsForEntityDescriptor(ed.resourceId)
def v1EdRepresentation = entityDescriptorVersionService.findSpecificVersionOfEntityDescriptor(ed.resourceId, versions[0].id)

then:
v1EdRepresentation.serviceProviderName == 'SP1'
v1EdRepresentation.id == ed.resourceId

when: 'Update the original'
ed.serviceProviderName = 'SP2'
ed = doInExplicitTransaction(txMgr) {
entityDescriptorRepository.save(ed)
}
versions = entityDescriptorVersionService.findVersionsForEntityDescriptor(ed.resourceId)
def v2EdRepresentation = entityDescriptorVersionService.findSpecificVersionOfEntityDescriptor(ed.resourceId, versions[1].id)

then:
v2EdRepresentation.serviceProviderName == 'SP2'
v2EdRepresentation.id == ed.resourceId
}

def "versioning service returns null for non existent version number"() {
when: 'Initial version'
EntityDescriptor ed = new EntityDescriptor(entityID: 'ed', serviceProviderName: 'SP1', createdBy: 'anonymousUser')
ed = doInExplicitTransaction(txMgr) {
entityDescriptorRepository.save(ed)
}
def edRepresentation = entityDescriptorVersionService.findSpecificVersionOfEntityDescriptor(ed.resourceId, '1000')

then:
!edRepresentation
}
}

0 comments on commit 17e10a0

Please sign in to comment.