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 }