/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.core.rest;
import com.google.common.reflect.TypeToken;
import org.eclipse.che.api.core.rest.shared.dto.Link;
import org.eclipse.che.dto.server.DtoFactory;
import org.eclipse.che.dto.server.JsonArrayImpl;
import org.eclipse.che.dto.server.JsonStringMapImpl;
import org.testng.annotations.Test;
import java.io.IOException;
import java.util.Set;
import static java.util.Collections.singleton;
import static java.util.Collections.singletonList;
import static java.util.Collections.singletonMap;
import static org.eclipse.che.api.core.util.LinksHelper.createLink;
import static org.testng.Assert.assertEquals;
/**
* Tests of {@link DefaultHttpJsonResponse}.
*
* @author Yevhenii Voevodin
*/
public class DefaultHttpJsonResponseTest {
@Test
public void shouldReturnStringAsItIsIfStringIsRequested() throws Exception {
final DefaultHttpJsonResponse response = new DefaultHttpJsonResponse("string response", 200);
assertEquals(response.asString(), "string response");
}
@Test
public void shouldReturnJsonSerializableInstanceIfItWasRequested() throws Exception {
final Link testLink = createLink("POST", "http://localhost:8080", "rel");
final DefaultHttpJsonResponse response = new DefaultHttpJsonResponse(DtoFactory.getInstance().toJson(testLink), 200);
assertEquals(response.asDto(Link.class), testLink);
}
@Test
public void shouldDeserializeResponseToGivenType() throws Exception {
final String responseBody = DtoFactory.getInstance().toJson(new JsonArrayImpl<>(singletonList("element")));
final DefaultHttpJsonResponse response = new DefaultHttpJsonResponse(responseBody, 200);
assertEquals(response.as(Set.class, new TypeToken<Set<String>>() { }.getType()), singleton("element"));
}
@Test
public void shouldBeAbleToRequestProperties() throws Exception {
final String responseBody = DtoFactory.getInstance().toJson(new JsonStringMapImpl<>(singletonMap("key", "value")));
final DefaultHttpJsonResponse response = new DefaultHttpJsonResponse(responseBody, 200);
assertEquals(response.asProperties(), singletonMap("key", "value"));
}
@Test
public void shouldBeAbleToRequestListOfJsonSerializableElements() throws Exception {
final Link testLink = createLink("POST", "http://localhost:8080", "rel");
final String responseBody = DtoFactory.getInstance().toJson(new JsonArrayImpl<>(singletonList(testLink)));
final DefaultHttpJsonResponse response = new DefaultHttpJsonResponse(responseBody, 200);
assertEquals(response.asList(Link.class), singletonList(testLink));
}
@Test(expectedExceptions = NullPointerException.class)
public void shouldThrowNullPointerExceptionWhenClazzIsNull() throws Exception {
new DefaultHttpJsonResponse("{}", 200).as(null, null);
}
@Test(expectedExceptions = NullPointerException.class)
public void shouldThrowNullPointerExceptionWhenDtoInterfaceIsNull() throws Exception {
new DefaultHttpJsonResponse("{}", 200).asDto(null);
}
@Test(expectedExceptions = IOException.class)
public void shouldThrowServerExceptionWhenParsingNotValidJsonContent() throws Exception {
new DefaultHttpJsonResponse("not valid json", 200).as(Set.class, null);
}
@Test
public void shouldReturnCorrectResponseCode() {
final DefaultHttpJsonResponse response = new DefaultHttpJsonResponse("not valid json", 201);
assertEquals(response.getResponseCode(), 201);
}
}