### Question:
ActionChat implements Sc2ApiSerializable<Sc2Api.ActionChat> { public static ActionChat from(Sc2Api.ActionChat sc2ApiActionChat) { require("sc2api action chat", sc2ApiActionChat); return new ActionChat(sc2ApiActionChat); } private  ActionChat(Builder builder); private  ActionChat(Sc2Api.ActionChat sc2ApiActionChat); static ActionChatSyntax message(); static ActionChat from(Sc2Api.ActionChat sc2ApiActionChat); @Override Sc2Api.ActionChat toSc2Api(); Channel getChannel(); String getMessage(); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test void throwsExceptionWhenSc2ApiActionChatIsNull() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> ActionChat.from(nothing())) .withMessage("sc2api action chat is required"); }
@Test void convertsSc2ApiActionChatToActionChat() { assertThatAllFieldsAreConverted(ActionChat.from(sc2ApiActionWithChat())); }
@Test void throwsExceptionWhenSc2ApiChatChannelIsNotProvided() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> ActionChat.Channel.from(nothing())) .withMessage("sc2api action chat channel is required"); }