DATAREST-276 - Improved BaseUri to accomodate trailing slashes.
We now strip trailing and leading slashes from configured base URI to make sure the matching algorithm accommodates both lookup paths with and without trailing slashes. Added a few more tests in shape of unit tests for BaseUri.
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package org.springframework.data.rest.webmvc;
|
||||
|
||||
import static org.springframework.util.StringUtils.*;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -49,7 +51,8 @@ public class BaseUri {
|
||||
|
||||
Assert.notNull(uri, "Base URI must not be null!");
|
||||
|
||||
this.baseUri = uri;
|
||||
String uriString = uri.toString();
|
||||
this.baseUri = URI.create(trimTrailingCharacter(trimTrailingCharacter(uriString, '/'), '/'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -100,8 +103,6 @@ public class BaseUri {
|
||||
|
||||
Assert.notNull(lookupPath, "Lookup path must not be null!");
|
||||
|
||||
lookupPath = StringUtils.trimTrailingCharacter(lookupPath, '/');
|
||||
|
||||
if (!baseUri.isAbsolute()) {
|
||||
|
||||
String uri = baseUri.toString();
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright 2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.rest.webmvc;
|
||||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link BaseUri}.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class BaseUriUnitTests {
|
||||
|
||||
/**
|
||||
* @see DATAREST-276
|
||||
*/
|
||||
@Test
|
||||
public void doesNotMatchNonOverlap() {
|
||||
|
||||
assertThat(new BaseUri(URI.create("foo")).getRepositoryLookupPath("/bar"), is(nullValue()));
|
||||
assertThat(new BaseUri(URI.create("http://localhost:8080/foo/")).getRepositoryLookupPath("/bar"), is(nullValue()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAREST-276
|
||||
*/
|
||||
@Test
|
||||
public void matchesSimpleBaseUri() {
|
||||
|
||||
BaseUri uri = new BaseUri(URI.create("foo"));
|
||||
|
||||
assertThat(uri.getRepositoryLookupPath("/foo"), isEmptyString());
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAREST-276
|
||||
*/
|
||||
@Test
|
||||
public void ignoresTrailingSlash() {
|
||||
|
||||
BaseUri uri = new BaseUri(URI.create("foo/"));
|
||||
|
||||
assertThat(uri.getRepositoryLookupPath("/foo"), isEmptyString());
|
||||
assertThat(uri.getRepositoryLookupPath("/foo/"), is("/"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAREST-276
|
||||
*/
|
||||
@Test
|
||||
public void ignoresLeadingSlash() {
|
||||
|
||||
BaseUri uri = new BaseUri(URI.create("/foo"));
|
||||
|
||||
assertThat(uri.getRepositoryLookupPath("/foo"), isEmptyString());
|
||||
assertThat(uri.getRepositoryLookupPath("/foo/"), is("/"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAREST-276
|
||||
*/
|
||||
@Test
|
||||
public void matchesAbsoluteBaseUriOnOverlap() {
|
||||
|
||||
BaseUri uri = new BaseUri(URI.create("http://localhost:8080/foo/"));
|
||||
|
||||
assertThat(uri.getRepositoryLookupPath("/foo"), isEmptyString());
|
||||
assertThat(uri.getRepositoryLookupPath("/foo/"), is("/"));
|
||||
assertThat(uri.getRepositoryLookupPath("/foo/people"), is("/people"));
|
||||
assertThat(uri.getRepositoryLookupPath("/foo/people/"), is("/people/"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user