package uk.co.acuminous.julez.event;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import org.junit.Test;
public class EventTest {
@Test
public void verboseConvenienceConstructorInitialisesEventCorrectly() {
Event event = new Event("id", 1L, "type");
assertEquals("id", event.get(Event.ID));
assertEquals("1", event.get(Event.TIMESTAMP));
assertEquals("type", event.get(Event.TYPE));
}
@Test
public void simpleConvenienceConstructorInitialisesEventCorrectly() {
Event event = new Event("type");
assertNotNull(event.get(Event.ID));
assertNotNull("1", event.get(Event.TIMESTAMP));
assertEquals("type", event.get(Event.TYPE));
}
@Test
public void assertMapContructorIntialisesEventCorrectly() {
Map<String, String> data = new HashMap<String, String>();
Event event = new Event(data);
assertSame(data, event.getData());
}
@Test
public void assertDataAccessorsReturnCorrectValues() {
Event event = new Event("id", 1L, "type");
event.put("Foo", "Bar");
assertEquals("id", event.getId());
assertEquals(1L, event.getTimestamp());
assertEquals("type", event.getType());
assertEquals("Bar", event.get("Foo"));
}
@Test
public void toStringIncludesClassName() {
Event event = new Event("type");
String text = event.toString();
assertTrue("Class name not found in Event.toString()", text.startsWith(event.getClass().getName()));
}
@Test
public void toStringEvenIncludesClassNameForAnonymousEvents() {
Event event = new Event("type") {};
String text = event.toString();
assertTrue("Class name not found in Event.toString()", text.startsWith(event.getClass().getName()));
}
@Test
public void toStringSortsEventDataConsistently() {
Event event = new Event("id", 1L, "type");
event.getData().put("A", "Last");
event.getData().put("!Z", "First");
String text = event.toString().replace(event.getClass().getName(), "");
assertEquals("{!Z=First, #ID=id, #TIMESTAMP=1, #TYPE=type, A=Last}", text);
}
@Test
public void equalsReturnsTrueWhenTwoEventsAreEquivalent() {
Event event1 = new Event(new HashMap<String, String>());
Event event2 = new Event(new TreeMap<String, String>());
assertEquals(event1, event2);
event1.put("a", "1");
event2.put("a", "1");
assertEquals(event1, event2);
}
@Test
public void equalsReturnsTrueUsingDifferentUnderlyingMapImplementations() {
Event event1 = new Event(new HashMap<String, String>());
Event event2 = new Event(new TreeMap<String, String>());
assertEquals(event1, event2);
event1.put("a", "1");
event2.put("a", "1");
assertEquals(event1, event2);
}
@Test
public void equalsReturnsFalseWhenTwoEventsAreEquivalent() {
Event event1 = new Event(new HashMap<String, String>());
Event event2 = new Event(new TreeMap<String, String>());
event1.put("a", "1");
assertFalse(String.format("%s != %s", event1, event2), event1.equals(event2));
event2.put("a", "1");
event2.put("b", "2");
assertFalse(String.format("%s != %s", event1, event2), event1.equals(event2));
}
}