From da47b15aef9a88e6fe266facf754314a38cdad01 Mon Sep 17 00:00:00 2001 From: Yegor Bugayenko Date: Mon, 2 Apr 2018 17:20:00 +0300 Subject: [PATCH] #834 RqHref.Smart fixed --- src/main/java/org/takes/rq/RqHref.java | 9 ++++---- src/test/java/org/takes/rq/RqHrefTest.java | 24 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/takes/rq/RqHref.java b/src/main/java/org/takes/rq/RqHref.java index eceda9558..21fd29d6b 100644 --- a/src/main/java/org/takes/rq/RqHref.java +++ b/src/main/java/org/takes/rq/RqHref.java @@ -26,6 +26,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; +import java.net.URI; import java.util.Iterator; import lombok.EqualsAndHashCode; import org.takes.HttpException; @@ -138,12 +139,12 @@ public InputStream body() throws IOException { * @since 0.14 */ public Href home() throws IOException { + final URI full = URI.create(this.href().toString()); return new Href( String.format( - "http://%s/", - new RqHeaders.Smart( - new RqHeaders.Base(this) - ).single("Host") + "%s://%s/", + full.getScheme(), + full.getHost() ) ); } diff --git a/src/test/java/org/takes/rq/RqHrefTest.java b/src/test/java/org/takes/rq/RqHrefTest.java index bbf099cc0..136947b8b 100644 --- a/src/test/java/org/takes/rq/RqHrefTest.java +++ b/src/test/java/org/takes/rq/RqHrefTest.java @@ -37,6 +37,7 @@ * @version $Id$ * @since 0.1 */ +@SuppressWarnings("PMD.AvoidDuplicateLiterals") public final class RqHrefTest { /** @@ -194,6 +195,29 @@ public void extractsHome() throws IOException { ); } + /** + * RqHref.Smart can extract home URI. + * @throws IOException If some problem inside + */ + @Test + public void extractsHomeWithProtocol() throws IOException { + MatcherAssert.assertThat( + new RqHref.Smart( + new RqHref.Base( + new RqFake( + Arrays.asList( + "GET /bye-dude?extra=343", + "Host: ff9.example.com", + "X-Forwarded-Proto: https" + ), + "" + ) + ) + ).home(), + Matchers.hasToString("https://ff9.example.com/") + ); + } + /** * RqHref.Smart can extract param with default value. * @throws IOException If some problem inside