1 package com.atlassian.johnson.event;
2
3 import com.atlassian.johnson.Johnson;
4 import org.junit.After;
5 import org.junit.Before;
6 import org.junit.Test;
7
8 import java.util.function.Predicate;
9
10 import static com.atlassian.johnson.event.EventLevels.error;
11 import static com.atlassian.johnson.event.EventLevels.fatal;
12 import static com.atlassian.johnson.event.EventLevels.warning;
13 import static org.hamcrest.Matchers.is;
14 import static org.junit.Assert.assertThat;
15 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.when;
17
18 public class EventPredicatesTest {
19
20 private static final String ATTRIBUTE_NAME = "foo";
21
22 private static Event eventWithAttribute(final Object value) {
23 final Event event = mock(Event.class);
24 when(event.getAttribute(ATTRIBUTE_NAME)).thenReturn(value);
25 return event;
26 }
27
28 private static Event eventWithLevel(final EventLevel eventLevel) {
29 final Event event = mock(Event.class);
30 when(event.getLevel()).thenReturn(eventLevel);
31 return event;
32 }
33
34 private static Event eventWithType(final EventType eventType) {
35 final Event event = mock(Event.class);
36 when(event.getKey()).thenReturn(eventType);
37 return event;
38 }
39
40 @Before
41 public void initialiseJohnson() {
42 Johnson.initialize("test-johnson-config.xml");
43 }
44
45 @After
46 public void terminateJohnson() {
47 Johnson.terminate();
48 }
49
50 @Test
51 public void warningOrErrorPredicateShouldOnlyMatchEventsWithEitherOfThoseLevels() {
52
53 final Predicate<Event> predicate = EventPredicates.level(error(), warning());
54
55
56 assertThat(predicate.test(eventWithLevel(error())), is(true));
57 assertThat(predicate.test(eventWithLevel(warning())), is(true));
58 assertThat(predicate.test(eventWithLevel(fatal())), is(false));
59 }
60
61 @Test
62 public void typeBasedPredicateShouldOnlyMatchEventsOfThatType() {
63
64 final EventType matchingEventType = EventType.get("database");
65 final EventType nonMatchingEventType = EventType.get("upgrade");
66
67
68 final Predicate<Event> predicate = EventPredicates.type(matchingEventType);
69
70
71 assertThat(predicate.test(eventWithType(matchingEventType)), is(true));
72 assertThat(predicate.test(eventWithType(nonMatchingEventType)), is(false));
73 }
74
75 @Test
76 public void attributeBasedPredicateWithNullValueShouldOnlyMatchEventsWithNoSuchAttribute() {
77
78 final Predicate<Event> predicate = EventPredicates.attributeEquals(ATTRIBUTE_NAME, null);
79
80
81 assertThat(predicate.test(eventWithAttribute(null)), is(true));
82 assertThat(predicate.test(eventWithAttribute("bar")), is(false));
83 }
84
85 @Test
86 public void attributeBasedPredicateWithNonNullValueShouldOnlyMatchEventsWithThatAttributeValue() {
87
88 final Predicate<Event> predicate = EventPredicates.attributeEquals(ATTRIBUTE_NAME, "bar");
89
90
91 assertThat(predicate.test(eventWithAttribute("bar")), is(true));
92 assertThat(predicate.test(eventWithAttribute(null)), is(false));
93 }
94 }