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}