206 lines
5.1 KiB
Go
206 lines
5.1 KiB
Go
package stickers
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"math/big"
|
|
"testing"
|
|
|
|
"github.com/golang/mock/gomock"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/status-im/status-go/multiaccounts/accounts"
|
|
mock_settings "github.com/status-im/status-go/multiaccounts/settings/mocks"
|
|
"github.com/status-im/status-go/services/wallet/bigint"
|
|
)
|
|
|
|
func SetupAPI(t *testing.T) (*API, *mock_settings.MockDatabaseSettingsManager) {
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
mockDB := mock_settings.NewMockDatabaseSettingsManager(ctrl)
|
|
|
|
require.NotNil(t, mockDB)
|
|
|
|
accountDatabase := &accounts.Database{
|
|
DatabaseSettingsManager: mockDB,
|
|
}
|
|
|
|
api := NewAPI(context.Background(), accountDatabase, nil, nil, nil, "test-store-dir", nil, nil)
|
|
require.NotNil(t, api)
|
|
|
|
return api, mockDB
|
|
}
|
|
|
|
func Test_WHEN_EmptyRecentStickers_And_EmptyStickerPacks_THEN_EmptyStickers_Returned(t *testing.T) {
|
|
|
|
api, mockDB := SetupAPI(t)
|
|
|
|
mockDB.EXPECT().GetInstalledStickerPacks().Return(nil, nil)
|
|
|
|
actual, err := api.recentStickers()
|
|
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []Sticker{}, actual)
|
|
}
|
|
|
|
func Test_WHEN_EmptyStickerPacks_THEN_EmptyStickers_Returned(t *testing.T) {
|
|
expectedStickers := []Sticker{
|
|
{
|
|
PackID: &bigint.BigInt{Int: big.NewInt(1)},
|
|
URL: "sticker1",
|
|
Hash: "0x1",
|
|
},
|
|
{
|
|
PackID: &bigint.BigInt{Int: big.NewInt(2)},
|
|
URL: "sticker2",
|
|
Hash: "0x2",
|
|
},
|
|
}
|
|
|
|
expectedStickerPacks := map[string]StickerPack{}
|
|
|
|
api, mockDB := SetupAPI(t)
|
|
|
|
expectedStickersJSON, err := json.Marshal(expectedStickers)
|
|
require.NoError(t, err)
|
|
|
|
expectedStickerPacksJSON, err := json.Marshal(expectedStickerPacks)
|
|
require.NoError(t, err)
|
|
|
|
mockDB.EXPECT().GetInstalledStickerPacks().Return((*json.RawMessage)(&expectedStickerPacksJSON), nil)
|
|
mockDB.EXPECT().GetRecentStickers().Return((*json.RawMessage)(&expectedStickersJSON), nil)
|
|
|
|
actual, err := api.recentStickers()
|
|
|
|
require.NoError(t, err)
|
|
require.Equal(t, 0, len(actual))
|
|
require.Equal(t, []Sticker{}, actual)
|
|
}
|
|
|
|
func Test_WHEN_Stickers_In_Existing_SingleStickerPack_THEN_Stickers_Returned(t *testing.T) {
|
|
expectedStickers := []Sticker{
|
|
{
|
|
PackID: &bigint.BigInt{Int: big.NewInt(1)},
|
|
URL: "sticker1",
|
|
Hash: "0x1",
|
|
},
|
|
{
|
|
PackID: &bigint.BigInt{Int: big.NewInt(2)},
|
|
URL: "sticker2",
|
|
Hash: "0x2",
|
|
},
|
|
}
|
|
|
|
expectedStickerPacks := map[string]StickerPack{
|
|
"1": {
|
|
ID: &bigint.BigInt{Int: big.NewInt(1)},
|
|
Name: "test",
|
|
Author: "test",
|
|
Owner: [20]byte{},
|
|
Price: &bigint.BigInt{Int: big.NewInt(10)},
|
|
Preview: "",
|
|
Thumbnail: "",
|
|
Stickers: expectedStickers,
|
|
Status: 1,
|
|
},
|
|
"2": {
|
|
ID: &bigint.BigInt{Int: big.NewInt(2)},
|
|
Name: "test",
|
|
Author: "test",
|
|
Owner: [20]byte{},
|
|
Price: &bigint.BigInt{Int: big.NewInt(10)},
|
|
Preview: "",
|
|
Thumbnail: "",
|
|
Stickers: expectedStickers,
|
|
Status: 1,
|
|
},
|
|
}
|
|
|
|
api, mockDB := SetupAPI(t)
|
|
|
|
expectedStickersJSON, err := json.Marshal(expectedStickers)
|
|
require.NoError(t, err)
|
|
|
|
expectedStickerPacksJSON, err := json.Marshal(expectedStickerPacks)
|
|
require.NoError(t, err)
|
|
|
|
mockDB.EXPECT().GetInstalledStickerPacks().Return((*json.RawMessage)(&expectedStickerPacksJSON), nil)
|
|
mockDB.EXPECT().GetRecentStickers().Return((*json.RawMessage)(&expectedStickersJSON), nil)
|
|
|
|
actual, err := api.recentStickers()
|
|
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(actual))
|
|
require.Equal(t, expectedStickers, actual)
|
|
}
|
|
|
|
func Test_WHEN_Stickers_In_Existing_In_MultipleStickerPacks_THEN_Stickers_Returned(t *testing.T) {
|
|
expectedStickers := []Sticker{
|
|
{
|
|
PackID: &bigint.BigInt{Int: big.NewInt(1)},
|
|
URL: "sticker1",
|
|
Hash: "0x1",
|
|
},
|
|
{
|
|
PackID: &bigint.BigInt{Int: big.NewInt(2)},
|
|
URL: "sticker2",
|
|
Hash: "0x2",
|
|
},
|
|
}
|
|
|
|
expectedStickerPacks := map[string]StickerPack{
|
|
"1": {
|
|
ID: &bigint.BigInt{Int: big.NewInt(1)},
|
|
Name: "test",
|
|
Author: "test",
|
|
Owner: [20]byte{},
|
|
Price: &bigint.BigInt{Int: big.NewInt(10)},
|
|
Preview: "",
|
|
Thumbnail: "",
|
|
Stickers: expectedStickers,
|
|
Status: 1,
|
|
},
|
|
"2": {
|
|
ID: &bigint.BigInt{Int: big.NewInt(2)},
|
|
Name: "test",
|
|
Author: "test",
|
|
Owner: [20]byte{},
|
|
Price: &bigint.BigInt{Int: big.NewInt(10)},
|
|
Preview: "",
|
|
Thumbnail: "",
|
|
Stickers: expectedStickers,
|
|
Status: 1,
|
|
},
|
|
"3": {
|
|
ID: &bigint.BigInt{Int: big.NewInt(3)},
|
|
Name: "test",
|
|
Author: "test",
|
|
Owner: [20]byte{},
|
|
Price: &bigint.BigInt{Int: big.NewInt(10)},
|
|
Preview: "",
|
|
Thumbnail: "",
|
|
Stickers: expectedStickers,
|
|
Status: 1,
|
|
},
|
|
}
|
|
|
|
api, mockDB := SetupAPI(t)
|
|
|
|
expectedStickersJSON, err := json.Marshal(expectedStickers)
|
|
require.NoError(t, err)
|
|
|
|
expectedStickerPacksJSON, err := json.Marshal(expectedStickerPacks)
|
|
require.NoError(t, err)
|
|
|
|
mockDB.EXPECT().GetInstalledStickerPacks().Return((*json.RawMessage)(&expectedStickerPacksJSON), nil)
|
|
mockDB.EXPECT().GetRecentStickers().Return((*json.RawMessage)(&expectedStickersJSON), nil)
|
|
|
|
actual, err := api.recentStickers()
|
|
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(actual))
|
|
require.Equal(t, expectedStickers, actual)
|
|
}
|