/* © Copyright IBM Corp. 2014 * * 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 com.ibm.sbt.services.client.base; import static org.junit.Assert.assertEquals; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import com.ibm.sbt.services.BaseUnitTest; import com.ibm.sbt.services.client.connections.activitystreams.ASApplication; import com.ibm.sbt.services.client.connections.activitystreams.ASGroup; import com.ibm.sbt.services.client.connections.activitystreams.ASUser; import com.ibm.sbt.services.client.connections.activitystreams.ActivityStreamService; import com.ibm.sbt.services.client.connections.activitystreams.ActivityStreamUrls; import com.ibm.sbt.services.client.connections.communities.CommunityService; import com.ibm.sbt.services.client.connections.communities.CommunityUrls; import com.ibm.sbt.services.client.connections.files.AccessType; import com.ibm.sbt.services.client.connections.files.FileService; import com.ibm.sbt.services.client.connections.files.FileUrlParts; import com.ibm.sbt.services.client.connections.files.FileUrls; import com.ibm.sbt.services.client.connections.profiles.ProfileParams; import com.ibm.sbt.services.client.connections.profiles.ProfileService; import com.ibm.sbt.services.client.connections.profiles.ProfileUrls; import com.ibm.sbt.services.client.connections.wikis.WikiService; import com.ibm.sbt.services.client.connections.wikis.WikiUrls; /** * * @author Carlos Manias * */ public class URLBuilderTest extends BaseUnitTest { @Rule public ExpectedException thrown = ExpectedException.none(); @Test public void testGenerateURLPredefinedParameters() { CommunityService service = new CommunityService(); String communityUuid = "thisIsACommunityUuid"; // URL pattern is // "communities/service/atom/{authType}/{communityEntity}/{communityType}" String url = CommunityUrls.COMMUNITY_MEMBERS.format(service, CommunityUrls.getCommunityUuid(communityUuid)); assertEquals( "communities/service/atom/community/members?communityUuid=thisIsACommunityUuid", url); } @Test public void testGenerateURLVariableParameters() { WikiService service = new WikiService(); // URL pattern is // "wikis/{authType}/api/wiki/{wikiLabel}/page/{wikiPage}/entry" String wikiLabel = "myWikiLabel"; String pageLabel = "myPageLabel"; String url = WikiUrls.WIKI_PAGE.format(service, WikiUrls.getWikiLabel(wikiLabel), WikiUrls.getWikiPage(pageLabel)); assertEquals("wikis/basic/api/wiki/" + wikiLabel + "/page/" + pageLabel + "/entry", url); } @Test public void testGenerateURLUnsortedParameters() { WikiService service = new WikiService(); // URL pattern is // "wikis/{authType}/api/wiki/{wikiLabel}/page/{wikiPage}/entry" String wikiLabel = "myWikiLabel"; String pageLabel = "myPageLabel"; // This url has the correct parameters but in a different order. It // works regardless. The first parameter needs to be the Version, though String url = WikiUrls.WIKI_PAGE.format(service, WikiUrls.getWikiPage(pageLabel), WikiUrls.getWikiLabel(wikiLabel)); assertEquals("wikis/basic/api/wiki/" + wikiLabel + "/page/" + pageLabel + "/entry", url); } @Test public void testGenerateURLRigtNumberOfParametersButWrongParameter() { WikiService service = new WikiService(); // URL pattern is // "wikis/{authType}/api/wiki/{wikiLabel}/page/{wikiPage}/entry" String wikiLabel = "myWikiLabel"; String pageLabel = "myPageLabel"; // This url has the correct number of parameters but one of the // parameters is not correct thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Missing parameter"); String url = WikiUrls.WIKI_PAGE.format(service, WikiUrls.getWikiLabel(wikiLabel), FileUrlParts.fileId.get("dummy")); assertEquals("wikis/basic/api/wiki/" + wikiLabel + "/page/" + pageLabel + "/entry", url); } @Test public void testGenerateURLVariableAndEmptyParameters() { WikiService service = new WikiService(); // URL pattern is // "wikis/{authType}/api/wiki/{wikiLabel}/page/{wikiPage}/entry // When a parameter is empty, it is simply removed from the url String url2 = WikiUrls.WIKI_PAGE.format(service, WikiUrls.getWikiLabel(""), WikiUrls.getWikiPage("myPageLabel")); assertEquals("wikis/basic/api/wiki/page/myPageLabel/entry", url2); } @Test public void testGenerateURLMissingParameters() { WikiService service = new WikiService(); String userId = "abcde"; String fileId = "1234"; // This would be the url with all the needed parameters // String url = // FileUrls.SINGLE_COMMENT_USER_FILE.format(getApiVersion(), // getAuthTypeBasic(), AccessType.PUBLIC.get(), // FileUrlParts.userId.get(userId), FileUrlParts.fileId.get(fileId), // FileUrlParts.commentId.get(commentId)); // This url misses the last parameter, commentId thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Missing parameter"); FileUrls.USERLIBRARY_DOCUMENT_FEED.format(service, FileUrlParts.userId.get(userId), FileUrlParts.fileId.get(fileId)); } @Test public void testGenerateURLExtraParameters() { FileService service = new FileService(); String userId = "abcde"; String fileId = "1234"; String commentId = "a1b2c3"; // This would be the url with all the needed parameters // String url = // FileUrls.SINGLE_COMMENT_USER_FILE.format(getApiVersion(), // getAuthTypeBasic(), AccessType.PUBLIC.get(), // FileUrlParts.userId.get(userId), FileUrlParts.fileId.get(fileId), // FileUrlParts.commentId.get(commentId)); String url = FileUrls.USERLIBRARY_DOCUMENT_COMMENT_ENTRY.format( service, AccessType.PUBLIC.get(), FileUrlParts.userId.get(userId), FileUrlParts.fileId.get(fileId), FileUrlParts.commentId.get(commentId), ASUser.ME.get(), WikiUrls.getWikiLabel("value")); // The last 2 parameters are // not needed, they are // simply ignored String assertUrl = "files/basic/anonymous/api/userlibrary/" + userId + "/document/" + fileId + "/comment/" + commentId + "/entry"; assertEquals(assertUrl, url); } @Test public void testGenerateURLVariableParameters2() { ActivityStreamService service = new ActivityStreamService(); // URL pattern is // "connections/opensocial/{authType}/rest/{service}/{user}/{group}/{application}" String user = "%40me"; String group = "%40all"; String app = "%40status"; String urlAssert = "connections/opensocial/basic/rest/activitystreams/" + user + "/" + group + "/" + app; String url = ActivityStreamUrls.AS_USER_GROUP_APP.format(service, ASUser.getByName("me"), ASGroup.getByName("all"), ASApplication.getByName("status")); assertEquals(urlAssert, url); String url2 = ActivityStreamUrls.AS_ME_ALL_STATUS.format(service); //URL Encodes with %40 assertEquals(urlAssert.replace("%40","@"), url2); String community = "urn:lsid:lconn.ibm.com:communities.community:a1b2c3d4c5g6"; String urlAssert2 = "connections/opensocial/basic/rest/activitystreams/" + community + "/" + group; String url3 = ActivityStreamUrls.AS_COMMUNITY_ALL.format(service, ASUser.COMMUNITY.getWithValue("a1b2c3d4c5g6")); //URL Encodes with %40 assertEquals(urlAssert2.replace("%40","@"), url3); } /** * This test uses urls with ?param1=value¶m2=value parameters */ @Test public void testGenerateUrlWithUrlParameters() { ProfileService service = new ProfileService(); String urlAssertEmail = "profiles/atom/connection.do?sourceEmail=bjordan%40renovations.com&targetEmail=fadams%40renovations.com&connectionType=colleague"; String sourceId = "bjordan@renovations.com"; String targetId = "fadams@renovations.com"; String url = ProfileUrls.CHECK_COLLEAGUE.format(service, ProfileParams.sourceId.get(sourceId), ProfileParams.targetId.get(targetId)); assertEquals(urlAssertEmail, url); } @Test public void testGenerateUrlWithMissingUrlParameters() { ProfileService service = new ProfileService(); String sourceId = "bjordan@renovations.com"; thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Missing parameter"); ProfileUrls.CHECK_COLLEAGUE.format(service, ProfileParams.sourceId.get(sourceId)); } @Test public void testGenerateUrlWithUrlParametersNameAndValue() { ProfileService service = new ProfileService(); String urlAssert = "profiles/atom/connection.do?connectionId=12345678"; String url = ProfileUrls.CONNECTION.format(service, ProfileUrls.getConnectionId("12345678")); assertEquals(urlAssert, url); } }