member_test.gno
1.37 Kb · 43 lines
1package hub_test
2
3import (
4 "testing"
5
6 "gno.land/p/gnoland/boards/exts/hub/v0"
7 "gno.land/p/gnoland/boards/v0"
8 "gno.land/p/nt/urequire/v0"
9)
10
11func TestNewSafeMember(t *testing.T) {
12 ref := boards.User{
13 Address: alice,
14 Roles: []boards.Role{"owner", "admin"},
15 }
16
17 member := hub.NewSafeMember(ref)
18
19 urequire.Equal(t, alice.String(), member.Address().String(), "expect address to match")
20 urequire.Equal(t, 2, len(member.Roles()), "expect role count to match")
21 urequire.Equal(t, "owner", member.Roles()[0], "expect first role to match")
22 urequire.Equal(t, "admin", member.Roles()[1], "expect second role to match")
23}
24
25func TestNewSafeMemberWithoutRoles(t *testing.T) {
26 member := hub.NewSafeMember(boards.User{Address: bob})
27
28 urequire.Equal(t, bob.String(), member.Address().String(), "expect address to match")
29 urequire.Equal(t, 0, len(member.Roles()), "expect no roles")
30}
31
32func TestSafeMemberIsASnapshot(t *testing.T) {
33 roles := []boards.Role{"owner"}
34 member := hub.NewSafeMember(boards.User{Address: alice, Roles: roles})
35
36 // Mutating the source must not change what the member reports.
37 roles[0] = "guest"
38 urequire.Equal(t, "owner", member.Roles()[0], "expect source mutation to be ignored")
39
40 // Mutating a returned slice must not change what the member reports.
41 member.Roles()[0] = "guest"
42 urequire.Equal(t, "owner", member.Roles()[0], "expect returned slice to be a copy")
43}