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