...

Source file src/github.com/jellydator/ttlcache/v3/item_test.go

Documentation: github.com/jellydator/ttlcache/v3

     1  package ttlcache
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func Test_newItem(t *testing.T) {
    12  	item := newItem("key", 123, time.Hour, false)
    13  	require.NotNil(t, item)
    14  	assert.Equal(t, "key", item.key)
    15  	assert.Equal(t, 123, item.value)
    16  	assert.Equal(t, time.Hour, item.ttl)
    17  	assert.Equal(t, int64(-1), item.version)
    18  	assert.WithinDuration(t, time.Now().Add(time.Hour), item.expiresAt, time.Minute)
    19  }
    20  
    21  func Test_Item_update(t *testing.T) {
    22  	item := Item[string, string]{
    23  		expiresAt: time.Now().Add(-time.Hour),
    24  		value:     "hello",
    25  		version:   0,
    26  	}
    27  
    28  	item.update("test", time.Hour)
    29  	assert.Equal(t, "test", item.value)
    30  	assert.Equal(t, time.Hour, item.ttl)
    31  	assert.Equal(t, int64(1), item.version)
    32  	assert.WithinDuration(t, time.Now().Add(time.Hour), item.expiresAt, time.Minute)
    33  
    34  	item.update("previous ttl", PreviousOrDefaultTTL)
    35  	assert.Equal(t, "previous ttl", item.value)
    36  	assert.Equal(t, time.Hour, item.ttl)
    37  	assert.Equal(t, int64(2), item.version)
    38  	assert.WithinDuration(t, time.Now().Add(time.Hour), item.expiresAt, time.Minute)
    39  
    40  	item.update("hi", NoTTL)
    41  	assert.Equal(t, "hi", item.value)
    42  	assert.Equal(t, NoTTL, item.ttl)
    43  	assert.Equal(t, int64(3), item.version)
    44  	assert.Zero(t, item.expiresAt)
    45  }
    46  
    47  func Test_Item_touch(t *testing.T) {
    48  	var item Item[string, string]
    49  	item.touch()
    50  	assert.Equal(t, int64(0), item.version)
    51  	assert.Zero(t, item.expiresAt)
    52  
    53  	item.ttl = time.Hour
    54  	item.touch()
    55  	assert.Equal(t, int64(0), item.version)
    56  	assert.WithinDuration(t, time.Now().Add(time.Hour), item.expiresAt, time.Minute)
    57  }
    58  
    59  func Test_Item_IsExpired(t *testing.T) {
    60  	// no ttl
    61  	item := Item[string, string]{
    62  		expiresAt: time.Now().Add(-time.Hour),
    63  	}
    64  
    65  	assert.False(t, item.IsExpired())
    66  
    67  	// expired
    68  	item.ttl = time.Hour
    69  	assert.True(t, item.IsExpired())
    70  
    71  	// not expired
    72  	item.expiresAt = time.Now().Add(time.Hour)
    73  	assert.False(t, item.IsExpired())
    74  }
    75  
    76  func Test_Item_Key(t *testing.T) {
    77  	item := Item[string, string]{
    78  		key: "test",
    79  	}
    80  
    81  	assert.Equal(t, "test", item.Key())
    82  }
    83  
    84  func Test_Item_Value(t *testing.T) {
    85  	item := Item[string, string]{
    86  		value: "test",
    87  	}
    88  
    89  	assert.Equal(t, "test", item.Value())
    90  }
    91  
    92  func Test_Item_TTL(t *testing.T) {
    93  	item := Item[string, string]{
    94  		ttl: time.Hour,
    95  	}
    96  
    97  	assert.Equal(t, time.Hour, item.TTL())
    98  }
    99  
   100  func Test_Item_ExpiresAt(t *testing.T) {
   101  	now := time.Now()
   102  	item := Item[string, string]{
   103  		expiresAt: now,
   104  	}
   105  
   106  	assert.Equal(t, now, item.ExpiresAt())
   107  }
   108  
   109  func Test_Item_Version(t *testing.T) {
   110  	item := Item[string, string]{version: 5}
   111  	assert.Equal(t, int64(5), item.Version())
   112  }
   113  

View as plain text