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  }