status-console-client/chat_test.go

83 lines
2.0 KiB
Go
Raw Normal View History

2019-01-08 21:02:11 +01:00
package main
import (
2019-02-11 09:40:43 +01:00
"context"
2019-01-08 21:02:11 +01:00
"crypto/ecdsa"
"testing"
"github.com/ethereum/go-ethereum/crypto"
"github.com/status-im/status-console-client/protocol/client"
2019-02-11 09:40:43 +01:00
"github.com/status-im/status-console-client/protocol/v1"
2019-01-08 21:02:11 +01:00
"github.com/stretchr/testify/require"
)
type message struct {
chat string
2019-02-11 09:40:43 +01:00
dest *ecdsa.PublicKey
2019-01-08 21:02:11 +01:00
data []byte
}
type ChatMock struct {
2019-01-08 21:02:11 +01:00
messages []message
}
func (m *ChatMock) Subscribe(
2019-02-11 09:40:43 +01:00
ctx context.Context,
messages chan<- *protocol.Message,
options protocol.SubscribeOptions,
2019-02-11 09:40:43 +01:00
) (*protocol.Subscription, error) {
return protocol.NewSubscription(), nil
2019-01-08 21:02:11 +01:00
}
func (m *ChatMock) Send(
2019-02-11 09:40:43 +01:00
ctx context.Context,
data []byte,
options protocol.SendOptions,
) ([]byte, error) {
message := message{
chat: options.ChatName,
dest: options.Recipient,
data: data,
}
m.messages = append(m.messages, message)
return crypto.Keccak256(data), nil
2019-01-08 21:02:11 +01:00
}
func (m *ChatMock) Request(ctx context.Context, params protocol.RequestOptions) error {
2019-02-11 09:40:43 +01:00
return nil
}
func TestSendMessage(t *testing.T) {
chatName := "test-chat"
payload := []byte("test message")
chatMock := ChatMock{}
identity, err := crypto.GenerateKey()
require.NoError(t, err)
2019-01-08 21:02:11 +01:00
db, err := client.InitializeTmpDB()
require.NoError(t, err)
defer db.Close()
2019-02-11 09:40:43 +01:00
messenger := client.NewMessengerV2(identity, &chatMock, db)
vc := NewChatViewController(nil, nil, &messenger, nil)
2019-02-11 09:40:43 +01:00
2019-05-15 14:00:04 +03:00
err = vc.Select(client.Contact{Name: chatName, Type: client.ContactPublicRoom, Topic: chatName})
2019-01-08 21:02:11 +01:00
require.NoError(t, err)
// close reading loops
close(vc.cancel)
2019-01-08 21:02:11 +01:00
err = vc.Send(payload)
2019-01-08 21:02:11 +01:00
require.NoError(t, err)
message := chatMock.messages[0]
2019-01-08 21:02:11 +01:00
require.Equal(t, chatName, message.chat)
statusMessage, err := protocol.DecodeMessage(message.data)
require.NoError(t, err)
require.EqualValues(t, payload, statusMessage.Text)
require.Equal(t, protocol.ContentTypeTextPlain, statusMessage.ContentT)
2019-04-12 16:53:26 +02:00
require.Equal(t, protocol.MessageTypePublicGroup, statusMessage.MessageT)
2019-01-08 21:02:11 +01:00
require.Equal(t,
2019-04-15 20:35:56 +02:00
protocol.Content{ChatID: chatName, Text: string(payload)},
2019-01-08 21:02:11 +01:00
statusMessage.Content)
}