Skip to content

Commit

Permalink
[SHIBUI-522]: refactoring JSON serialization for polymorphic filters.…
Browse files Browse the repository at this point in the history
… WIP
  • Loading branch information
dima767 committed May 31, 2018
1 parent fcd6b3c commit 28ddd28
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -19,6 +20,7 @@ public class EntityAttributesFilter extends MetadataFilter {

@OneToMany(cascade = CascadeType.ALL)
@OrderColumn
@JsonIgnore
private List<Attribute> attributes = new ArrayList<>();

public EntityAttributesFilterTarget getEntityAttributesFilterTarget() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"() {
Expand All @@ -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:
Expand All @@ -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

}
}

0 comments on commit 28ddd28

Please sign in to comment.