EventsDispatcher.java
package io.github.giulong.spectrum.utils.events;
import io.github.giulong.spectrum.enums.Result;
import io.github.giulong.spectrum.interfaces.SessionHook;
import io.github.giulong.spectrum.utils.Configuration;
import io.github.giulong.spectrum.pojos.events.Event;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.extension.ExtensionContext;
import java.util.Set;
import static lombok.AccessLevel.PRIVATE;
@Slf4j
@NoArgsConstructor(access = PRIVATE)
public class EventsDispatcher implements SessionHook {
private static final EventsDispatcher INSTANCE = new EventsDispatcher();
public static final String BEFORE = "before";
public static final String AFTER = "after";
public static final String TEST = "test";
public static final String TEST_FACTORY = "testFactory";
public static final String DYNAMIC_TEST = "dynamicTest";
public static final String CLASS = "class";
public static final String SUITE = "suite";
private final Configuration configuration = Configuration.getInstance();
public static EventsDispatcher getInstance() {
return INSTANCE;
}
@Override
public void sessionOpened() {
log.debug("Session opened hook");
fire(BEFORE, Set.of(SUITE));
}
@Override
public void sessionClosed() {
log.debug("Session closed hook");
fire(AFTER, Set.of(SUITE), configuration.getSummary().toResult());
}
public void fire(final String reason, final Set<String> tags) {
fire(null, null, reason, null, tags, null);
}
public void fire(final String reason, final Set<String> tags, final Result result) {
fire(null, null, reason, result, tags, null);
}
public void fire(final String primaryId, final String reason) {
fire(primaryId, null, reason, null, null, null);
}
public void fire(final String primaryId, final String secondaryId, final String reason) {
fire(primaryId, secondaryId, reason, null, null, null);
}
public void fire(final String primaryId, final String secondaryId, final String reason, final Result result, final Set<String> tags, final ExtensionContext context) {
final Event event = Event.builder()
.primaryId(primaryId)
.secondaryId(secondaryId)
.reason(reason)
.result(result)
.tags(tags)
.context(context)
.build();
log.debug("Dispatching event {}", event);
configuration.getEventsConsumers().forEach(consumer -> consumer.match(event));
}
}