/**
* Copyright (c) Codice Foundation
* <p/>
* This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
* General Public License as published by the Free Software Foundation, either version 3 of the
* License, or any later version.
* <p/>
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. A copy of the GNU Lesser General Public License
* is distributed along with this program and can be found at
* <http://www.gnu.org/licenses/lgpl.html>.
*/
package org.codice.ddf.endpoints.rest.action;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import java.util.Date;
import org.junit.Test;
import ddf.action.Action;
import ddf.catalog.data.impl.MetacardImpl;
public class TestViewMetacardActionProvider extends AbstractActionProviderTest {
@Test
public void testMetacardNull() {
assertEquals(null, new ViewMetacardActionProvider(ACTION_PROVIDER_ID).getAction(null));
}
@Test
public void testUriSyntaxException() {
MetacardImpl metacard = new MetacardImpl();
metacard.setId(SAMPLE_ID);
AbstractMetacardActionProvider actionProvider = new ViewMetacardActionProvider(
ACTION_PROVIDER_ID);
actionProvider.configurationUpdateCallback(
createMap(SAMPLE_PROTOCOL, "23^&*#", SAMPLE_PORT, SAMPLE_SERVICES_ROOT,
SAMPLE_SOURCE_NAME));
assertNull("A bad url should have been caught and a null action returned.",
actionProvider.getAction(metacard));
}
@Test
public void testMetacardIdUrlEncodedSpace() {
// given
MetacardImpl metacard = new MetacardImpl();
metacard.setId("abd ef");
AbstractMetacardActionProvider actionProvider = configureActionProvider(
new ViewMetacardActionProvider(ACTION_PROVIDER_ID));
// when
String url = actionProvider.getAction(metacard).getUrl().toString();
// then
assertThat(url, is(expectedDefaultAddressWith("abd+ef")));
}
@Test
public void testMetacardIdUrlEncodedAmpersand() {
// given
MetacardImpl metacard = new MetacardImpl();
metacard.setId("abd&ef");
AbstractMetacardActionProvider actionProvider = configureActionProvider(
new ViewMetacardActionProvider(ACTION_PROVIDER_ID));
// when
String url = actionProvider.getAction(metacard).getUrl().toString();
// then
assertThat(url, is(expectedDefaultAddressWith("abd%26ef")));
}
@Test
public void testMetacardIdNull() {
MetacardImpl metacard = new MetacardImpl();
metacard.setId(null);
AbstractMetacardActionProvider actionProvider = configureActionProvider(
new ViewMetacardActionProvider(ACTION_PROVIDER_ID));
assertNull("An action should not have been created when no id is provided.",
actionProvider.getAction(metacard));
}
@Test
public void testNoConfigSettings() {
MetacardImpl metacard = new MetacardImpl();
metacard.setId(SAMPLE_ID);
AbstractMetacardActionProvider actionProvider = new ViewMetacardActionProvider(
ACTION_PROVIDER_ID);
assertNull(actionProvider.getAction(metacard));
}
@Test
public void testIpNull() {
MetacardImpl metacard = new MetacardImpl();
metacard.setId(SAMPLE_ID);
AbstractMetacardActionProvider actionProvider = new ViewMetacardActionProvider(
ACTION_PROVIDER_ID);
actionProvider.configurationUpdateCallback(
createMap(SAMPLE_PROTOCOL, null, SAMPLE_PORT, SAMPLE_SERVICES_ROOT,
SAMPLE_SOURCE_NAME));
assertNull("An action should not have been created when ip is null.",
actionProvider.getAction(metacard));
}
@Test
public void testIpUnknown() {
MetacardImpl metacard = new MetacardImpl();
metacard.setId(SAMPLE_ID);
AbstractMetacardActionProvider actionProvider = new ViewMetacardActionProvider(
ACTION_PROVIDER_ID);
actionProvider.configurationUpdateCallback(
createMap(SAMPLE_PROTOCOL, "0.0.0.0", SAMPLE_PORT, SAMPLE_SERVICES_ROOT,
SAMPLE_SOURCE_NAME));
assertNull("An action should not have been created when ip is unknown (0.0.0.0).",
actionProvider.getAction(metacard));
}
@Test
public void testPortNull() {
MetacardImpl metacard = new MetacardImpl();
metacard.setId(SAMPLE_ID);
AbstractMetacardActionProvider actionProvider = new ViewMetacardActionProvider(
ACTION_PROVIDER_ID);
actionProvider.configurationUpdateCallback(
createMap(SAMPLE_PROTOCOL, SAMPLE_IP, null, SAMPLE_SERVICES_ROOT,
SAMPLE_SOURCE_NAME));
assertNull("An action should not have been created when port is null.",
actionProvider.getAction(metacard));
}
@Test
public void testContextRootNull() {
MetacardImpl metacard = new MetacardImpl();
metacard.setId(SAMPLE_ID);
AbstractMetacardActionProvider actionProvider = new ViewMetacardActionProvider(
ACTION_PROVIDER_ID);
actionProvider.configurationUpdateCallback(
createMap(SAMPLE_PROTOCOL, SAMPLE_IP, SAMPLE_PORT, null, SAMPLE_SOURCE_NAME));
assertNull("An action should not have been created when context root is null.",
actionProvider.getAction(metacard));
}
@Test
public void testNonMetacard() {
AbstractMetacardActionProvider actionProvider = configureActionProvider(
new ViewMetacardActionProvider(ACTION_PROVIDER_ID));
assertNull("An action when metacard was not provided.",
actionProvider.getAction(new Date()));
}
@Test
public void testMetacard() {
// given
MetacardImpl metacard = new MetacardImpl();
metacard.setId(SAMPLE_ID);
AbstractMetacardActionProvider actionProvider = configureActionProvider(
new ViewMetacardActionProvider(ACTION_PROVIDER_ID));
// when
Action action = actionProvider.getAction(metacard);
// then
assertEquals(ViewMetacardActionProvider.TITLE, action.getTitle());
assertEquals(ViewMetacardActionProvider.DESCRIPTION, action.getDescription());
assertThat(action.getUrl().toString(), is(expectedDefaultAddressWith(metacard.getId())));
assertEquals(ACTION_PROVIDER_ID, actionProvider.getId());
}
@Test
public void testFederatedMetacard() {
// given
MetacardImpl metacard = new MetacardImpl();
metacard.setId(SAMPLE_ID);
String newSourceName = "newSource";
metacard.setSourceId(newSourceName);
AbstractMetacardActionProvider actionProvider = configureActionProvider(
new ViewMetacardActionProvider(ACTION_PROVIDER_ID));
// when
Action action = actionProvider.getAction(metacard);
// then
assertEquals(ViewMetacardActionProvider.TITLE, action.getTitle());
assertEquals(ViewMetacardActionProvider.DESCRIPTION, action.getDescription());
assertThat(action.getUrl().toString(),
is(expectedDefaultAddressWith(metacard.getId(), newSourceName)));
assertEquals(ACTION_PROVIDER_ID, actionProvider.getId());
}
@Test
public void testSecureMetacard() {
MetacardImpl metacard = new MetacardImpl();
metacard.setId(SAMPLE_ID);
AbstractMetacardActionProvider actionProvider = configureSecureActionProvider();
Action action = actionProvider.getAction(metacard);
assertEquals(ViewMetacardActionProvider.TITLE, action.getTitle());
assertEquals(ViewMetacardActionProvider.DESCRIPTION, action.getDescription());
assertEquals(
SAMPLE_SECURE_PROTOCOL + SAMPLE_IP + ":" + SAMPLE_SECURE_PORT + SAMPLE_SERVICES_ROOT
+ SAMPLE_PATH + SAMPLE_SOURCE_NAME + "/" + metacard.getId(),
action.getUrl().toString());
assertEquals(ACTION_PROVIDER_ID, actionProvider.getId());
}
@Test
public void testNullProtocol() {
MetacardImpl metacard = new MetacardImpl();
metacard.setId(SAMPLE_ID);
AbstractMetacardActionProvider actionProvider = new ViewMetacardActionProvider(
ACTION_PROVIDER_ID);
actionProvider.configurationUpdateCallback(
createMap(null, SAMPLE_IP, SAMPLE_SECURE_PORT, SAMPLE_SERVICES_ROOT,
SAMPLE_SOURCE_NAME));
Action action = actionProvider.getAction(metacard);
assertNull(action);
}
private String expectedDefaultAddressWith(String id, String sourceName) {
return SAMPLE_PROTOCOL + SAMPLE_IP + ":" + SAMPLE_PORT + SAMPLE_SERVICES_ROOT + SAMPLE_PATH
+ sourceName + "/" + id;
}
private String expectedDefaultAddressWith(String id) {
return expectedDefaultAddressWith(id, SAMPLE_SOURCE_NAME);
}
}