package in.partake.model.dto;
import in.partake.app.PartakeTestApp;
import in.partake.base.DateTime;
import in.partake.base.TimeUtil;
import in.partake.model.fixture.TestDataProvider;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.TimeZone;
import org.codehaus.jackson.node.ObjectNode;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author skypencil (@eller86)
*/
public final class EventTest extends AbstractPartakeModelTest<Event> {
@Override
protected Event copy(Event t) {
return new Event(t);
}
@Override
protected TestDataProvider<Event> getTestDataProvider() {
return PartakeTestApp.getTestService().getTestDataProviderSet().getEventProvider();
}
Event[] samples;
@Before
public void createSamples() {
DateTime now = TimeUtil.getCurrentDateTime();
samples = new Event[] {
new Event("id", "title", "summary", "category",
now, now, "url", "place",
"address", "description", "#hashTag", "ownerId",
"foreImageId", "backImageId", "passcode", false,
null, new ArrayList<String>(), null,
now, now, -1),
new Event("id2", "title2", "summary2", "category2",
now, now, "url2", "place2",
"address2", "description2", "#hashTag2", "ownerId2",
"foreImageId2", "backImageId2", "passcode2", false,
null, new ArrayList<String>(), null,
now, now, 1)
};
}
@Test
public void testCopyConstructor() {
for (Event source : samples) {
// Event class doesn't override #equals() method.
// Assert.assertEquals(source, new Event(source));
Assert.assertEquals(source.getId(), new Event(source).getId());
Assert.assertEquals(source.getTitle(), new Event(source).getTitle());
Assert.assertEquals(source.getSummary(), new Event(source).getSummary());
Assert.assertEquals(source.getCategory(), new Event(source).getCategory());
Assert.assertEquals(source.getBeginDate(), new Event(source).getBeginDate());
Assert.assertEquals(source.getEndDate(), new Event(source).getEndDate());
Assert.assertEquals(source.getUrl(), new Event(source).getUrl());
Assert.assertEquals(source.getPlace(), new Event(source).getPlace());
Assert.assertEquals(source.getAddress(), new Event(source).getAddress());
Assert.assertEquals(source.getDescription(), new Event(source).getDescription());
Assert.assertEquals(source.getHashTag(), new Event(source).getHashTag());
Assert.assertEquals(source.getOwnerId(), new Event(source).getOwnerId());
Assert.assertEquals(source.getForeImageId(), new Event(source).getForeImageId());
Assert.assertEquals(source.getBackImageId(), new Event(source).getBackImageId());
Assert.assertEquals(source.getPasscode(), new Event(source).getPasscode());
Assert.assertEquals(source.isDraft(), new Event(source).isDraft());
Assert.assertEquals(source.getCreatedAt(), new Event(source).getCreatedAt());
Assert.assertEquals(source.getModifiedAt(), new Event(source).getModifiedAt());
Assert.assertEquals(source.getRevision(), new Event(source).getRevision());
}
}
@Test
public void testCopyConstructorByReflection() throws IllegalArgumentException, IllegalAccessException {
for (Event source : samples) {
Event copy = new Event(source);
for (Field field : Event.class.getDeclaredFields()) {
if (!Modifier.isStatic(field.getModifiers())) {
field.setAccessible(true);
Assert.assertEquals(field.get(source), field.get(copy));
}
}
}
}
@Test(expected = NullPointerException.class)
public void testCopyConstructorByNullValue() {
new Event((Event) null);
}
@Test
public void testCopyConstructorByFlozenInstance() {
Event source = new Event();
Assert.assertFalse(source.isFrozen());
source.freeze();
Assert.assertTrue(source.isFrozen());
Assert.assertFalse(new Event(source).isFrozen());
}
@Test
public void testToJsonWhenBeginDateExistsAndEndDateIsNull() {
TimeZone defaultTimeZone = TimeZone.getDefault();
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Tokyo"));
try {
Event event = new Event();
event.setBeginDate(new DateTime(0L));
ObjectNode json = event.toSafeJSON();
Assert.assertEquals("1970-01-01 09:00", json.get("beginDate").asText());
Assert.assertFalse(json.has("endDate"));
} finally {
TimeZone.setDefault(defaultTimeZone);
}
}
}