package de.otto.edison.status.domain; import org.junit.Test; import java.util.Map; import static de.otto.edison.status.domain.Status.*; import static de.otto.edison.status.domain.StatusDetail.statusDetail; import static java.util.Collections.singletonMap; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasEntry; import static org.hamcrest.Matchers.is; public class StatusDetailTest { @Test public void shouldHaveAdditionalAttributes() { // given final StatusDetail statusDetail = statusDetail("foo", ERROR, "message", singletonMap("foo", "bar")); // when final Map<String,String> theMap = statusDetail.getDetails(); // then assertThat(theMap, hasEntry("foo", "bar")); } @Test public void shouldResultInWarning() { // given StatusDetail statusDetail = statusDetail("foo", OK, "message", singletonMap("foo", "bar")); // when statusDetail = statusDetail.toWarning("different message"); // then assertThat(statusDetail.getName(), is("foo")); assertThat(statusDetail.getMessage(), is("different message")); assertThat(statusDetail.getStatus(), is(WARNING)); assertThat(statusDetail.getDetails(), hasEntry("foo", "bar")); } @Test public void shouldResultInError() { // given StatusDetail statusDetail = statusDetail("foo", WARNING, "message", singletonMap("foo", "bar")); // when statusDetail = statusDetail.toError("different message"); // then assertThat(statusDetail.getName(), is("foo")); assertThat(statusDetail.getMessage(), is("different message")); assertThat(statusDetail.getStatus(), is(ERROR)); assertThat(statusDetail.getDetails(), hasEntry("foo", "bar")); } @Test public void shouldResultInOk() { // given StatusDetail statusDetail = statusDetail("foo", WARNING, "message", singletonMap("foo", "bar")); // when statusDetail = statusDetail.toOk("different message"); // then assertThat(statusDetail.getName(), is("foo")); assertThat(statusDetail.getMessage(), is("different message")); assertThat(statusDetail.getStatus(), is(OK)); assertThat(statusDetail.getDetails(), hasEntry("foo", "bar")); } @Test public void shouldAddDetail() { // given StatusDetail statusDetail = statusDetail("foo", WARNING, "message", singletonMap("foo", "bar")); // when statusDetail = statusDetail.withDetail("bar", "baz"); // then assertThat(statusDetail.getName(), is("foo")); assertThat(statusDetail.getMessage(), is("message")); assertThat(statusDetail.getStatus(), is(WARNING)); assertThat(statusDetail.getDetails(), hasEntry("foo", "bar")); assertThat(statusDetail.getDetails(), hasEntry("bar", "baz")); } @Test public void shouldRemoveDetail() { // given StatusDetail statusDetail = statusDetail("foo", WARNING, "message", singletonMap("foo", "bar")); // when statusDetail = statusDetail.withoutDetail("foo"); // then assertThat(statusDetail.getName(), is("foo")); assertThat(statusDetail.getMessage(), is("message")); assertThat(statusDetail.getStatus(), is(WARNING)); assertThat(statusDetail.getDetails(), not(hasEntry("foo", "bar"))); } @Test public void shouldOverwriteDetail() { // given StatusDetail statusDetail = statusDetail("foo", WARNING, "message", singletonMap("foo", "bar")); // when statusDetail = statusDetail.withDetail("foo","baz"); // then assertThat(statusDetail.getName(), is("foo")); assertThat(statusDetail.getMessage(), is("message")); assertThat(statusDetail.getStatus(), is(WARNING)); assertThat(statusDetail.getDetails(), hasEntry("foo", "baz")); } }