status-im/status-go

View on GitHub
services/wallet/blockchainstate/blockchainstate_test.go

Summary

Maintainability
A
0 mins
Test Coverage
package blockchainstate

import (
    "testing"
    "time"

    "github.com/stretchr/testify/require"
)

var mockupTime = time.Unix(946724400, 0) // 2000-01-01 12:00:00

func mockupSince(t time.Time) time.Duration {
    return mockupTime.Sub(t)
}

func setupTestState(t *testing.T) (s *BlockChainState) {
    state := NewBlockChainState()
    state.sinceFn = mockupSince
    return state
}

func TestEstimateLatestBlockNumber(t *testing.T) {
    state := setupTestState(t)

    state.setLatestBlockDataForChain(1, LatestBlockData{
        blockNumber:   uint64(100),
        timestamp:     mockupTime.Add(-31 * time.Second),
        blockDuration: 10 * time.Second,
    })

    state.setLatestBlockDataForChain(2, LatestBlockData{
        blockNumber:   uint64(200),
        timestamp:     mockupTime.Add(-5 * time.Second),
        blockDuration: 12 * time.Second,
    })

    val, ok := state.estimateLatestBlockNumber(1)
    require.True(t, ok)
    require.Equal(t, uint64(103), val)
    val, ok = state.estimateLatestBlockNumber(2)
    require.True(t, ok)
    require.Equal(t, uint64(200), val)
    val, ok = state.estimateLatestBlockNumber(3)
    require.False(t, ok)
    require.Equal(t, uint64(0), val)
}