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"
|
|
|
|
|
2019-05-14 19:34:36 +03:00
|
|
|
"github.com/ethereum/go-ethereum/crypto"
|
2019-03-11 18:49:18 +01:00
|
|
|
"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
|
|
|
|
}
|
|
|
|
|
2019-03-11 18:49:18 +01:00
|
|
|
type ChatMock struct {
|
2019-01-08 21:02:11 +01:00
|
|
|
messages []message
|
|
|
|
}
|
|
|
|
|
2019-03-11 18:49:18 +01:00
|
|
|
func (m *ChatMock) Subscribe(
|
2019-02-11 09:40:43 +01:00
|
|
|
ctx context.Context,
|
2019-03-11 18:49:18 +01:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2019-03-11 18:49:18 +01:00
|
|
|
func (m *ChatMock) Send(
|
2019-02-11 09:40:43 +01:00
|
|
|
ctx context.Context,
|
|
|
|
data []byte,
|
2019-03-11 18:49:18 +01:00
|
|
|
options protocol.SendOptions,
|
|
|
|
) ([]byte, error) {
|
|
|
|
message := message{
|
|
|
|
chat: options.ChatName,
|
|
|
|
dest: options.Recipient,
|
|
|
|
data: data,
|
|
|
|
}
|
|
|
|
m.messages = append(m.messages, message)
|
2019-05-14 19:34:36 +03:00
|
|
|
return crypto.Keccak256(data), nil
|
2019-01-08 21:02:11 +01:00
|
|
|
}
|
|
|
|
|
2019-03-11 18:49:18 +01:00
|
|
|
func (m *ChatMock) Request(ctx context.Context, params protocol.RequestOptions) error {
|
2019-02-11 09:40:43 +01:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2019-03-11 18:49:18 +01:00
|
|
|
func TestSendMessage(t *testing.T) {
|
|
|
|
chatName := "test-chat"
|
|
|
|
payload := []byte("test message")
|
|
|
|
chatMock := ChatMock{}
|
2019-05-14 19:34:36 +03:00
|
|
|
identity, err := crypto.GenerateKey()
|
|
|
|
require.NoError(t, err)
|
2019-01-08 21:02:11 +01:00
|
|
|
|
2019-05-08 10:23:51 +03:00
|
|
|
db, err := client.InitializeTmpDB()
|
2019-03-11 18:49:18 +01:00
|
|
|
require.NoError(t, err)
|
2019-05-08 10:23:51 +03:00
|
|
|
defer db.Close()
|
2019-02-11 09:40:43 +01:00
|
|
|
|
2019-05-14 19:34:36 +03: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)
|
2019-03-11 18:49:18 +01:00
|
|
|
// close reading loops
|
2019-05-21 15:33:22 +03:00
|
|
|
close(vc.cancel)
|
2019-01-08 21:02:11 +01:00
|
|
|
|
2019-03-11 18:49:18 +01:00
|
|
|
err = vc.Send(payload)
|
2019-01-08 21:02:11 +01:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
2019-03-11 18:49:18 +01:00
|
|
|
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)
|
|
|
|
}
|