### Question:
Message { public Optional<String> header(final String name) { if ( name == null ) { throw new NullPointerException("null name"); } return headers(name).stream().findFirst(); }  abstract String item(); abstract Request request(); R map(final Function<T, R> mapper); T lift(final Message<?> message); Message<?> link(final String item); boolean interactive(); Optional<String> charset(); Shape shape(); T shape(final Shape shape); Map<String, Collection<String>> headers(); T headers(final Map<String, ? extends Collection<String>> headers); Optional<String> header(final String name); T header(final String name, final String value); Collection<String> headers(final String name); T headers(final String name, final String... values); T headers(final String name, final Collection<String> values); Result<V, Failure> body(final Format<V> format); T body(final Format<V> format, final V value);  }### Answer:
@Test void testHeadersIgnoreHeaderCase() { assertThat(new MessageMock() .header("TEST-header", "value") ) .hasHeader("test-header", "value"); }
@Test void testHeadersOverwritesValues() { assertThat(new MessageMock() .header("test-header", "one") .header("test-header", "two") ) .hasHeader("test-header", "two"); }
@Test void testDefaultsValues() { final MessageMock message=new MessageMock() .header("+present", "one") .header("~present", "two") .header("~missing", "two"); assertThat(message.header("present")).hasValue("one"); assertThat(message.header("missing")).hasValue("two"); }