/**
* Licensed to The Apereo Foundation under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
*
* The Apereo Foundation licenses this file to you under the Educational
* Community 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://opensource.org/licenses/ecl2.txt
*
* 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.opencastproject.adminui.endpoint;
import static com.jayway.restassured.RestAssured.given;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.opencastproject.rest.RestServiceTestEnv.localhostRandomPort;
import static org.opencastproject.rest.RestServiceTestEnv.testEnvForClasses;
import org.opencastproject.rest.NotFoundExceptionMapper;
import org.opencastproject.rest.RestServiceTestEnv;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import uk.co.datumedge.hamcrest.json.SameJSONAs;
public class ThemesEndpointTest {
private static final Logger logger = LoggerFactory.getLogger(ThemesEndpointTest.class);
private static final RestServiceTestEnv rt = testEnvForClasses(localhostRandomPort(), TestThemesEndpoint.class,
NotFoundExceptionMapper.class);
/** A parser for handling JSON documents inside the body of a request. */
private final JSONParser parser = new JSONParser();
private Long foundId = 1L;
private Long notFoundId = 10L;
@BeforeClass
public static void oneTimeSetUp() {
rt.setUpServer();
}
@AfterClass
public static void oneTimeTearDown() {
rt.tearDownServer();
}
@Test
public void testCreateTheme() throws ParseException, IOException {
String themesString = IOUtils.toString(getClass().getResource("/theme-create.json"), "UTF-8");
Boolean isDefault = true;
String name = "New Theme Name";
String description = "New Theme Description";
Boolean bumperActive = true;
String bumperFile = "bumper-file";
Boolean trailerActive = true;
String trailerFile = "trailer-file";
Boolean titleSlideActive = true;
String titleSlideBackground = "title-background";
String titleSlideMetadata = "title-metadata";
Boolean licenseSlideActive = true;
String licenseSlideBackground = "license-background";
String licenseSlideDescription = "license-description";
Boolean watermarkActive = true;
String watermarkPosition = "watermark-position";
String watermarkFile = "watermark-file";
String result = given().formParam("default", isDefault.toString()).formParam("name", name)
.formParam("description", description).formParam("bumperActive", bumperActive.toString())
.formParam("bumperFile", bumperFile).formParam("trailerActive", trailerActive.toString())
.formParam("trailerFile", trailerFile).formParam("titleSlideActive", titleSlideActive.toString())
.formParam("titleSlideBackground", titleSlideBackground)
.formParam("titleSlideMetadata", titleSlideMetadata).formParam("licenseSlideActive", licenseSlideActive)
.formParam("licenseSlideBackground", licenseSlideBackground)
.formParam("licenseSlideDescription", licenseSlideDescription)
.formParam("watermarkActive", watermarkActive).formParam("watermarkPosition", watermarkPosition)
.formParam("watermarkFile", watermarkFile).expect().statusCode(HttpStatus.SC_OK).when().post(rt.host("/"))
.asString();
JSONObject theme = ((JSONObject) parser.parse(result));
// Make sure the creationDate property exists
assertTrue(StringUtils.trimToNull(theme.get("creationDate").toString()) != null);
// Remove it from the results
theme.remove("creationDate");
logger.info("Expected" + themesString);
logger.info("Result: " + theme.toJSONString());
assertThat(themesString, SameJSONAs.sameJSONAs(theme.toJSONString()).allowingAnyArrayOrdering());
}
@Test
public void testUpdateTheme() throws ParseException, IOException {
String themesString = IOUtils.toString(getClass().getResource("/theme-update.json"), "UTF-8");
String result = given().pathParam("themeId", 1).formParam("default", true).formParam("name", "new-name")
.formParam("description", "new-description").formParam("bumperActive", true)
.formParam("bumperFile", "new-bumper-file").formParam("trailerActive", true)
.formParam("trailerFile", "new-trailer-file").formParam("titleSlideActive", true)
.formParam("titleSlideBackground", "new-title-background")
.formParam("titleSlideMetadata", "new-title-metadata").formParam("licenseSlideActive", true)
.formParam("licenseSlideBackground", "new-license-background")
.formParam("licenseSlideDescription", "new-license-description").formParam("watermarkActive", true)
.formParam("watermarkPosition", "new-watermark-position").formParam("watermarkFile", "new-watermark-file")
.expect().statusCode(HttpStatus.SC_OK).when().put(rt.host("/{themeId}")).asString();
JSONObject theme = ((JSONObject) parser.parse(result));
// Make sure the creationDate property exists
assertTrue(StringUtils.trimToNull(theme.get("creationDate").toString()) != null);
// Remove it from the results
theme.remove("creationDate");
logger.info("Expected" + themesString);
logger.info("Result: " + theme.toJSONString());
assertThat(themesString, SameJSONAs.sameJSONAs(theme.toJSONString()).allowingAnyArrayOrdering());
}
@Test
public void testGetThemes() throws ParseException, IOException {
String themesString = IOUtils.toString(getClass().getResource("/themes.json"), "UTF-8");
String result = given().expect().statusCode(HttpStatus.SC_OK).when().get(rt.host("/themes.json")).asString();
logger.info("Expected" + themesString);
logger.info("Result" + result);
assertThat(themesString, SameJSONAs.sameJSONAs(result).allowingAnyArrayOrdering());
}
@Test
public void testGetTheme() throws ParseException {
// Test invalid id
given().pathParam("themeId", "asdasd").expect().statusCode(HttpStatus.SC_NOT_FOUND).when()
.get(rt.host("/{themeId}.json")).asString();
// Test unknown id
given().pathParam("themeId", notFoundId).expect().statusCode(HttpStatus.SC_NOT_FOUND).when()
.get(rt.host("/{themeId}.json")).asString();
// Test correct id
String result = given().pathParam("themeId", foundId).expect().statusCode(HttpStatus.SC_OK).when()
.get(rt.host("/{themeId}.json")).asString();
JSONObject theme = ((JSONObject) parser.parse(result));
assertEquals(foundId.toString(), theme.get("id").toString());
assertEquals("test.mp4", theme.get("bumperFileName").toString());
assertEquals("http://localhost:8080/staticfiles/uuid1", theme.get("bumperFileUrl").toString());
}
@Test
public void testGetThemeUsage() throws ParseException {
// Test invalid id
given().pathParam("themeId", "asdasd").expect().statusCode(HttpStatus.SC_NOT_FOUND).when()
.get(rt.host("/{themeId}/usage.json")).asString();
// Test unknown id
given().pathParam("themeId", notFoundId).expect().statusCode(HttpStatus.SC_NOT_FOUND).when()
.get(rt.host("/{themeId}/usage.json")).asString();
// Test correct id
String result = given().pathParam("themeId", foundId).expect().statusCode(HttpStatus.SC_OK).when()
.get(rt.host("/{themeId}/usage.json")).asString();
JSONObject series = ((JSONObject) parser.parse(result));
JSONArray seriesArr = (JSONArray) series.get("series");
Assert.assertEquals(3, seriesArr.size());
JSONObject series1 = (JSONObject) seriesArr.get(0);
Assert.assertEquals("Series1Id", series1.get("id").toString());
Assert.assertEquals("Series 1 Title", series1.get("title").toString());
}
@Test
public void testDeleteThemes() {
// Test invalid id
given().pathParam("themeId", "asdasd").expect().statusCode(HttpStatus.SC_NOT_FOUND).when()
.delete(rt.host("/{themeId}")).asString();
// Test unknown id
given().pathParam("themeId", notFoundId).expect().statusCode(HttpStatus.SC_NOT_FOUND).when()
.delete(rt.host("/{themeId}")).asString();
// Test correct id
given().pathParam("themeId", foundId).expect().statusCode(HttpStatus.SC_NO_CONTENT).when()
.delete(rt.host("/{themeId}")).asString();
}
}