package fi.otavanopisto.pyramus.rest;
import static com.jayway.restassured.RestAssured.given;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import com.jayway.restassured.response.Response;
import fi.otavanopisto.pyramus.rest.controller.permissions.PersonPermissions;
import fi.otavanopisto.pyramus.rest.controller.permissions.StudentPermissions;
import fi.otavanopisto.pyramus.rest.model.Person;
import fi.otavanopisto.pyramus.rest.model.Sex;
@RunWith(Parameterized.class)
public class PersonPermissionTestsIT extends AbstractRESTPermissionsTest {
// TODO: tests for default person
public PersonPermissionTestsIT(String role) {
this.role = role;
}
@Parameters
public static List<Object[]> generateData() {
return getGeneratedRoleData();
}
private PersonPermissions personPermissions = new PersonPermissions();
private StudentPermissions studentPermissions = new StudentPermissions();
@Test
public void testCreatePerson() throws NoSuchFieldException {
Person person = new Person(null, getDate(1990, 6, 6), "1234567-0987", Sex.FEMALE, false, "to be created", null);
Response response = given().headers(getAuthHeaders())
.contentType("application/json")
.body(person)
.post("/persons/persons");
assertOk(response, personPermissions, PersonPermissions.CREATE_PERSON);
if (response.getStatusCode() == 200) {
int id = response.body().jsonPath().getInt("id");
given().headers(getAdminAuthHeaders())
.delete("/persons/persons/{ID}", id);
}
}
@Test
public void testListPersons() throws NoSuchFieldException {
Response response = given().headers(getAuthHeaders())
.get("/persons/persons");
assertOk(response, personPermissions, PersonPermissions.LIST_PERSONS);
}
@Test
public void testFindPerson() throws NoSuchFieldException {
Response response = given().headers(getAuthHeaders())
.get("/persons/persons/{ID}", 3);
assertOk(response, personPermissions, PersonPermissions.FIND_PERSON);
}
@Test
public void testUpdatePerson() throws NoSuchFieldException {
Person person = new Person(null, getDate(1990, 6, 6), "1234567-0987", Sex.FEMALE, false, "not updated", null);
Response response = given().headers(getAdminAuthHeaders())
.contentType("application/json")
.body(person)
.post("/persons/persons");
Long id = new Long(response.body().jsonPath().getInt("id"));
try {
Person updateStudent = new Person(id, getDate(1991, 7, 7), "1234567-9876", Sex.MALE, true, "updated", null);
response = given().headers(getAuthHeaders())
.contentType("application/json")
.body(updateStudent)
.put("/persons/persons/{ID}", id);
assertOk(response, personPermissions, PersonPermissions.UPDATE_PERSON);
} finally {
given().headers(getAdminAuthHeaders())
.delete("/persons/persons/{ID}", id);
}
}
@Test
public void testDeletePerson() throws NoSuchFieldException {
Person person = new Person(null, getDate(1990, 6, 6), "1234567-0987", Sex.FEMALE, false, "to be deleted", null);
Response response = given().headers(getAdminAuthHeaders())
.contentType("application/json")
.body(person)
.post("/persons/persons");
int id = response.body().jsonPath().getInt("id");
response = given().headers(getAuthHeaders())
.delete("/persons/persons/{ID}", id);
assertOk(response, personPermissions, PersonPermissions.DELETE_PERSON, 204);
if (response.getStatusCode() != 204) {
given().headers(getAdminAuthHeaders())
.delete("/persons/persons/{ID}", id);
}
}
@Test
public void testListStudents() throws NoSuchFieldException {
Response response = given().headers(getAuthHeaders())
.get("/persons/persons/{ID}/students", 3l);
assertOk(response, studentPermissions, StudentPermissions.LIST_STUDENTSBYPERSON);
}
}