Skip to content

Commit

Permalink
feat: add message interface
Browse files Browse the repository at this point in the history
Signed-off-by: Ivan Ivanov <ivanivanov.ii726@gmail.com>
  • Loading branch information
0xivanov committed Sep 19, 2024
1 parent aeea4e2 commit 35b6c7b
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 3 deletions.
43 changes: 42 additions & 1 deletion topic_message_query_e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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")
}
11 changes: 9 additions & 2 deletions topic_message_submit_transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
27 changes: 27 additions & 0 deletions topic_message_submit_transaction_unit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
}

0 comments on commit 35b6c7b

Please sign in to comment.