Skip to content

Commit

Permalink
SHIBUI-522: refactoring REST controller for polymorphic filters endpo…
Browse files Browse the repository at this point in the history
…ints
  • Loading branch information
dima767 committed Jun 1, 2018
1 parent 6fa70fc commit 4b05a56
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 18 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import edu.internet2.tier.shibboleth.admin.ui.domain.Attribute;
import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.RelyingPartyOverridesRepresentation;
import edu.internet2.tier.shibboleth.admin.util.MDDCConstants;
Expand Down Expand Up @@ -37,6 +38,9 @@
@ToString
public class EntityAttributesFilter extends MetadataFilter {

@JsonProperty("@type")
private final transient String type = "EntityAttributesFilter";

@OneToOne(cascade = CascadeType.ALL)
private EntityAttributesFilterTarget entityAttributesFilterTarget;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand All @@ -22,6 +25,9 @@
@ToString
public class EntityRoleWhiteListFilter extends MetadataFilter {

@JsonProperty("@type")
private final transient String type = "EntityRoleWhiteList";

private Boolean removeRolelessEntityDescriptors = true;

private Boolean removeEmptyEntitiesDescriptors = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@
@Getter
@Setter
@ToString
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value=EntityRoleWhiteListFilter.class, name="EntityRoleWhiteList"),
@JsonSubTypes.Type(value=EntityAttributesFilter.class, name="EntityAttributesFilter")})
//@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
/*@JsonSubTypes({@JsonSubTypes.Type(value=EntityRoleWhiteListFilter.class, name="EntityRoleWhiteList"),
@JsonSubTypes.Type(value=EntityAttributesFilter.class, name="EntityAttributesFilter")})*/
public class MetadataFilter extends AbstractAuditable {

private String name;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import edu.internet2.tier.shibboleth.admin.ui.configuration.CoreShibUiConfigurat
import edu.internet2.tier.shibboleth.admin.ui.configuration.MetadataResolverConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver
import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository
import edu.internet2.tier.shibboleth.admin.ui.service.FilterService
Expand Down Expand Up @@ -82,10 +83,10 @@ class MetadataFiltersControllerTests extends Specification {
mockMvc = MockMvcBuilders.standaloneSetup(controller).build()
}

def "FilterController.getAll gets all filters"() {
def "FilterController.getAll gets all available types of filters"() {
given:
def metadataResolver = new MetadataResolver()
def expectedContent = testObjectGenerator.buildFilterList()
List<MetadataFilter> expectedContent = testObjectGenerator.buildAllTypesOfFilterList()
metadataResolver.setMetadataFilters(expectedContent)
List<MetadataResolver> metadataResolverList = [metadataResolver]
1 * metadataResolverRepository.findAll() >> metadataResolverList
Expand All @@ -106,7 +107,7 @@ class MetadataFiltersControllerTests extends Specification {
def "FilterController.getOne gets the desired filter"() {
given:
def metadataResolver = new MetadataResolver()
metadataResolver.setMetadataFilters(testObjectGenerator.buildFilterList())
metadataResolver.setMetadataFilters(testObjectGenerator.buildAllTypesOfFilterList())
List<MetadataResolver> metadataResolverList = [metadataResolver]
1 * metadataResolverRepository.findAll() >> metadataResolverList

Expand All @@ -133,7 +134,7 @@ class MetadataFiltersControllerTests extends Specification {
def randomFilter = testObjectGenerator.buildEntityAttributesFilter()
def metadataResolver = new MetadataResolver()
metadataResolver.setResourceId(randomGenerator.randomId())
metadataResolver.setMetadataFilters(testObjectGenerator.buildFilterList())
metadataResolver.setMetadataFilters(testObjectGenerator.buildAllTypesOfFilterList())
def metadataResolverWithFilter = new MetadataResolver()
metadataResolverWithFilter.resourceId = metadataResolver.resourceId
metadataResolverWithFilter.metadataFilters = metadataResolver.metadataFilters.collect()
Expand Down Expand Up @@ -174,7 +175,7 @@ class MetadataFiltersControllerTests extends Specification {

def originalMetadataResolver = new MetadataResolver()
originalMetadataResolver.setResourceId(randomGenerator.randomId())
originalMetadataResolver.setMetadataFilters(testObjectGenerator.buildFilterList())
originalMetadataResolver.setMetadataFilters(testObjectGenerator.buildAllTypesOfFilterList())
def updatedMetadataResolver = new MetadataResolver()
updatedMetadataResolver.setResourceId(originalMetadataResolver.getResourceId())
updatedMetadataResolver.setMetadataFilters(originalMetadataResolver.getMetadataFilters().collect())
Expand Down Expand Up @@ -209,7 +210,7 @@ class MetadataFiltersControllerTests extends Specification {

def originalMetadataResolver = new MetadataResolver()
originalMetadataResolver.setResourceId(randomGenerator.randomId())
originalMetadataResolver.setMetadataFilters(testObjectGenerator.buildFilterList())
originalMetadataResolver.setMetadataFilters(testObjectGenerator.buildAllTypesOfFilterList())
originalMetadataResolver.getMetadataFilters().add(randomFilter)

1 * metadataResolverRepository.findAll() >> [originalMetadataResolver]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class PolymorphicFiltersJacksonHandlingTests extends Specification {

def "Correct polymorphic serialization of EntityAttributesFilter"() {
given:
def simulatedPersistentFilter = testObjectGenerator.buildEntityAttributesFilter()
def simulatedPersistentFilter = testObjectGenerator.entityAttributesFilter()
simulatedPersistentFilter.intoTransientRepresentation()

def simulatedPrePersistentFilter = new EntityAttributesFilter()
Expand All @@ -85,7 +85,18 @@ class PolymorphicFiltersJacksonHandlingTests extends Specification {

then:
simulatedPersistentFilter.attributes.size() == simulatedPrePersistentFilter.attributes.size()
}

def "List of filters with correct types"() {
given:
def filters = [testObjectGenerator.entityRoleWhitelistFilter()]

when:
def json = mapper.writeValueAsString(filters)
println(json)

then:
json

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,17 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.LocalizedName
import edu.internet2.tier.shibboleth.admin.ui.domain.OrganizationDisplayName
import edu.internet2.tier.shibboleth.admin.ui.domain.OrganizationName
import edu.internet2.tier.shibboleth.admin.ui.domain.OrganizationURL
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityRoleWhiteListFilter
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter
import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.FilterRepresentation
import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.FilterTargetRepresentation
import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.RelyingPartyOverridesRepresentation
import edu.internet2.tier.shibboleth.admin.util.AttributeUtility
import edu.internet2.tier.shibboleth.admin.util.MDDCConstants
import org.opensaml.saml.saml2.metadata.Organization

import java.util.function.Supplier

/**
* @author Bill Smith (wsmith@unicon.net)
*/
Expand All @@ -29,23 +33,37 @@ class TestObjectGenerator {
this.attributeUtility = attributeUtility
}

List<EntityAttributesFilter> buildFilterList() {
List<EntityAttributesFilter> filterList = new ArrayList<>()
List<MetadataFilter> buildAllTypesOfFilterList() {
List<MetadataFilter> filterList = new ArrayList<>()
(1..generator.randomInt(4, 10)).each {
filterList.add(buildEntityAttributesFilter())
filterList.add(buildFilter { entityAttributesFilter() })
filterList.add(buildFilter { entityRoleWhitelistFilter() })
}
return filterList
}

EntityAttributesFilter buildEntityAttributesFilter() {
EntityAttributesFilter filter = new EntityAttributesFilter()
EntityRoleWhiteListFilter entityRoleWhitelistFilter() {
new EntityRoleWhiteListFilter().with {
it.retainedRoles = ['role1', 'role2']
it.removeRolelessEntityDescriptors = true
it
}
}

EntityAttributesFilter entityAttributesFilter() {
new EntityAttributesFilter().with {
it.setEntityAttributesFilterTarget(buildEntityAttributesFilterTarget())
it.setAttributes(buildAttributesList())
it.intoTransientRepresentation()
it
}
}

MetadataFilter buildFilter(Supplier<? extends MetadataFilter> filterSupplier) {
MetadataFilter filter = filterSupplier.get()
filter.setName(generator.randomString(10))
filter.setFilterEnabled(generator.randomBoolean())
filter.setResourceId(generator.randomId())
filter.setEntityAttributesFilterTarget(buildEntityAttributesFilterTarget())
filter.setAttributes(buildAttributesList())

return filter
}

Expand Down

0 comments on commit 4b05a56

Please sign in to comment.