github.com/status-im/status-go@v1.1.0/protocol/ens/persistence_test.go (about)

     1  package ens
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  
     8  	"github.com/status-im/status-go/appdatabase"
     9  	"github.com/status-im/status-go/protocol/sqlite"
    10  	"github.com/status-im/status-go/t/helpers"
    11  )
    12  
    13  func TestGetENSToBeVerified(t *testing.T) {
    14  	pk := "1"
    15  	name := "test.eth"
    16  	updatedName := "test2.eth"
    17  
    18  	db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
    19  	require.NoError(t, err)
    20  	err = sqlite.Migrate(db)
    21  	require.NoError(t, err)
    22  
    23  	persistence := NewPersistence(db)
    24  	require.NotNil(t, persistence)
    25  
    26  	record := VerificationRecord{Name: name, PublicKey: pk, Clock: 2}
    27  
    28  	// We add a record, it should be nil
    29  	response, err := persistence.AddRecord(record)
    30  	require.NoError(t, err)
    31  	require.Nil(t, response)
    32  
    33  	// We add a record again, it should return the same record
    34  	response, err = persistence.AddRecord(record)
    35  	require.NoError(t, err)
    36  	require.NotNil(t, response)
    37  
    38  	require.False(t, response.Verified)
    39  	require.Equal(t, record.Name, response.Name)
    40  	require.Equal(t, record.PublicKey, response.PublicKey)
    41  
    42  	// We add a record again, with a different clock value
    43  	record.Clock++
    44  	response, err = persistence.AddRecord(record)
    45  	require.NoError(t, err)
    46  	require.NotNil(t, response)
    47  
    48  	require.False(t, response.Verified)
    49  	require.Equal(t, record.Name, response.Name)
    50  	require.Equal(t, record.PublicKey, response.PublicKey)
    51  
    52  	// We add a record again, with a different name, but lower clock value
    53  	record.Clock--
    54  	record.Name = updatedName
    55  	response, err = persistence.AddRecord(record)
    56  	require.NoError(t, err)
    57  	require.NotNil(t, response)
    58  
    59  	require.False(t, response.Verified)
    60  	require.Equal(t, name, response.Name)
    61  	require.Equal(t, record.PublicKey, response.PublicKey)
    62  
    63  	// We add a record again, with a different name and higher clock value
    64  	record.Clock += 2
    65  	record.Name = updatedName
    66  	response, err = persistence.AddRecord(record)
    67  	require.NoError(t, err)
    68  	require.Nil(t, response)
    69  
    70  	// update the record
    71  
    72  	record.Verified = false
    73  	record.VerificationRetries = 10
    74  	record.NextRetry = 20
    75  	record.VerifiedAt = 30
    76  
    77  	err = persistence.UpdateRecords([]*VerificationRecord{&record})
    78  	require.NoError(t, err)
    79  
    80  	toBeVerified, err := persistence.GetENSToBeVerified(20)
    81  	require.NoError(t, err)
    82  	require.Len(t, toBeVerified, 1)
    83  	require.False(t, toBeVerified[0].Verified)
    84  	require.Equal(t, uint64(10), toBeVerified[0].VerificationRetries)
    85  	require.Equal(t, uint64(20), toBeVerified[0].NextRetry)
    86  	require.Equal(t, uint64(30), toBeVerified[0].VerifiedAt)
    87  	require.Equal(t, updatedName, toBeVerified[0].Name)
    88  	require.Equal(t, pk, toBeVerified[0].PublicKey)
    89  }