/* * Copyright 2012-2017 the original author or authors. * * 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 io.spring.initializr.web.mapper; import io.spring.initializr.metadata.Dependency; import io.spring.initializr.metadata.InitializrMetadata; import io.spring.initializr.metadata.Link; import io.spring.initializr.test.metadata.InitializrMetadataTestBuilder; import org.json.JSONObject; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * @author Stephane Nicoll */ public class InitializrMetadataJsonMapperTests { private final InitializrMetadataJsonMapper jsonMapper = new InitializrMetadataV21JsonMapper(); @Test public void withNoAppUrl() { InitializrMetadata metadata = new InitializrMetadataTestBuilder() .addType("foo", true, "/foo.zip", "none", "test") .addDependencyGroup("foo", "one", "two").build(); String json = jsonMapper.write(metadata, null); JSONObject result = new JSONObject(json); assertEquals("/foo.zip?type=foo{&dependencies,packaging,javaVersion,language,bootVersion," + "groupId,artifactId,version,name,description,packageName}", get(result, "_links.foo.href")); } @Test public void withAppUrl() { InitializrMetadata metadata = new InitializrMetadataTestBuilder() .addType("foo", true, "/foo.zip", "none", "test") .addDependencyGroup("foo", "one", "two").build(); String json = jsonMapper.write(metadata, "http://server:8080/my-app"); JSONObject result = new JSONObject(json); assertEquals("http://server:8080/my-app/foo.zip?type=foo{&dependencies,packaging,javaVersion," + "language,bootVersion,groupId,artifactId,version,name,description,packageName}", get(result, "_links.foo.href")); } @Test public void linksRendered() { Dependency dependency = Dependency.withId("foo", "com.example", "foo"); dependency.getLinks().add(Link.create("guide", "https://example.com/how-to")); dependency.getLinks().add(Link.create("reference", "https://example.com/doc")); InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup("test", dependency).build(); String json = jsonMapper.write(metadata, null); int first = json.indexOf("https://example.com/how-to"); int second = json.indexOf("https://example.com/doc"); // JSON objects are not ordered assertTrue(first > 0); assertTrue(second > 0); } private Object get(JSONObject result, String path) { String[] nodes = path.split("\\."); for (int i = 0; i < nodes.length - 1; i++) { String node = nodes[i]; result = result.getJSONObject(node); } return result.getString(nodes[nodes.length - 1]); } }