From 38b76f5b1c08846ef9df35e4f499c03a262cf60d Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 21 Jun 2018 14:05:04 -0700 Subject: [PATCH] [SHIBUI-525] unit tests WIP some general cleanup .. and added some repetition --- .../MetadataFiltersControllerTests.groovy | 28 +++++++++++----- .../admin/ui/util/TestObjectGenerator.groovy | 33 +++++++++++++++++++ 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy index f2351dfe8..6d8ab9f71 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy @@ -25,6 +25,7 @@ import org.springframework.test.web.servlet.result.MockMvcResultHandlers import org.springframework.test.web.servlet.setup.MockMvcBuilders import org.w3c.dom.Document import spock.lang.Specification +import spock.lang.Unroll import static org.hamcrest.CoreMatchers.containsString import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8 @@ -94,7 +95,6 @@ class MetadataFiltersControllerTests extends Specification { when: def result = mockMvc.perform(get('/api/MetadataResolver/foo/Filters')) - println(mapper.writeValueAsString(expectedContent)) then: result.andExpect(expectedHttpResponseStatus) @@ -122,9 +122,11 @@ class MetadataFiltersControllerTests extends Specification { .andExpect(content().json(mapper.writeValueAsString(expectedFilter))) } - def "FilterController.create creates the desired filter"() { + @Unroll + def "FilterController.create creates the desired filter (filterType: #filterType)"(String filterType) { given: - def randomFilter = testObjectGenerator.entityAttributesFilter() + def randomFilter = testObjectGenerator.buildRandomFilterOfType(filterType) + println('WOO! ' + randomFilter.class) def metadataResolver = new MetadataResolver() metadataResolver.setResourceId(randomGenerator.randomId()) metadataResolver.setMetadataFilters(testObjectGenerator.buildAllTypesOfFilterList()) @@ -142,9 +144,6 @@ class MetadataFiltersControllerTests extends Specification { def expectedResponseHeaderValue = "/api/MetadataResolver/$expectedMetadataResolverUUID/Filters/$expectedFilterUUID" def expectedJsonBody = mapper.writeValueAsString(randomFilter) def postedJsonBody = expectedJsonBody - ~/"id":.*?,/ // remove the "id:," - println postedJsonBody - def filter = mapper.readValue(postedJsonBody, MetadataFilter) - println filter when: def result = mockMvc.perform( @@ -156,11 +155,18 @@ class MetadataFiltersControllerTests extends Specification { result.andExpect(status().isCreated()) .andExpect(content().json(expectedJsonBody, true)) .andExpect(header().string(expectedResponseHeader, containsString(expectedResponseHeaderValue))) + + where: + filterType | _ + 'entityAttributes' | _ + 'entityRoleWhiteList' | _ + 'signatureValidation' | _ } - def "FilterController.update updates the target EntityAttributes filter as desired"() { + @Unroll + def "FilterController.update updates the target #filterType filter as desired"(String filterType) { given: - def originalFilter = testObjectGenerator.entityAttributesFilter() + def originalFilter = testObjectGenerator.buildRandomFilterOfType(filterType) def updatedFilter = testObjectGenerator.copyOf(originalFilter) updatedFilter.name = 'Updated Filter' def postedJsonBody = mapper.writeValueAsString(updatedFilter) @@ -192,6 +198,12 @@ class MetadataFiltersControllerTests extends Specification { expectedJson << [version: updatedFilter.hashCode()] result.andExpect(status().isOk()) .andExpect(content().json(JsonOutput.toJson(expectedJson), true)) + + where: + filterType | _ + 'entityAttributes' | _ + 'entityRoleWhiteList' | _ + 'signatureValidation' | _ } def "FilterController.update filter 409's if the version numbers don't match"() { diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy index 4069ab849..027158ffc 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy @@ -5,6 +5,7 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFil import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilterTarget 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.filters.SignatureValidationFilter 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 @@ -119,10 +120,42 @@ class TestObjectGenerator { (1..generator.randomInt(4, 10)).each { filterList.add(buildFilter { entityAttributesFilter() }) filterList.add(buildFilter { entityRoleWhitelistFilter() }) + filterList.add(buildFilter { signatureValidationFilter() }) } return filterList } + MetadataFilter buildRandomFilterOfType(String filterType) { + def randomFilter + switch (filterType) { + case 'entityAttributes': + randomFilter = entityAttributesFilter() + break + case 'entityRoleWhiteList': + randomFilter = entityRoleWhitelistFilter() + break + case 'signatureValidation': + randomFilter = signatureValidationFilter() + break + default: + randomFilter = new MetadataFilter() + } + randomFilter + } + + SignatureValidationFilter signatureValidationFilter() { + new SignatureValidationFilter().with { + it.name = 'SignatureValidation' + it.requireSignedRoot = generator.randomBoolean() + it.certificateFile = generator.randomString(50) + it.defaultCriteriaRef = generator.randomString(10) + it.signaturePrevalidatorRef = generator.randomString(10) + it.dynamicTrustedNamesStrategyRef = generator.randomString(10) + it.trustEngineRef = generator.randomString(10) + it.publicKey = generator.randomString(50) + it + } + } EntityRoleWhiteListFilter entityRoleWhitelistFilter() { new EntityRoleWhiteListFilter().with { it.name = 'EntityRoleWhiteList'