package com.dhemery.polling.fixtures;
import com.dhemery.polling.events.ConditionDissatisfied;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import static org.hamcrest.Matchers.any;
import static org.hamcrest.Matchers.equalTo;
public class ConditionDissatisfiedMatcher extends TypeSafeMatcher<ConditionDissatisfied> {
private final Matcher<String> description;
private final Matcher<String> reason;
private final Matcher<Integer> failureCount;
private ConditionDissatisfiedMatcher(Matcher<String> description, Matcher<String> reason, Matcher<Integer> failureCount) {
this.description = description;
this.reason = reason;
this.failureCount = failureCount;
}
@Override
public boolean matchesSafely(ConditionDissatisfied event) {
return description.matches(event.description())
&& reason.matches(event.reason())
&& failureCount.matches(event.failureCount());
}
@Override
public void describeTo(Description description) {
description.appendText("a dissatisfaction event with description ").appendDescriptionOf(this.description)
.appendText(" with reason ").appendDescriptionOf(reason)
.appendText(" and failure count ").appendDescriptionOf(failureCount);
}
public static Matcher<ConditionDissatisfied> dissatisfaction(Matcher<String> description, Matcher<String> reason, Matcher<Integer> failureCount) {
return new ConditionDissatisfiedMatcher(description, reason, failureCount);
}
public static Matcher<ConditionDissatisfied> dissatisfaction(String description, String reason, int failureCount) {
return dissatisfaction(equalTo(description), equalTo(reason), equalTo(failureCount));
}
public static Matcher<ConditionDissatisfied> dissatisfaction(String description, String reason) {
return dissatisfaction(equalTo(description), equalTo(reason), any(Integer.class));
}
public static Matcher<ConditionDissatisfied> dissatisfactionWithFailureCount(int failureCount) {
return dissatisfaction(any(String.class), any(String.class), equalTo(failureCount));
}
}