/**
* Copyright (C) 2012-2014 Gist Labs, LLC. (http://gistlabs.com)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.gistlabs.mechanize.document.json.hypermedia;
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import com.gistlabs.mechanize.document.json.hypermedia.JsonLink;
import com.gistlabs.mechanize.document.json.hypermedia.JsonLinkFinder;
import com.gistlabs.mechanize.document.json.node.JsonNode;
import com.gistlabs.mechanize.document.json.node.JsonNodeTestCase;
import com.gistlabs.mechanize.util.Util;
public class JsonLinkFinderTest extends JsonNodeTestCase {
JsonNode json;
JsonLinkFinder finder = new JsonLinkFinder();
@Before
public void parseJson() {
String jsonString = Util.getStringFromInputStream(getClass().getResourceAsStream("find-links.json"));
json = from(jsonString);
}
@Test
public void testFindingOneHref() {
JsonNode one = json.find("one");
List<JsonLink> links = finder.findOn(one);
assertEquals(1, links.size());
JsonLink hrefLink = links.get(0);
assertEquals(hrefLink.node(), one);
}
@Test
public void testFindingTwoLinks() {
JsonNode two = json.find("two");
List<JsonLink> links = finder.findOn(two);
assertEquals(2, links.size());
// collect data from the json
Map<String, String> data = new HashMap<String, String>();
for (String name : two.getAttributeNames()) {
data.put(name, two.getAttribute(name));
}
// make sure the values all match
for (JsonLink link : links) {
assertEquals(data.get(link.attrName()), link.uri());
}
}
@Test
public void testFindingThreeLinks() {
JsonNode three = json.find("three");
List<JsonLink> links = finder.findOn(three);
assertEquals(3, links.size());
}
@Test
public void testLinkRelIsName() {
JsonNode one = json.find("rel-is-name");
List<JsonLink> links = finder.findOn(one);
assertEquals(1, links.size());
JsonLink hrefLink = links.get(0);
assertEquals("rel-is-name", hrefLink.linkRel());
}
@Test
public void testLinkRelIsRel() {
JsonNode one = json.find("rel-is-rel");
List<JsonLink> links = finder.findOn(one);
assertEquals(1, links.size());
JsonLink hrefLink = links.get(0);
assertEquals("self", hrefLink.linkRel());
}
@Test
public void testLinkRelIsPrefix() {
JsonNode one = json.find("rel-is-prefix");
List<JsonLink> links = finder.findOn(one);
assertEquals(1, links.size());
JsonLink hrefLink = links.get(0);
assertEquals("prefix", hrefLink.linkRel());
}
@Test
public void testNestedLinksDepthOne() {
JsonNode node = json.find("nested-links");
List<JsonLink> links = finder.findOn(node);
assertEquals(1, links.size());
JsonLink hrefLink = links.get(0);
assertEquals("self", hrefLink.linkRel());
}
@Test
public void testNestedLinksDepthChildren() {
JsonNode node = json.find("nested-links");
List<JsonLink> links = finder.findWithChildren(node);
assertEquals(3, links.size());
JsonLink next = links.get(1); // this index is dependent on ordering of children
assertEquals("next", next.linkRel());
}
@Test
public void testNestedLinksRecursive() {
JsonNode node = json.find("nested-links");
List<JsonLink> links = finder.findRecursive(node);
assertEquals(5, links.size());
}
}