package controllers;
import com.typesafe.config.ConfigFactory;
import helpers.ElasticsearchTestGrid;
import helpers.JsonLdConstants;
import helpers.JsonTest;
import models.Resource;
import org.junit.Test;
import play.Configuration;
import play.mvc.Result;
import java.io.File;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import static org.junit.Assert.assertEquals;
import static play.test.Helpers.fakeRequest;
import static play.test.Helpers.route;
/**
* @author fo
*/
public class ResourceIndexTest extends ElasticsearchTestGrid implements JsonTest {
//FIXME: Authorization is now done by external means, should we test this here and if so, how?
@Test
public void createResourceFromFormUrlEncoded() {
Map<String, String> data = new HashMap<>();
data.put(JsonLdConstants.TYPE, "Organization");
data.put(JsonLdConstants.ID, "info:urn:uuid:" + UUID.randomUUID().toString());
data.put("email", "foo1@bar.com");
data.put("name[0][@value]", "Foo");
data.put("name[0][@language]", "en");
data.put("description[0][@value]", "Foo");
data.put("description[0][@language]", "en");
data.put("location[address][addressCountry]", "DE");
Result result = route(fakeRequest("POST", routes.ResourceIndex.addResource().url())
.bodyForm(data));
assertEquals(201, result.status());
}
@Test
public void createResourceFromJson() {
Resource event = getResourceFromJsonFileUnsafe("ResourceIndexTest/testEvent.json");
Result result = route(fakeRequest("POST", routes.ResourceIndex.addResource().url())
.bodyJson(event.toJson()));
assertEquals(201, result.status());
}
@Test
public void updateResourceFromJson() {
Resource event = getResourceFromJsonFileUnsafe("ResourceIndexTest/testEvent.json");
Result createEventResult = route(fakeRequest("POST", routes.ResourceIndex.addResource().url())
.bodyJson(event.toJson()));
assertEquals(201, createEventResult.status());
Resource organization = getResourceFromJsonFileUnsafe("ResourceIndexTest/testOrganization.json");
Result createOrganizationResult = route(fakeRequest("POST", routes.ResourceIndex.addResource().url())
.bodyJson(organization.toJson()));
assertEquals(201, createOrganizationResult.status());
organization.put("email", "foo@bar.de");
Result updateResult = route(fakeRequest("POST", routes.ResourceIndex.updateResource(organization.getId()).url())
.bodyJson(organization.toJson()));
assertEquals(200, updateResult.status());
}
@Test
public void updateNonexistentResourceFromJson() {
Resource organization = getResourceFromJsonFileUnsafe("SchemaTest/testOrganization.json");
String auth = getAuthString();
Result updateResult = route(fakeRequest("POST", routes.ResourceIndex.updateResource(organization.getId()).url())
.header("Authorization", "Basic " + auth).bodyJson(organization.toJson()));
assertEquals(404, updateResult.status());
}
private String getAuthString() {
Configuration conf = new Configuration(ConfigFactory.parseFile(new File("conf/test.conf")).resolve());
String email = conf.getString("admin.user");
String pass = conf.getString("admin.pass");
String authString = email.concat(":").concat(pass);
return Base64.getEncoder().encodeToString(authString.getBytes());
}
}