UntypedValues implements MRecord { public static Builder builder() { return new Builder(); } UntypedValues(
            String source, long timestamp, String prefix, Map<String, Object> values
    ); @Override Double getDouble(String channel); @Override Long getLong(String channel); @Override @SuppressWarnings("squid:S2447") // null should not be returned, in this case it is necessary Boolean getBoolean(String channel); @Override Date getDate(String channel); @Override String getString(String channel); @Override Value getValue(String channel); @Override Object get(String channel); @Override @JsonIgnore Collection<String> getChannels(); TypedValues toTypedValues(); UntypedValues filterChannels(Set<String> channels); @JsonIgnore // prevent interpretation as a getter boolean isEmpty(); String getPrefix(); Map<String, Object> getValues(); void setValues(Map<String, Object> values); UntypedValues merge(UntypedValues untypedValues); static Builder builder();  }
@Test public void getTimestamp_fromInterface_worksAsExpected() { MRecord event = UntypedValues.builder().timestamp(13L).build(); assertEquals(13L, event.getTimestamp()); }
@Test public void toStringTestWithNulls() { UntypedValues values = UntypedValues.builder() .values(Collections.singletonMap("key", null)) .build(); String string = values.toString(); assertNotNull(string); System.out.println(string); assertEquals( "UntypedValues(source=null, timestamp=0, prefix=null, values={key=null})", string ); }