/*
* Copyright (c) 2010 Lockheed Martin Corporation
*
* 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.eurekastreams.web.client.utility;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.Map;
import org.eurekastreams.server.domain.EntityType;
import org.eurekastreams.server.domain.Page;
import org.eurekastreams.web.client.history.CreateUrlRequest;
import org.junit.Before;
import org.junit.Test;
/**
* Tests the link builder.
*/
public class InContextActivityLinkBuilderTest
{
/** Test data. */
private static final long ACTIVITY_ID = 87L;
/** Test data. */
private static final String STREAM_UNIQUE_ID = "mystreamentityuniqueid";
/** SUT. */
private InContextActivityLinkBuilder sut;
/**
* Setup before each test.
*/
@Before
public void setUp()
{
sut = new InContextActivityLinkBuilder();
}
/**
* Tests building activity permalink URL request.
*/
@Test
public void testBuildActivityPermalinkUrlRequestNoExtras()
{
CreateUrlRequest result =
sut.buildActivityPermalinkUrlRequest(ACTIVITY_ID, EntityType.PERSON, STREAM_UNIQUE_ID, null);
assertEquals(Page.PEOPLE, result.getPage());
assertTrue(result.getReplacePrevious());
assertEquals(1, result.getViews().size());
assertEquals(STREAM_UNIQUE_ID, result.getViews().get(0));
assertEquals(1, result.getParameters().size());
assertEquals("87", result.getParameters().get("activityId"));
}
/**
* Tests building activity permalink URL request.
*/
@Test
public void testBuildActivityPermalinkUrlRequestEmptyExtras()
{
CreateUrlRequest result =
sut.buildActivityPermalinkUrlRequest(ACTIVITY_ID, EntityType.GROUP, STREAM_UNIQUE_ID,
new HashMap<String, String>());
assertEquals(Page.GROUPS, result.getPage());
assertTrue(result.getReplacePrevious());
assertEquals(1, result.getViews().size());
assertEquals(STREAM_UNIQUE_ID, result.getViews().get(0));
assertEquals(1, result.getParameters().size());
assertEquals("87", result.getParameters().get("activityId"));
}
/**
* Tests building activity permalink URL request.
*/
@Test
public void testBuildActivityPermalinkUrlRequestExtras()
{
Map<String, String> parms = new HashMap<String, String>();
parms.put("p1", "v1");
parms.put("p2", "v2");
CreateUrlRequest result =
sut.buildActivityPermalinkUrlRequest(ACTIVITY_ID, EntityType.ORGANIZATION, STREAM_UNIQUE_ID, parms);
assertEquals(Page.ORGANIZATIONS, result.getPage());
assertTrue(result.getReplacePrevious());
assertEquals(1, result.getViews().size());
assertEquals(STREAM_UNIQUE_ID, result.getViews().get(0));
assertEquals(3, result.getParameters().size());
assertEquals("87", result.getParameters().get("activityId"));
assertEquals("v1", result.getParameters().get("p1"));
assertEquals("v2", result.getParameters().get("p2"));
}
/**
* Tests building activity permalink URL request.
*/
@Test
public void testBuildActivityPermalinkUrlRequestUnknownStreamType()
{
CreateUrlRequest result =
sut.buildActivityPermalinkUrlRequest(ACTIVITY_ID, EntityType.APPLICATION, STREAM_UNIQUE_ID, null);
assertEquals(Page.ACTIVITY, result.getPage());
assertTrue(result.getReplacePrevious());
assertTrue(result.getViews().isEmpty());
assertEquals(1, result.getParameters().size());
assertEquals("87", result.getParameters().get("activityId"));
}
/**
* Tests building activity permalink URL request.
*/
@Test
public void testBuildActivityPermalinkUrlRequestUsesStoredParams()
{
sut.addExtraParameter("p1", "v1");
sut.addExtraParameter("p2", "v2");
sut.addExtraParameter("activityId", "overwriteThis");
Map<String, String> extraParms = new HashMap<String, String>();
extraParms.put("p2", "v2a");
extraParms.put("p3", "v3");
extraParms.put("activityId", "overwriteMe");
CreateUrlRequest result =
sut
.buildActivityPermalinkUrlRequest(ACTIVITY_ID, EntityType.APPLICATION, STREAM_UNIQUE_ID,
extraParms);
assertEquals(Page.ACTIVITY, result.getPage());
assertTrue(result.getReplacePrevious());
assertTrue(result.getViews().isEmpty());
assertMap(result.getParameters(), "activityId", "87", "p1", "v1", "p2", "v2a", "p3", "v3");
}
/**
* Tests that a result map contains what is expected.
*
* @param actual
* Map actually returned.
* @param entries
* Keys and values expected to be in the map.
*/
private void assertMap(final Map<String, String> actual, final String... entries)
{
assertTrue("Test code is broken: assertMap must have key-value pairs.", entries.length % 2 == 0);
assertNotNull(actual);
assertEquals(entries.length / 2, actual.size());
for (int i = 0; i < entries.length; i += 2)
{
assertEquals(entries[i + 1], actual.get(entries[i]));
}
}
}