From a580817573911a2a08f90f6c943c441c1bad7fec Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 10 May 2018 14:30:34 -0700 Subject: [PATCH] [SHIBUI-479] Added/updated PUT tests. --- .../EntityDescriptorControllerTests.groovy | 79 +++++++++++++++++-- .../controller/FilterControllerTests.groovy | 40 ++++++++-- 2 files changed, 107 insertions(+), 12 deletions(-) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy index 7d6c7481d..4496f44ec 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy @@ -1,10 +1,14 @@ package edu.internet2.tier.shibboleth.admin.ui.controller +import com.fasterxml.jackson.databind.ObjectMapper import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository import edu.internet2.tier.shibboleth.admin.ui.service.JPAEntityDescriptorServiceImpl import edu.internet2.tier.shibboleth.admin.ui.service.JPAEntityServiceImpl +import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator +import groovy.json.JsonOutput +import groovy.json.JsonSlurper import org.springframework.test.web.servlet.setup.MockMvcBuilders import spock.lang.Specification import spock.lang.Subject @@ -15,10 +19,14 @@ import static org.hamcrest.CoreMatchers.containsString import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.* class EntityDescriptorControllerTests extends Specification { + def generator + def mapper + def service def entityDescriptorRepository = Mock(EntityDescriptorRepository) @@ -27,15 +35,25 @@ class EntityDescriptorControllerTests extends Specification { it } + def mockMvc + @Subject - def controller = new EntityDescriptorController ( - entityDescriptorRepository: entityDescriptorRepository, - openSamlObjects: openSamlObjects, - entityDescriptorService: new JPAEntityDescriptorServiceImpl(openSamlObjects, new JPAEntityServiceImpl(openSamlObjects)) - ) + def controller + + def setup() { + generator = new TestObjectGenerator() + mapper = new ObjectMapper() + service = new JPAEntityDescriptorServiceImpl(openSamlObjects, new JPAEntityServiceImpl(openSamlObjects)) + controller = new EntityDescriptorController ( + entityDescriptorRepository: entityDescriptorRepository, + openSamlObjects: openSamlObjects, + entityDescriptorService: service + ) + + mockMvc = MockMvcBuilders.standaloneSetup(controller).build() + } - def mockMvc = MockMvcBuilders.standaloneSetup(controller).build() def 'GET /EntityDescriptors with empty repository'() { given: @@ -340,4 +358,53 @@ class EntityDescriptorControllerTests extends Specification { result.andExpect(status().isOk()) .andExpect(content().json(expectedJsonBody, true)) } + + def "PUT /EntityDescriptor updates entity descriptors properly"() { + given: + def entityDescriptor = generator.buildEntityDescriptor() + def updatedEntityDescriptor = generator.buildEntityDescriptor() + updatedEntityDescriptor.resourceId = entityDescriptor.resourceId + def updatedEntityDescriptorRepresentation = service.createRepresentationFromDescriptor(updatedEntityDescriptor) + updatedEntityDescriptorRepresentation.version = entityDescriptor.hashCode() + def postedJsonBody = mapper.writeValueAsString(updatedEntityDescriptorRepresentation) + + def resourceId = entityDescriptor.resourceId + + 1 * entityDescriptorRepository.findByResourceId(resourceId) >> entityDescriptor + 1 * entityDescriptorRepository.save(_) >> updatedEntityDescriptor + + when: + def result = mockMvc.perform( + put("/api/EntityDescriptor/$resourceId") + .contentType(APPLICATION_JSON_UTF8) + .content(postedJsonBody)) + + then: + def expectedJson = new JsonSlurper().parseText(postedJsonBody) + expectedJson << [version: updatedEntityDescriptor.hashCode()] + result.andExpect(status().isOk()) + .andExpect(content().json(JsonOutput.toJson(expectedJson), true)) + } + + def "PUT /EntityDescriptor 409's if the version numbers don't match"() { + given: + def entityDescriptor = generator.buildEntityDescriptor() + def updatedEntityDescriptor = generator.buildEntityDescriptor() + updatedEntityDescriptor.resourceId = entityDescriptor.resourceId + def updatedEntityDescriptorRepresentation = service.createRepresentationFromDescriptor(updatedEntityDescriptor) + def postedJsonBody = mapper.writeValueAsString(updatedEntityDescriptorRepresentation) + + def resourceId = entityDescriptor.resourceId + + 1 * entityDescriptorRepository.findByResourceId(resourceId) >> entityDescriptor + + when: + def result = mockMvc.perform( + put("/api/EntityDescriptor/$resourceId") + .contentType(APPLICATION_JSON_UTF8) + .content(postedJsonBody)) + + then: + result.andExpect(status().is(409)) + } } 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/FilterControllerTests.groovy index 06be14ccb..a32940d89 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/FilterControllerTests.groovy @@ -162,10 +162,9 @@ class FilterControllerTests extends Specification { def randomFilter = testObjectGenerator.buildEntityAttributesFilter() def updatedFilter = testObjectGenerator.buildEntityAttributesFilter() updatedFilter.resourceId = randomFilter.resourceId - def postedJsonBodyWithoutVersion = mapper.writeValueAsString( - filterService.createRepresentationFromFilter(updatedFilter)) - def postedJsonBodyWithVersion = new JsonSlurper().parseText(postedJsonBodyWithoutVersion) - postedJsonBodyWithVersion << [version: randomFilter.hashCode()] + def updatedFilterRepresentation = filterService.createRepresentationFromFilter(updatedFilter) + updatedFilterRepresentation.setVersion(randomFilter.hashCode()) + def postedJsonBody = mapper.writeValueAsString(updatedFilterRepresentation) def originalMetadataResolver = new MetadataResolver() originalMetadataResolver.setResourceId(randomGenerator.randomId()) @@ -185,11 +184,40 @@ class FilterControllerTests extends Specification { def result = mockMvc.perform( put("/api/MetadataResolver/foo/Filter/$filterUUID") .contentType(APPLICATION_JSON_UTF8) - .content(JsonOutput.toJson(postedJsonBodyWithVersion))) + .content(postedJsonBody)) then: + def expectedJson = new JsonSlurper().parseText(postedJsonBody) + expectedJson << [version: updatedFilter.hashCode()] result.andExpect(status().isOk()) - .andExpect(content().json(postedJsonBodyWithoutVersion, true)) + .andExpect(content().json(JsonOutput.toJson(expectedJson), true)) + } + + def "FilterController.update 409's if the version numbers don't match"() { + given: + def randomFilter = testObjectGenerator.buildEntityAttributesFilter() + def updatedFilter = testObjectGenerator.buildEntityAttributesFilter() + updatedFilter.resourceId = randomFilter.resourceId + def postedJsonBody = mapper.writeValueAsString( + filterService.createRepresentationFromFilter(updatedFilter)) + + def originalMetadataResolver = new MetadataResolver() + originalMetadataResolver.setResourceId(randomGenerator.randomId()) + originalMetadataResolver.setMetadataFilters(testObjectGenerator.buildFilterList()) + originalMetadataResolver.getMetadataFilters().add(randomFilter) + + 1 * metadataResolverRepository.findAll() >> [originalMetadataResolver] + + def filterUUID = randomFilter.getResourceId() + + when: + def result = mockMvc.perform( + put("/api/MetadataResolver/foo/Filter/$filterUUID") + .contentType(APPLICATION_JSON_UTF8) + .content(postedJsonBody)) + + then: + result.andExpect(status().is(409)) } EntityAttributesFilter chooseRandomFilterFromList(List filters) {