member_storage_test.gno

2.24 Kb ยท 91 lines
 1package commondao_test
 2
 3import (
 4	"std"
 5	"testing"
 6
 7	"gno.land/p/nt/uassert"
 8	"gno.land/p/nt/urequire"
 9
10	"gno.land/p/nt/commondao"
11)
12
13func TestMemberStorageWithGrouping(t *testing.T) {
14	// Prepare
15	tiers := []struct {
16		Name    string
17		Weight  int
18		Members []std.Address
19	}{
20		{
21			Name:   "Tier 1",
22			Weight: 3,
23			Members: []std.Address{
24				"g16jpf0puufcpcjkph5nxueec8etpcldz7zwgydq",
25				"g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
26			},
27		},
28		{
29			Name:   "Tier 2",
30			Weight: 2,
31			Members: []std.Address{
32				"g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj",
33			},
34		},
35	}
36
37	storage := commondao.NewMemberStorageWithGrouping()
38	for _, tier := range tiers {
39		mg, err := storage.Grouping().Add(tier.Name)
40		urequire.NoError(t, err, "expect no error adding tier")
41
42		mg.SetMeta(tier.Weight)
43
44		for _, addr := range tier.Members {
45			ok := mg.Members().Add(addr)
46			urequire.True(t, ok, "expect member to be added")
47		}
48	}
49
50	// Assert
51	for i := 0; i < len(tiers); i++ {
52		tier := tiers[i]
53		mg, found := storage.Grouping().Get(tier.Name)
54		urequire.True(t, found, "expect member group to be found")
55
56		v := mg.GetMeta()
57		urequire.True(t, v != nil, "expect meta to be not nil")
58
59		weight, ok := v.(int)
60		urequire.True(t, ok, "expect group metadata to be an integer")
61		uassert.Equal(t, tier.Weight, weight, "expect group weight to match")
62
63		var i int
64		mg.Members().IterateByOffset(0, len(tier.Members), func(addr std.Address) bool {
65			uassert.Equal(t, tier.Members[i], addr, "expect tier member to match")
66
67			i++
68			return false
69		})
70
71		uassert.Equal(t, len(tier.Members), i, "expect all tier members to be iterated")
72	}
73}
74
75func TestCountStorageMembers(t *testing.T) {
76	storage := commondao.NewMemberStorageWithGrouping()
77	storage.Add("g16jpf0puufcpcjkph5nxueec8etpcldz7zwgydq")
78
79	g, err := storage.Grouping().Add("A")
80	urequire.NoError(t, err, "expect no error creating member group A")
81
82	g.Members().Add("g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5")
83	g.Members().Add("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj")
84
85	g, err = storage.Grouping().Add("B")
86	urequire.NoError(t, err, "expect no error creating member group B")
87
88	g.Members().Add("g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj") // Add a member that exists in other group
89
90	uassert.Equal(t, 4, commondao.CountStorageMembers(storage))
91}