github.com/status-im/status-go@v1.1.0/services/wallet/collectibles/collectible_data_db_test.go (about) 1 package collectibles 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/ethereum/go-ethereum/common" 8 9 "github.com/status-im/status-go/services/wallet/bigint" 10 w_common "github.com/status-im/status-go/services/wallet/common" 11 "github.com/status-im/status-go/services/wallet/thirdparty" 12 "github.com/status-im/status-go/t/helpers" 13 "github.com/status-im/status-go/walletdatabase" 14 15 "github.com/stretchr/testify/require" 16 ) 17 18 func setupCollectibleDataDBTest(t *testing.T) (*CollectibleDataDB, func()) { 19 db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{}) 20 require.NoError(t, err) 21 return NewCollectibleDataDB(db), func() { 22 require.NoError(t, db.Close()) 23 } 24 } 25 26 func TestUpdateCollectiblesData(t *testing.T) { 27 db, cleanDB := setupCollectibleDataDBTest(t) 28 defer cleanDB() 29 30 data := thirdparty.GenerateTestCollectiblesData(50) 31 32 var err error 33 34 err = db.SetData(data, true) 35 require.NoError(t, err) 36 37 ids := make([]thirdparty.CollectibleUniqueID, 0, len(data)) 38 for _, collectible := range data { 39 ids = append(ids, collectible.ID) 40 } 41 42 // Check for missing IDs 43 idsNotInDB, err := db.GetIDsNotInDB(ids) 44 require.NoError(t, err) 45 require.Empty(t, idsNotInDB) 46 47 extraID0 := thirdparty.CollectibleUniqueID{ 48 ContractID: thirdparty.ContractID{ 49 ChainID: w_common.ChainID(100), 50 Address: common.BigToAddress(big.NewInt(100)), 51 }, 52 TokenID: &bigint.BigInt{Int: big.NewInt(100)}, 53 } 54 extraID1 := thirdparty.CollectibleUniqueID{ 55 ContractID: thirdparty.ContractID{ 56 ChainID: w_common.ChainID(101), 57 Address: common.BigToAddress(big.NewInt(101)), 58 }, 59 TokenID: &bigint.BigInt{Int: big.NewInt(101)}, 60 } 61 extraIds := []thirdparty.CollectibleUniqueID{extraID0, extraID1} 62 63 idsNotInDB, err = db.GetIDsNotInDB(extraIds) 64 require.NoError(t, err) 65 require.ElementsMatch(t, extraIds, idsNotInDB) 66 67 combinedIds := append(ids, extraIds...) 68 idsNotInDB, err = db.GetIDsNotInDB(combinedIds) 69 require.NoError(t, err) 70 require.ElementsMatch(t, extraIds, idsNotInDB) 71 72 // Check for loaded data 73 loadedMap, err := db.GetData(ids) 74 require.NoError(t, err) 75 require.Equal(t, len(ids), len(loadedMap)) 76 77 for _, origC := range data { 78 require.Equal(t, origC, loadedMap[origC.ID.HashKey()]) 79 } 80 81 // update some collectibles, changing the provider 82 c0Orig := data[0] 83 c0 := c0Orig 84 c0.Name = "new collectible name 0" 85 c0.Provider = "new collectible provider 0" 86 87 c1Orig := data[1] 88 c1 := c1Orig 89 c1.Name = "new collectible name 1" 90 c1.Provider = "new collectible provider 1" 91 92 // Test allowUpdate = false 93 err = db.SetData([]thirdparty.CollectibleData{c0, c1}, false) 94 require.NoError(t, err) 95 96 loadedMap, err = db.GetData([]thirdparty.CollectibleUniqueID{c0.ID, c1.ID}) 97 require.NoError(t, err) 98 require.Equal(t, 2, len(loadedMap)) 99 100 require.Equal(t, c0Orig, loadedMap[c0.ID.HashKey()]) 101 require.Equal(t, c1Orig, loadedMap[c1.ID.HashKey()]) 102 103 // Test allowUpdate = true 104 err = db.SetData([]thirdparty.CollectibleData{c0, c1}, true) 105 require.NoError(t, err) 106 107 loadedMap, err = db.GetData([]thirdparty.CollectibleUniqueID{c0.ID, c1.ID}) 108 require.NoError(t, err) 109 require.Equal(t, 2, len(loadedMap)) 110 111 require.Equal(t, c0, loadedMap[c0.ID.HashKey()]) 112 require.Equal(t, c1, loadedMap[c1.ID.HashKey()]) 113 } 114 115 func TestUpdateCommunityData(t *testing.T) { 116 db, cleanDB := setupCollectibleDataDBTest(t) 117 defer cleanDB() 118 119 const nData = 50 120 data := thirdparty.GenerateTestCollectiblesData(nData) 121 communityData := thirdparty.GenerateTestCollectiblesCommunityData(nData) 122 123 var err error 124 125 err = db.SetData(data, true) 126 require.NoError(t, err) 127 128 for i := 0; i < nData; i++ { 129 err = db.SetCommunityInfo(data[i].ID, communityData[i]) 130 require.NoError(t, err) 131 } 132 133 for i := 0; i < nData; i++ { 134 loadedCommunityData, err := db.GetCommunityInfo(data[i].ID) 135 require.NoError(t, err) 136 require.Equal(t, communityData[i], *loadedCommunityData) 137 } 138 }