diff --git a/src/main/java/com/meilisearch/sdk/http/URLBuilder.java b/src/main/java/com/meilisearch/sdk/http/URLBuilder.java new file mode 100644 index 00000000..e4f952eb --- /dev/null +++ b/src/main/java/com/meilisearch/sdk/http/URLBuilder.java @@ -0,0 +1,71 @@ +package com.meilisearch.sdk.http; + +import lombok.Getter; + +@Getter +public class URLBuilder { + private StringBuilder routes, params; + + public URLBuilder() { + routes = new StringBuilder(); + params = new StringBuilder(); + } + + public URLBuilder(String rootRoute) { + routes = new StringBuilder(rootRoute); + params = new StringBuilder(); + } + + public URLBuilder addSubroute(String route) { + routes.append("/"); + routes.append(route); + return this; + } + + public URLBuilder addParameter(String parameter, String value) { + if (value != "") { + addSeparator(); + params.append(parameter); + params.append("="); + params.append(value); + } + return this; + } + + public URLBuilder addParameter(String parameter, int value) { + if (value > -1) { + addSeparator(); + params.append(parameter); + params.append("="); + params.append(value); + } + return this; + } + + public URLBuilder addParameter(String parameter, String[] value) { + if (value != null && value.length > 0) { + addSeparator(); + params.append(parameter); + params.append("="); + params.append(formatArrayParameters(value)); + } + return this; + } + + private URLBuilder addSeparator() { + if (params.length() > 0) { + params.append("&"); + } else { + params.append("?"); + } + return this; + } + + private String formatArrayParameters(String[] fields) { + return String.join(",", fields); + } + + public String getURL() { + return routes.toString() + params.toString(); + } +} diff --git a/src/test/java/com/meilisearch/sdk/http/URLBuilderTest.java b/src/test/java/com/meilisearch/sdk/http/URLBuilderTest.java new file mode 100644 index 00000000..7d352c68 --- /dev/null +++ b/src/test/java/com/meilisearch/sdk/http/URLBuilderTest.java @@ -0,0 +1,76 @@ +package com.meilisearch.sdk.http; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +public class URLBuilderTest { + + private final URLBuilder classToTest = new URLBuilder(); + + @Test + void addSubroute() { + classToTest.addSubroute("route"); + + assertEquals("/route", classToTest.getRoutes().toString()); + } + + @Test + void addSubrouteWithMultipleRoutes() { + classToTest + .addSubroute("route1") + .addSubroute("route2") + .addSubroute("route3") + .addSubroute("route4"); + + assertEquals("/route1/route2/route3/route4", classToTest.getRoutes().toString()); + } + + @Test + void addParameterStringInt() { + classToTest.addParameter("parameter1", 1); + assertEquals("?parameter1=1", classToTest.getParams().toString()); + + classToTest.addParameter("parameter2", 2); + assertEquals("?parameter1=1¶meter2=2", classToTest.getParams().toString()); + + classToTest.addParameter("parameter3", 3); + assertEquals("?parameter1=1¶meter2=2¶meter3=3", classToTest.getParams().toString()); + } + + @Test + void addParameterStringString() { + classToTest.addParameter("parameter1", "1"); + assertEquals("?parameter1=1", classToTest.getParams().toString()); + + classToTest.addParameter("parameter2", "2"); + assertEquals("?parameter1=1¶meter2=2", classToTest.getParams().toString()); + + classToTest.addParameter("parameter3", "3"); + assertEquals("?parameter1=1¶meter2=2¶meter3=3", classToTest.getParams().toString()); + } + + @Test + void addParameterStringArray() { + classToTest.addParameter("parameter1", new String[] {"1", "a"}); + assertEquals("?parameter1=1,a", classToTest.getParams().toString()); + + classToTest.addParameter("parameter2", new String[] {"2", "b"}); + assertEquals("?parameter1=1,a¶meter2=2,b", classToTest.getParams().toString()); + + classToTest.addParameter("parameter3", new String[] {"3", "c"}); + assertEquals( + "?parameter1=1,a¶meter2=2,b¶meter3=3,c", + classToTest.getParams().toString()); + } + + @Test + void getURL() { + assertEquals("", classToTest.getURL()); + + classToTest.addSubroute("routes"); + classToTest.addParameter("parameter", "value"); + + assertEquals("/routes?parameter=value", classToTest.getURL()); + } +}