package nebula.data.impl;
import java.util.Set;
import junit.framework.TestCase;
import nebula.data.Classificator;
import nebula.data.Entity;
import nebula.data.SmartList;
import nebula.data.util.RecentDateClassificatorFunction;
import org.joda.time.DateTime;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
@Deprecated
public class RecentDateDataClassificatorTest extends TestCase {
SmartList<String, Entity> list;
Classificator<String, Entity> classificator;
protected void setUp() throws Exception {
super.setUp();
list = new SmartList<String, Entity>(new Function<Entity, String>() {
@Override
public String apply(Entity from) {
return from.get("Date").toString();
}
});
classificator = list.addListener(new DataClassificator<String, Entity>(new Function<Entity, String>() {
Function<DateTime, String> convertFunction = new RecentDateClassificatorFunction(new DateTime()
.withDayOfMonth(10).withDayOfWeek(3));
@Override
public String apply(Entity from) {
return convertFunction.apply((DateTime) from.get("Date"));
}
}));
}
protected void tearDown() throws Exception {
super.tearDown();
}
public final void testRecentDateDataClassificator() {
}
public final void testAdd_Update_Remove() {
DateTime now = new DateTime().withDayOfMonth(10).withDayOfWeek(3);
EditableEntity v = new EditableEntity();
v.put("Date", now);
list.add(v);
v = new EditableEntity();
v.put("Date", now.withDayOfWeek(1));
list.add(v);
v = new EditableEntity();
v.put("Date", now.withDayOfMonth(1));
list.add(v);
v = new EditableEntity();
v.put("Date", now.minusMonths(1).withDayOfMonth(1));
list.add(v);
v = new EditableEntity();
v.put("Date", now.minusMonths(2).withDayOfMonth(2));
list.add(v);
v = new EditableEntity();
v.put("Date", now.minusMonths(3).withDayOfMonth(2));
list.add(v);
v = new EditableEntity();
v.put("Date", now.minusMonths(4).withDayOfMonth(2));
list.add(v);
v = new EditableEntity();
v.put("Date", now.minusMonths(5).withDayOfMonth(2));
list.add(v);
assertEquals(1, classificator.getData("Today").size());
assertEquals(1, classificator.getData("ThisWeek").size());
assertEquals(1, classificator.getData("ThisMonth").size());
assertEquals(2, classificator.getData("ThreeMonth").size());
assertEquals(3, classificator.getData("SixMonth").size());
// ThreeMonth to today
EditableEntity v1 = new EditableEntity();
v1.put("Date", now.withDayOfMonth(2));
list.remove(v);
list.add(v1);
assertEquals(1, classificator.getData("Today").size());
assertEquals(1, classificator.getData("ThisWeek").size());
assertEquals(1 + 1, classificator.getData("ThisMonth").size());
assertEquals(2, classificator.getData("ThreeMonth").size());
assertEquals(3 - 1, classificator.getData("SixMonth").size());
list.remove(v1);
assertEquals(1, classificator.getData("Today").size());
assertEquals(1, classificator.getData("ThisWeek").size());
assertEquals(1 + 1 - 1, classificator.getData("ThisMonth").size());
assertEquals(2, classificator.getData("ThreeMonth").size());
assertEquals(3 - 1, classificator.getData("SixMonth").size());
Set<String> classifications = classificator.getClassifications();
assertEquals(5, classifications.size());
assertEquals("ThreeMonth,ThisWeek,Today,SixMonth,ThisMonth", Joiner.on(",").join(classifications));
// ThreeMonth to today
EditableEntity vOld = new EditableEntity();
vOld.put("Date", now.minusMonths(9));
list.add(vOld);
assertEquals(1, classificator.getData("Today").size());
assertEquals(1, classificator.getData("ThisWeek").size());
assertEquals(1 + 1 - 1, classificator.getData("ThisMonth").size());
assertEquals(2, classificator.getData("ThreeMonth").size());
assertEquals(3 - 1, classificator.getData("SixMonth").size());
assertEquals(0, classificator.getData("OLD").size());
}
public final void testGetClassifications() {
}
}