Skip to content

Commit

Permalink
Merged in SHIBUI-1500 (pull request #375)
Browse files Browse the repository at this point in the history
SHIBUI-1500
  • Loading branch information
dima767 authored and rmathis committed Sep 19, 2019
2 parents 88161ce + 4648443 commit 993f1d7
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package edu.internet2.tier.shibboleth.admin.ui.controller

import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter
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.resolvers.DynamicHttpMetadataResolver
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver
Expand Down Expand Up @@ -136,6 +137,23 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi
noExceptionThrown()
}

def "SHIBUI-1500"() {
MetadataResolver mr = new FileBackedHttpMetadataResolver(name: 'shibui-1500')
mr = repository.save(mr)

when: 'add a filter'
def filter = new EntityRoleWhiteListFilter(name: 'shibui-1500', retainedRoles: ['role1'])
mr.addFilter(filter)
mr = repository.save(mr)

def allVersions = getAllMetadataResolverVersions(mr.resourceId, List)
def mrv1 = getMetadataResolverForVersion(mr.resourceId, allVersions.body[0].id, MetadataResolver)
def mrv2 = getMetadataResolverForVersion(mr.resourceId, allVersions.body[1].id, MetadataResolver)

then:
(mrv1.getBody() as MetadataResolver).modifiedDate < (mrv2.getBody() as MetadataResolver).modifiedDate
}

private getAllMetadataResolverVersions(String resourceId, responseType) {
this.restTemplate.getForEntity(resourceUriFor(ALL_VERSIONS_URI, resourceId), responseType)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public ResponseEntity<?> getOne(@PathVariable String metadataResolverId, @PathVa
@PostMapping("/Filters")
public ResponseEntity<?> create(@PathVariable String metadataResolverId, @RequestBody MetadataFilter createdFilter) {
MetadataResolver metadataResolver = findResolverOrThrowHttp404(metadataResolverId);
metadataResolver.getMetadataFilters().add(createdFilter);
metadataResolver.addFilter(createdFilter);
MetadataResolver persistedMr = repository.save(metadataResolver);

// we reload the filters here after save
Expand Down Expand Up @@ -153,6 +153,8 @@ public ResponseEntity<?> delete(@PathVariable String metadataResolverId,
throw HTTP_404_CLIENT_ERROR_EXCEPTION.get();
}
resolver.setMetadataFilters(updatedFilters);
//To support envers versioning from MetadataResolver side
resolver.markAsModified();
repository.save(resolver);
filterRepository.delete(filterToDelete);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@ public int getVersion() {
return this.hashCode();
}

public void addFilter(MetadataFilter metadataFilter) {
//To make sure that Spring Data auditing infrastructure recognizes update and "touched" modifiedDate
markAsModified();
this.metadataFilters.add(metadataFilter);
}

public void markAsModified() {
this.versionModifiedTimestamp = System.currentTimeMillis();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,27 @@ class MetadataFiltersControllerIntegrationTests extends Specification {
resolverResult_3.body.metadataFilters.size == 5
}

def "POST new Filter updates resolver's modifiedDate - SHIBUI-1500"() {
given: 'MetadataResolver with attached entity attributes is available in data store'
def resolver = generator.buildRandomMetadataResolverOfType('FileBacked')
def filter = generator.entityAttributesFilter()
def resolverResourceId = resolver.resourceId
metadataResolverRepository.save(resolver)
MetadataResolver openSamlRepresentation = metadataResolverConverterService.convertToOpenSamlRepresentation(resolver)
OpenSamlChainingMetadataResolverUtil.updateChainingMetadataResolver((OpenSamlChainingMetadataResolver) chainingMetadataResolver, openSamlRepresentation)

when: 'Resolver without filter is fetched'
def result = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", String)
def originalModifiedDate = jsonSlurper.parseText(result.body).modifiedDate

and: 'POST call is made with new filter'
result = restTemplate.postForEntity("$BASE_URI/$resolverResourceId/Filters", filter, String)
def afterFilterAddedModifiedDate = jsonSlurper.parseText(result.body).modifiedDate

then:
originalModifiedDate < afterFilterAddedModifiedDate
}

private HttpEntity<String> createRequestHttpEntityFor(Closure jsonBodySupplier) {
new HttpEntity<String>(jsonBodySupplier(), ['Content-Type': 'application/json'] as HttpHeaders)
}
Expand All @@ -203,4 +224,4 @@ class MetadataFiltersControllerIntegrationTests extends Specification {
}
}
}
}
}

0 comments on commit 993f1d7

Please sign in to comment.