cosmos-sdk/collections/indexes/multi_test.go
2023-02-19 10:31:49 +00:00

63 lines
1.7 KiB
Go

package indexes
import (
"testing"
"cosmossdk.io/collections"
"github.com/stretchr/testify/require"
)
func TestMultiIndex(t *testing.T) {
sk, ctx := deps()
schema := collections.NewSchemaBuilder(sk)
mi := NewMulti(schema, collections.NewPrefix(1), "multi_index", collections.StringKey, collections.Uint64Key, func(_ uint64, value company) (string, error) {
return value.City, nil
})
// we crete two reference keys for primary key 1 and 2 associated with "milan"
require.NoError(t, mi.Reference(ctx, 1, company{City: "milan"}, nil))
require.NoError(t, mi.Reference(ctx, 2, company{City: "milan"}, nil))
iter, err := mi.MatchExact(ctx, "milan")
require.NoError(t, err)
pks, err := iter.PrimaryKeys()
require.NoError(t, err)
require.Equal(t, []uint64{1, 2}, pks)
// replace
require.NoError(t, mi.Reference(ctx, 1, company{City: "new york"}, &company{City: "milan"}))
// assert after replace only company with id 2 is referenced by milan
iter, err = mi.MatchExact(ctx, "milan")
require.NoError(t, err)
pks, err = iter.PrimaryKeys()
require.NoError(t, err)
require.Equal(t, []uint64{2}, pks)
// assert after replace company with id 1 is referenced by new york
iter, err = mi.MatchExact(ctx, "new york")
require.NoError(t, err)
pks, err = iter.PrimaryKeys()
require.NoError(t, err)
require.Equal(t, []uint64{1}, pks)
// test iter methods
iter, err = mi.Iterate(ctx, nil)
require.NoError(t, err)
fullKey, err := iter.FullKey()
require.NoError(t, err)
require.Equal(t, collections.Join("milan", uint64(2)), fullKey)
pk, err := iter.PrimaryKey()
require.NoError(t, err)
require.Equal(t, uint64(2), pk)
iter.Next()
require.True(t, iter.Valid())
iter.Next()
require.False(t, iter.Valid())
require.NoError(t, iter.Close())
}