Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}