storage_test.gno

2.12 Kb ยท 70 lines
 1package simple_test
 2
 3import (
 4	"testing"
 5
 6	"gno.land/p/demo/gnorkle/storage"
 7	"gno.land/p/demo/gnorkle/storage/simple"
 8	"gno.land/p/demo/uassert"
 9	"gno.land/p/demo/ufmt"
10	"gno.land/p/demo/urequire"
11)
12
13func TestStorage(t *testing.T) {
14	var undefinedStorage *simple.Storage
15	err := undefinedStorage.Put("")
16	uassert.ErrorIs(t, err, storage.ErrUndefined, "expected storage.ErrUndefined on undefined storage")
17
18	tests := []struct {
19		name                      string
20		valuesToPut               []string
21		expLatestValueString      string
22		expLatestValueTimeIsZero  bool
23		expHistoricalValueStrings []string
24	}{
25		{
26			name:                     "empty",
27			expLatestValueTimeIsZero: true,
28		},
29		{
30			name:                      "one value",
31			valuesToPut:               []string{"one"},
32			expLatestValueString:      "one",
33			expHistoricalValueStrings: []string{"one"},
34		},
35		{
36			name:                      "two values",
37			valuesToPut:               []string{"one", "two"},
38			expLatestValueString:      "two",
39			expHistoricalValueStrings: []string{"one", "two"},
40		},
41		{
42			name:                      "three values",
43			valuesToPut:               []string{"one", "two", "three"},
44			expLatestValueString:      "three",
45			expHistoricalValueStrings: []string{"two", "three"},
46		},
47	}
48
49	for _, tt := range tests {
50		t.Run(tt.name, func(t *testing.T) {
51			simpleStorage := simple.NewStorage(2)
52			for _, value := range tt.valuesToPut {
53				err := simpleStorage.Put(value)
54				urequire.NoError(t, err, "unexpected error putting value in storage")
55			}
56
57			latestValue := simpleStorage.GetLatest()
58			uassert.Equal(t, tt.expLatestValueString, latestValue.String)
59			uassert.Equal(t, tt.expLatestValueTimeIsZero, latestValue.Time.IsZero())
60
61			historicalValues := simpleStorage.GetHistory()
62			urequire.Equal(t, len(tt.expHistoricalValueStrings), len(historicalValues), "historical values length does not match")
63
64			for i, expValue := range tt.expHistoricalValueStrings {
65				uassert.Equal(t, historicalValues[i].String, expValue)
66				urequire.False(t, historicalValues[i].Time.IsZero(), ufmt.Sprintf("unexpeced zero time for historical value at index %d", i))
67			}
68		})
69	}
70}