diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/EntityAttributesFilter.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/EntityAttributesFilter.java index af9f3f22a..d2c80bbe5 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/EntityAttributesFilter.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/EntityAttributesFilter.java @@ -1,5 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.domain; +import com.fasterxml.jackson.annotation.JsonIgnore; import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter; import lombok.EqualsAndHashCode; @@ -19,6 +20,7 @@ public class EntityAttributesFilter extends MetadataFilter { @OneToMany(cascade = CascadeType.ALL) @OrderColumn + @JsonIgnore private List attributes = new ArrayList<>(); public EntityAttributesFilterTarget getEntityAttributesFilterTarget() { diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/MetadataFilter.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/MetadataFilter.java index fbe320a36..e36aa3777 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/MetadataFilter.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/MetadataFilter.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import edu.internet2.tier.shibboleth.admin.ui.domain.AbstractAuditable; +import edu.internet2.tier.shibboleth.admin.ui.domain.EntityAttributesFilter; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; @@ -27,7 +28,8 @@ @Setter @ToString @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") -@JsonSubTypes({@JsonSubTypes.Type(value=EntityRoleWhiteListFilter.class, name="EntityRoleWhiteList")}) +@JsonSubTypes({@JsonSubTypes.Type(value=EntityRoleWhiteListFilter.class, name="EntityRoleWhiteList"), + @JsonSubTypes.Type(value=EntityAttributesFilter.class, name="EntityAttributesFilter")}) public class MetadataFilter extends AbstractAuditable { private String name; diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/AttributeUtility.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/AttributeUtility.java index e3238b36a..0849bfb42 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/AttributeUtility.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/AttributeUtility.java @@ -18,6 +18,10 @@ public class AttributeUtility { @Autowired private OpenSamlObjects openSamlObjects; + public void setOpenSamlObjects(OpenSamlObjects openSamlObjects) { + this.openSamlObjects = openSamlObjects; + } + public edu.internet2.tier.shibboleth.admin.ui.domain.Attribute createAttributeWithBooleanValue(String name, String friendlyName, Boolean value) { edu.internet2.tier.shibboleth.admin.ui.domain.Attribute attribute = ((edu.internet2.tier.shibboleth.admin.ui.domain.AttributeBuilder) openSamlObjects.getBuilderFactory().getBuilder(edu.internet2.tier.shibboleth.admin.ui.domain.Attribute.DEFAULT_ELEMENT_NAME)).buildObject(); attribute.setName(name); diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/FilterControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityAttributesFilterControllerTests.groovy similarity index 99% rename from backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/FilterControllerTests.groovy rename to backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityAttributesFilterControllerTests.groovy index eeba94020..65715a7eb 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/FilterControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityAttributesFilterControllerTests.groovy @@ -36,7 +36,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ContextConfiguration(classes=[CoreShibUiConfiguration, SearchConfiguration, MetadataResolverConfiguration]) @EnableJpaRepositories(basePackages = ["edu.internet2.tier.shibboleth.admin.ui"]) @EntityScan("edu.internet2.tier.shibboleth.admin.ui") -class FilterControllerTests extends Specification { +class EntityAttributesFilterControllerTests extends Specification { @Autowired AttributeUtility attributeUtility diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/PolymorphicFiltersJacksonHandlingTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/PolymorphicFiltersJacksonHandlingTests.groovy index 78dcf6650..d9117396a 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/PolymorphicFiltersJacksonHandlingTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/PolymorphicFiltersJacksonHandlingTests.groovy @@ -5,16 +5,29 @@ import com.fasterxml.jackson.databind.SerializationFeature 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.opensaml.OpenSamlObjects +import edu.internet2.tier.shibboleth.admin.util.AttributeUtility import spock.lang.Specification +import static edu.internet2.tier.shibboleth.admin.ui.domain.EntityAttributesFilterTarget.EntityAttributesFilterTargetType.ENTITY + class PolymorphicFiltersJacksonHandlingTests extends Specification { ObjectMapper mapper + AttributeUtility attributeUtility + def setup() { mapper = new ObjectMapper() - mapper.enable(SerializationFeature.INDENT_OUTPUT); + mapper.enable(SerializationFeature.INDENT_OUTPUT) + + attributeUtility = new AttributeUtility().with { + it.openSamlObjects = new OpenSamlObjects().with { + it.init() + it + } + it + } } def "Correct polymorphic serialization of EntityRoleWhiteListFilter"() { @@ -39,7 +52,9 @@ class PolymorphicFiltersJacksonHandlingTests extends Specification { when: def deSerializedFilter = mapper.readValue(givenFilterJson, MetadataFilter) - def roundTripFilter = mapper.readValue(mapper.writeValueAsString(deSerializedFilter), MetadataFilter) + def json = mapper.writeValueAsString(deSerializedFilter) + println(json) + def roundTripFilter = mapper.readValue(json, MetadataFilter) then: @@ -49,4 +64,26 @@ class PolymorphicFiltersJacksonHandlingTests extends Specification { deSerializedFilter instanceof EntityRoleWhiteListFilter roundTripFilter instanceof EntityRoleWhiteListFilter } + + def "Correct polymorphic serialization of EntityAttributesFilter"() { + given: + def filter = new EntityAttributesFilter().with { + it.name = 'EntityAttributesFilter' + it.entityAttributesFilterTarget = new EntityAttributesFilterTarget().with { + it.entityAttributesFilterTargetType = ENTITY + it.value = ['value1'] + it + } + it.attributes = [attributeUtility.createAttributeWithBooleanValue('myattr', 'myattrFriendy', true)] + it + } + + when: + def json = mapper.writeValueAsString(filter) + println(json) + + then: + json + + } }