github.com/status-im/status-go@v1.1.0/services/stickers/recent_test.go (about)

     1  package stickers
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"math/big"
     7  	"testing"
     8  
     9  	"github.com/golang/mock/gomock"
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"github.com/status-im/status-go/multiaccounts/accounts"
    14  	mock_settings "github.com/status-im/status-go/multiaccounts/settings/mocks"
    15  	"github.com/status-im/status-go/services/wallet/bigint"
    16  )
    17  
    18  func SetupAPI(t *testing.T) (*API, *mock_settings.MockDatabaseSettingsManager) {
    19  	ctrl := gomock.NewController(t)
    20  	defer ctrl.Finish()
    21  
    22  	mockDB := mock_settings.NewMockDatabaseSettingsManager(ctrl)
    23  
    24  	require.NotNil(t, mockDB)
    25  
    26  	accountDatabase := &accounts.Database{
    27  		DatabaseSettingsManager: mockDB,
    28  	}
    29  
    30  	api := NewAPI(context.Background(), accountDatabase, nil, nil, nil, "test-store-dir", nil, nil)
    31  	require.NotNil(t, api)
    32  
    33  	return api, mockDB
    34  }
    35  
    36  func Test_WHEN_EmptyRecentStickers_And_EmptyStickerPacks_THEN_EmptyStickers_Returned(t *testing.T) {
    37  
    38  	api, mockDB := SetupAPI(t)
    39  
    40  	mockDB.EXPECT().GetInstalledStickerPacks().Return(nil, nil)
    41  
    42  	actual, err := api.recentStickers()
    43  
    44  	assert.NoError(t, err)
    45  	assert.Equal(t, []Sticker{}, actual)
    46  }
    47  
    48  func Test_WHEN_EmptyStickerPacks_THEN_EmptyStickers_Returned(t *testing.T) {
    49  	expectedStickers := []Sticker{
    50  		{
    51  			PackID: &bigint.BigInt{Int: big.NewInt(1)},
    52  			URL:    "sticker1",
    53  			Hash:   "0x1",
    54  		},
    55  		{
    56  			PackID: &bigint.BigInt{Int: big.NewInt(2)},
    57  			URL:    "sticker2",
    58  			Hash:   "0x2",
    59  		},
    60  	}
    61  
    62  	expectedStickerPacks := map[string]StickerPack{}
    63  
    64  	api, mockDB := SetupAPI(t)
    65  
    66  	expectedStickersJSON, err := json.Marshal(expectedStickers)
    67  	require.NoError(t, err)
    68  
    69  	expectedStickerPacksJSON, err := json.Marshal(expectedStickerPacks)
    70  	require.NoError(t, err)
    71  
    72  	mockDB.EXPECT().GetInstalledStickerPacks().Return((*json.RawMessage)(&expectedStickerPacksJSON), nil)
    73  	mockDB.EXPECT().GetRecentStickers().Return((*json.RawMessage)(&expectedStickersJSON), nil)
    74  
    75  	actual, err := api.recentStickers()
    76  
    77  	require.NoError(t, err)
    78  	require.Equal(t, 0, len(actual))
    79  	require.Equal(t, []Sticker{}, actual)
    80  }
    81  
    82  func Test_WHEN_Stickers_In_Existing_SingleStickerPack_THEN_Stickers_Returned(t *testing.T) {
    83  	expectedStickers := []Sticker{
    84  		{
    85  			PackID: &bigint.BigInt{Int: big.NewInt(1)},
    86  			URL:    "sticker1",
    87  			Hash:   "0x1",
    88  		},
    89  		{
    90  			PackID: &bigint.BigInt{Int: big.NewInt(2)},
    91  			URL:    "sticker2",
    92  			Hash:   "0x2",
    93  		},
    94  	}
    95  
    96  	expectedStickerPacks := map[string]StickerPack{
    97  		"1": {
    98  			ID:        &bigint.BigInt{Int: big.NewInt(1)},
    99  			Name:      "test",
   100  			Author:    "test",
   101  			Owner:     [20]byte{},
   102  			Price:     &bigint.BigInt{Int: big.NewInt(10)},
   103  			Preview:   "",
   104  			Thumbnail: "",
   105  			Stickers:  expectedStickers,
   106  			Status:    1,
   107  		},
   108  		"2": {
   109  			ID:        &bigint.BigInt{Int: big.NewInt(2)},
   110  			Name:      "test",
   111  			Author:    "test",
   112  			Owner:     [20]byte{},
   113  			Price:     &bigint.BigInt{Int: big.NewInt(10)},
   114  			Preview:   "",
   115  			Thumbnail: "",
   116  			Stickers:  expectedStickers,
   117  			Status:    1,
   118  		},
   119  	}
   120  
   121  	api, mockDB := SetupAPI(t)
   122  
   123  	expectedStickersJSON, err := json.Marshal(expectedStickers)
   124  	require.NoError(t, err)
   125  
   126  	expectedStickerPacksJSON, err := json.Marshal(expectedStickerPacks)
   127  	require.NoError(t, err)
   128  
   129  	mockDB.EXPECT().GetInstalledStickerPacks().Return((*json.RawMessage)(&expectedStickerPacksJSON), nil)
   130  	mockDB.EXPECT().GetRecentStickers().Return((*json.RawMessage)(&expectedStickersJSON), nil)
   131  
   132  	actual, err := api.recentStickers()
   133  
   134  	require.NoError(t, err)
   135  	require.Equal(t, 2, len(actual))
   136  	require.Equal(t, expectedStickers, actual)
   137  }
   138  
   139  func Test_WHEN_Stickers_In_Existing_In_MultipleStickerPacks_THEN_Stickers_Returned(t *testing.T) {
   140  	expectedStickers := []Sticker{
   141  		{
   142  			PackID: &bigint.BigInt{Int: big.NewInt(1)},
   143  			URL:    "sticker1",
   144  			Hash:   "0x1",
   145  		},
   146  		{
   147  			PackID: &bigint.BigInt{Int: big.NewInt(2)},
   148  			URL:    "sticker2",
   149  			Hash:   "0x2",
   150  		},
   151  	}
   152  
   153  	expectedStickerPacks := map[string]StickerPack{
   154  		"1": {
   155  			ID:        &bigint.BigInt{Int: big.NewInt(1)},
   156  			Name:      "test",
   157  			Author:    "test",
   158  			Owner:     [20]byte{},
   159  			Price:     &bigint.BigInt{Int: big.NewInt(10)},
   160  			Preview:   "",
   161  			Thumbnail: "",
   162  			Stickers:  expectedStickers,
   163  			Status:    1,
   164  		},
   165  		"2": {
   166  			ID:        &bigint.BigInt{Int: big.NewInt(2)},
   167  			Name:      "test",
   168  			Author:    "test",
   169  			Owner:     [20]byte{},
   170  			Price:     &bigint.BigInt{Int: big.NewInt(10)},
   171  			Preview:   "",
   172  			Thumbnail: "",
   173  			Stickers:  expectedStickers,
   174  			Status:    1,
   175  		},
   176  		"3": {
   177  			ID:        &bigint.BigInt{Int: big.NewInt(3)},
   178  			Name:      "test",
   179  			Author:    "test",
   180  			Owner:     [20]byte{},
   181  			Price:     &bigint.BigInt{Int: big.NewInt(10)},
   182  			Preview:   "",
   183  			Thumbnail: "",
   184  			Stickers:  expectedStickers,
   185  			Status:    1,
   186  		},
   187  	}
   188  
   189  	api, mockDB := SetupAPI(t)
   190  
   191  	expectedStickersJSON, err := json.Marshal(expectedStickers)
   192  	require.NoError(t, err)
   193  
   194  	expectedStickerPacksJSON, err := json.Marshal(expectedStickerPacks)
   195  	require.NoError(t, err)
   196  
   197  	mockDB.EXPECT().GetInstalledStickerPacks().Return((*json.RawMessage)(&expectedStickerPacksJSON), nil)
   198  	mockDB.EXPECT().GetRecentStickers().Return((*json.RawMessage)(&expectedStickersJSON), nil)
   199  
   200  	actual, err := api.recentStickers()
   201  
   202  	require.NoError(t, err)
   203  	require.Equal(t, 2, len(actual))
   204  	require.Equal(t, expectedStickers, actual)
   205  }