PathrockNetwork Gno Explorer
HomeBlocksTransactionsRealmsPackagesValidators

PathrockNetwork Gno Explorer — an independent explorer for Gno.land Mainnet (gnoland-1), operated by PathrockNetwork. Not an official Gno.land service.

gnowebarchive RPC

gno.land/p/gnoland/boards/v0

Package
Open in gnoweb ↗

Overview

Kind
Pure package
Name
v0
Namespace
gnoland / boards
Files
22 (gnomod.toml)
Exported functions
n/a — not supported for pure packages by the node (vm/qfuncs)
Module
gno.land/p/gnoland/boards/v0
gno
0.9

Files (22)

  • gnomod.tomltoml
  • board.gnogno
  • flag_storage.gnogno
  • id.gnogno
  • permission_set.gnogno
  • permissions.gnogno
  • post_storage.gnogno
  • post.gnogno
  • reply.gnogno
  • repost_storage.gnogno
  • storage.gnogno
  • thread.gnogno
  • board_test.gnogno
  • flag_storage_test.gnogno
  • id_test.gnogno
  • permission_set_test.gnogno
  • post_storage_test.gnogno
  • post_test.gnogno
  • reply_test.gnogno
  • repost_storage_test.gnogno
  • storage_test.gnogno
  • thread_test.gnogno
  • flag_storage_test.gnogno
    1package boards_test23import (4	"testing"56	"gno.land/p/nt/urequire/v0"78

    Functions

    not supported for pure packages by the node (vm/qfuncs)

    Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.

    "gno.land/p/gnoland/boards/v0"
    9)
    10
    11func TestFlagStorageExists(t *testing.T) {
    12 tests := []struct {
    13 name string
    14 setup func() boards.FlagStorage
    15 user address
    16 exists bool
    17 }{
    18 {
    19 name: "found",
    20 setup: func() boards.FlagStorage {
    21 s := boards.NewFlagStorage()
    22 s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
    23 return s
    24 },
    25 user: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
    26 exists: true,
    27 },
    28 {
    29 name: "not found",
    30 setup: func() boards.FlagStorage {
    31 return boards.NewFlagStorage()
    32 },
    33 user: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
    34 exists: false,
    35 },
    36 }
    37
    38 for _, tt := range tests {
    39 t.Run(tt.name, func(t *testing.T) {
    40 s := tt.setup()
    41
    42 urequire.Equal(t, tt.exists, s.Exists(tt.user))
    43 })
    44 }
    45}
    46
    47func TestFlagStorageAdd(t *testing.T) {
    48 tests := []struct {
    49 name string
    50 setup func() boards.FlagStorage
    51 flag boards.Flag
    52 errMsg string
    53 }{
    54 {
    55 name: "ok",
    56 setup: func() boards.FlagStorage {
    57 return boards.NewFlagStorage()
    58 },
    59 flag: boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"},
    60 },
    61 {
    62 name: "flag exists",
    63 setup: func() boards.FlagStorage {
    64 s := boards.NewFlagStorage()
    65 s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
    66 return s
    67 },
    68 flag: boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"},
    69 errMsg: "flag from user already exists: g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
    70 },
    71 {
    72 name: "invalid user address",
    73 setup: func() boards.FlagStorage {
    74 return boards.NewFlagStorage()
    75 },
    76 flag: boards.Flag{User: "foo"},
    77 errMsg: "post flagging error, invalid user address: foo",
    78 },
    79 }
    80
    81 for _, tt := range tests {
    82 t.Run(tt.name, func(t *testing.T) {
    83 s := tt.setup()
    84
    85 err := s.Add(tt.flag)
    86
    87 if tt.errMsg != "" {
    88 urequire.Error(t, err, "expect an error")
    89 urequire.ErrorContains(t, err, tt.errMsg, "expect error to match")
    90 return
    91 }
    92
    93 urequire.NoError(t, err, "expect no error")
    94 urequire.True(t, s.Exists(tt.flag.User), "expect flag to be added")
    95 })
    96 }
    97}
    98
    99func TestFlagStorageRemove(t *testing.T) {
    100 tests := []struct {
    101 name string
    102 setup func() boards.FlagStorage
    103 address address
    104 removed bool
    105 }{
    106 {
    107 name: "ok",
    108 setup: func() boards.FlagStorage {
    109 s := boards.NewFlagStorage()
    110 s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
    111 return s
    112 },
    113 address: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
    114 removed: true,
    115 },
    116 {
    117 name: "not found",
    118 setup: func() boards.FlagStorage {
    119 return boards.NewFlagStorage()
    120 },
    121 address: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
    122 },
    123 }
    124
    125 for _, tt := range tests {
    126 t.Run(tt.name, func(t *testing.T) {
    127 s := tt.setup()
    128
    129 urequire.Equal(t, tt.removed, s.Remove(tt.address))
    130 })
    131 }
    132}
    133
    134func TestFlagStorageSize(t *testing.T) {
    135 tests := []struct {
    136 name string
    137 setup func() boards.FlagStorage
    138 size int
    139 }{
    140 {
    141 name: "empty",
    142 setup: func() boards.FlagStorage {
    143 return boards.NewFlagStorage()
    144 },
    145 size: 0,
    146 },
    147 {
    148 name: "one flag",
    149 setup: func() boards.FlagStorage {
    150 s := boards.NewFlagStorage()
    151 s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
    152 return s
    153 },
    154 size: 1,
    155 },
    156 {
    157 name: "multiple flags",
    158 setup: func() boards.FlagStorage {
    159 s := boards.NewFlagStorage()
    160 s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
    161 s.Add(boards.Flag{User: "g1skl80cuz8zq3lul9pgz5pc35l2pfzgxgfpsqkx"})
    162 return s
    163 },
    164 size: 2,
    165 },
    166 }
    167
    168 for _, tt := range tests {
    169 t.Run(tt.name, func(t *testing.T) {
    170 s := tt.setup()
    171
    172 urequire.Equal(t, tt.size, s.Size())
    173 })
    174 }
    175}
    176
    177func TestFlagStorageIterate(t *testing.T) {
    178 // Listed in sorted (bech32-string) user order, which is the order
    179 // Iterate yields them in.
    180 flags := []boards.Flag{
    181 {
    182 User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
    183 Reason: "a",
    184 },
    185 {
    186 User: "g1skl80cuz8zq3lul9pgz5pc35l2pfzgxgfpsqkx",
    187 Reason: "b",
    188 },
    189 }
    190 tests := []struct {
    191 name string
    192 setup func() boards.FlagStorage
    193 reverse bool
    194 flags []boards.Flag
    195 }{
    196 {
    197 name: "default",
    198 setup: func() boards.FlagStorage {
    199 s := boards.NewFlagStorage()
    200 s.Add(flags[0])
    201 s.Add(flags[1])
    202 return s
    203 },
    204 flags: flags,
    205 },
    206 {
    207 name: "reverse",
    208 setup: func() boards.FlagStorage {
    209 s := boards.NewFlagStorage()
    210 s.Add(flags[0])
    211 s.Add(flags[1])
    212 return s
    213 },
    214 reverse: true,
    215 flags: []boards.Flag{flags[1], flags[0]},
    216 },
    217 }
    218
    219 for _, tt := range tests {
    220 t.Run(tt.name, func(t *testing.T) {
    221 s := tt.setup()
    222 count := s.Size()
    223 if tt.reverse {
    224 count = -count
    225 }
    226
    227 var i int
    228 s.Iterate(0, count, func(f boards.Flag) bool {
    229 urequire.Equal(t, tt.flags[i].User, f.User, "expect user to match")
    230 urequire.Equal(t, tt.flags[i].Reason, f.Reason, "expect reason to match")
    231
    232 i++
    233 return false
    234 })
    235 })
    236 }
    237}
    238