status-im/status-go

View on GitHub
protocol/common/raw_messages_persistence_test.go

Summary

Maintainability
A
0 mins
Test Coverage
package common

import (
    "crypto/ecdsa"
    "testing"
    "time"

    "github.com/stretchr/testify/require"

    "github.com/status-im/status-go/appdatabase"
    "github.com/status-im/status-go/eth-node/crypto"
    "github.com/status-im/status-go/protocol/sqlite"
    "github.com/status-im/status-go/t/helpers"
)

func TestSaveRawMessage(t *testing.T) {
    db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
    require.NoError(t, err)
    require.NoError(t, sqlite.Migrate(db))
    p := NewRawMessagesPersistence(db)

    pk, err := crypto.GenerateKey()
    require.NoError(t, err)

    err = p.SaveRawMessage(&RawMessage{
        ID:                    "1",
        ResendType:            ResendTypeRawMessage,
        LocalChatID:           "",
        CommunityID:           []byte("c1"),
        CommunityKeyExMsgType: KeyExMsgRekey,
        Sender:                pk,
        ResendMethod:          ResendMethodSendPrivate,
        Recipients:            []*ecdsa.PublicKey{pk.Public().(*ecdsa.PublicKey)},
    })
    require.NoError(t, err)
    m, err := p.RawMessageByID("1")
    require.NoError(t, err)
    require.Equal(t, "1", m.ID)
    require.Equal(t, ResendTypeRawMessage, m.ResendType)
    require.Equal(t, KeyExMsgRekey, m.CommunityKeyExMsgType)
    require.Equal(t, "c1", string(m.CommunityID))
    require.Equal(t, pk, m.Sender)
    require.Equal(t, ResendMethodSendPrivate, m.ResendMethod)
    require.Equal(t, 1, len(m.Recipients))
}

func TestUpdateRawMessageSent(t *testing.T) {
    db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
    require.NoError(t, err)
    require.NoError(t, sqlite.Migrate(db))
    p := NewRawMessagesPersistence(db)

    pk, err := crypto.GenerateKey()
    require.NoError(t, err)

    rawMessageID := "1"
    err = p.SaveRawMessage(buildRawMessage(rawMessageID, pk))
    require.NoError(t, err)

    rawMessage, err := p.RawMessageByID(rawMessageID)
    require.NoError(t, err)
    require.True(t, rawMessage.Sent)
    require.Greater(t, rawMessage.LastSent, uint64(0))

    err = p.UpdateRawMessageSent(rawMessageID, false)
    require.NoError(t, err)

    m, err := p.RawMessageByID(rawMessageID)
    require.NoError(t, err)
    require.False(t, m.Sent)
}

func TestUpdateRawMessageLastSent(t *testing.T) {
    db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
    require.NoError(t, err)
    require.NoError(t, sqlite.Migrate(db))
    p := NewRawMessagesPersistence(db)

    pk, err := crypto.GenerateKey()
    require.NoError(t, err)

    rawMessageID := "1"
    err = p.SaveRawMessage(buildRawMessage(rawMessageID, pk))
    require.NoError(t, err)

    rawMessage, err := p.RawMessageByID(rawMessageID)
    require.NoError(t, err)
    require.True(t, rawMessage.Sent)
    require.Greater(t, rawMessage.LastSent, uint64(0))

    err = p.UpdateRawMessageLastSent(rawMessageID, 0)
    require.NoError(t, err)

    m, err := p.RawMessageByID(rawMessageID)
    require.NoError(t, err)
    require.Equal(t, m.LastSent, uint64(0))
}

func buildRawMessage(rawMessageID string, pk *ecdsa.PrivateKey) *RawMessage {
    return &RawMessage{
        ID:                    rawMessageID,
        ResendType:            ResendTypeRawMessage,
        LocalChatID:           "",
        CommunityID:           []byte("c1"),
        CommunityKeyExMsgType: KeyExMsgRekey,
        Sender:                pk,
        ResendMethod:          ResendMethodSendPrivate,
        Recipients:            []*ecdsa.PublicKey{pk.Public().(*ecdsa.PublicKey)},
        Sent:                  true,
        LastSent:              uint64(time.Now().UnixNano() / int64(time.Millisecond)),
    }
}