package org.activityinfo.server.command;
import org.activityinfo.fixtures.InjectionSupport;
import org.activityinfo.legacy.shared.command.*;
import org.activityinfo.legacy.shared.command.PivotSites.PivotResult;
import org.activityinfo.legacy.shared.command.result.SiteResult;
import org.activityinfo.legacy.shared.model.ProjectDTO;
import org.activityinfo.legacy.shared.model.SchemaDTO;
import org.activityinfo.legacy.shared.reports.model.Dimension;
import org.activityinfo.server.database.OnDataSet;
import org.activityinfo.server.database.hibernate.entity.UserDatabase;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
@RunWith(InjectionSupport.class)
@OnDataSet("/dbunit/sites-simple1.db.xml")
public class ProjectTest extends CommandTestCase {
@Test
public void deleteProject() {
setUser(1);
long originalDatabaseVersion = lookupDbVersion(1);
int projectId = 2;
execute(RequestChange.delete("Project", projectId));
SchemaDTO schema = execute(new GetSchema());
assertThat(schema.getProjectById(projectId), nullValue());
// make sure it's gone from sites
Filter filter = new Filter();
filter.addRestriction(DimensionType.Site, 3);
SiteResult sites = execute(new GetSites(filter));
assertThat(sites.getData().get(0).getProject(), is(nullValue()));
// and doesn't show up in pivoting...
PivotSites pivot = new PivotSites();
Dimension projectDimension = new Dimension(DimensionType.Project);
pivot.setDimensions(projectDimension);
pivot.setFilter(filter);
PivotResult buckets = execute(pivot);
assertThat(buckets.getBuckets().size(), equalTo(1));
assertThat(buckets.getBuckets().get(0).getCategory(projectDimension), is(nullValue()));
// make sure the version number of the database is updated
assertThat(lookupDbVersion(1), not(equalTo(originalDatabaseVersion)));
}
@Test
public void updateProject() {
setUser(1);
SchemaDTO schema = execute(new GetSchema());
ProjectDTO project = schema.getProjectById(2);
project.setName("RRMP II");
project.setDescription("RRMP The Next Generation");
execute(RequestChange.update(project, "name", "description"));
schema = execute(new GetSchema());
assertThat(schema.getProjectById(2).getName(), equalTo("RRMP II"));
assertThat(schema.getProjectById(2).getDescription(), equalTo("RRMP The Next Generation"));
project.setName("RRMP III");
project.setDescription(null);
execute(RequestChange.update(project, "name", "description"));
}
@Test(expected = Exception.class)
public void constraintViolation() {
setUser(1);
SchemaDTO schema = execute(new GetSchema());
ProjectDTO project = schema.getProjectById(2);
project.setName(null);
execute(RequestChange.update(project, "name"));
}
private long lookupDbVersion(int dbId) {
return em.find(UserDatabase.class, dbId).getVersion();
}
}