diff --git a/topic_message_query_e2e_test.go b/topic_message_query_e2e_test.go index a35ec93a..7b990377 100644 --- a/topic_message_query_e2e_test.go +++ b/topic_message_query_e2e_test.go @@ -120,7 +120,7 @@ func TestIntegrationTopicMessageQueryCanExecute(t *testing.T) { resp, err = NewTopicMessageSubmitTransaction(). SetNodeAccountIDs([]AccountID{resp.NodeID}). - SetMessage([]byte("message")). + SetMessage("message"). SetTopicID(topicID). Execute(env.Client) require.NoError(t, err) @@ -355,3 +355,44 @@ func TestIntegrationTopicMessageQueryNoStartTime(t *testing.T) { err = CloseIntegrationTestEnv(env, nil) require.NoError(t, err) } + +func TestIntegrationTopicMessageQueryWrongMessageType(t *testing.T) { + t.Parallel() + env := NewIntegrationTestEnv(t) + var finished int32 // 0 for false, 1 for true + + resp, err := NewTopicCreateTransaction(). + SetAdminKey(env.Client.GetOperatorPublicKey()). + SetNodeAccountIDs(env.NodeAccountIDs). + Execute(env.Client) + + require.NoError(t, err) + + receipt, err := resp.SetValidateStatus(true).GetReceipt(env.Client) + require.NoError(t, err) + + time.Sleep(3 * time.Second) + + topicID := *receipt.TopicID + assert.NotNil(t, topicID) + + _, err = NewTopicMessageQuery(). + SetTopicID(topicID). + SetStartTime(time.Unix(0, 0)). + SetLimit(1). + SetCompletionHandler(func() { + atomic.StoreInt32(&finished, 1) + }). + Subscribe(env.Client, func(message TopicMessage) { + println(string(message.Contents)) + atomic.StoreInt32(&finished, 1) + }) + require.NoError(t, err) + + resp, err = NewTopicMessageSubmitTransaction(). + SetNodeAccountIDs([]AccountID{resp.NodeID}). + SetMessage(1234). // wrong message type + SetTopicID(topicID). + Execute(env.Client) + require.ErrorContains(t, err, "no transactions to execute") +} diff --git a/topic_message_submit_transaction.go b/topic_message_submit_transaction.go index ea8d13ed..279f086f 100644 --- a/topic_message_submit_transaction.go +++ b/topic_message_submit_transaction.go @@ -80,9 +80,16 @@ func (tx *TopicMessageSubmitTransaction) GetTopicID() TopicID { } // SetMessage Sets the message to be submitted. -func (tx *TopicMessageSubmitTransaction) SetMessage(message []byte) *TopicMessageSubmitTransaction { +// The message should be a byte array or a string +// If other types are provided, it will not set the value +func (tx *TopicMessageSubmitTransaction) SetMessage(message interface{}) *TopicMessageSubmitTransaction { tx._RequireNotFrozen() - tx.message = message + switch m := message.(type) { + case string: + tx.message = []byte(m) + case []byte: + tx.message = m + } return tx } diff --git a/topic_message_submit_transaction_unit_test.go b/topic_message_submit_transaction_unit_test.go index 7b043179..3a84f645 100644 --- a/topic_message_submit_transaction_unit_test.go +++ b/topic_message_submit_transaction_unit_test.go @@ -322,3 +322,30 @@ func TestUnitTopicMessageSubmitTransactionSerialization(t *testing.T) { require.Equal(t, transaction.GetMessage(), result.GetMessage()) require.Equal(t, transaction.GetTransactionMemo(), result.GetTransactionMemo()) } + +func TestUnitTopicMessageSubmitTransactionSetMessage(t *testing.T) { + t.Parallel() + + transaction := NewTopicMessageSubmitTransaction(). + SetNodeAccountIDs(nodeAccountID). + SetMessage("String message"). + SetMaxChunks(30). + SetTransactionMemo("no") + + txBytes, err := transaction.ToBytes() + require.NoError(t, err) + + txParsed, err := TransactionFromBytes(txBytes) + require.NoError(t, err) + + result, ok := txParsed.(TopicMessageSubmitTransaction) + require.True(t, ok) + + require.Equal(t, transaction.GetMessage(), result.GetMessage()) + require.Equal(t, transaction.GetTransactionMemo(), result.GetTransactionMemo()) + + transaction = NewTopicMessageSubmitTransaction(). + SetMessage(1234) // wrong type - NOOP + + require.Equal(t, []byte{}, transaction.GetMessage()) +}