PathrockNetwork Gno Explorer
HomeBlocksTransactionsTokensRealmsPackagesValidatorsAnalytics

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
  • repost_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 TestRepostStorageGet(t *testing.T) {
    12 tests := []struct {
    13 name string
    14 setup func() boards.RepostStorage
    15 boardID, repostID boards.ID
    16 found bool
    17 }{
    18 {
    19 name: "single repost",
    20 setup: func() boards.RepostStorage {
    21 s := boards.NewRepostStorage()
    22 s.Add(&boards.Post{
    23 ID: 1,
    24 Board: &boards.Board{ID: 1},
    25 })
    26 return s
    27 },
    28 boardID: 1,
    29 repostID: 1,
    30 found: true,
    31 },
    32 {
    33 name: "multiple reposts",
    34 setup: func() boards.RepostStorage {
    35 s := boards.NewRepostStorage()
    36 s.Add(&boards.Post{
    37 ID: 2,
    38 Board: &boards.Board{ID: 1},
    39 })
    40 s.Add(&boards.Post{
    41 ID: 5,
    42 Board: &boards.Board{ID: 2},
    43 })
    44 s.Add(&boards.Post{
    45 ID: 10,
    46 Board: &boards.Board{ID: 3},
    47 })
    48 return s
    49 },
    50 boardID: 1,
    51 repostID: 2,
    52 found: true,
    53 },
    54 {
    55 name: "not found",
    56 setup: func() boards.RepostStorage {
    57 return boards.NewRepostStorage()
    58 },
    59 boardID: 404,
    60 },
    61 }
    62
    63 for _, tt := range tests {
    64 t.Run(tt.name, func(t *testing.T) {
    65 s := tt.setup()
    66
    67 repostID, found := s.Get(tt.boardID)
    68
    69 if !tt.found {
    70 urequire.False(t, found, "expect repost not to be found")
    71 urequire.True(t, int(repostID) == 0, "expect repost ID to be 0")
    72 return
    73 }
    74
    75 urequire.True(t, found, "expect post to be found")
    76 urequire.Equal(t, tt.repostID.String(), repostID.String(), "expect repost ID to match")
    77 })
    78 }
    79}
    80
    81func TestRepostStorageAdd(t *testing.T) {
    82 tests := []struct {
    83 name string
    84 repost *boards.Post
    85 errMsg string
    86 }{
    87 {
    88 name: "ok",
    89 repost: &boards.Post{
    90 ID: 1,
    91 Board: &boards.Board{ID: 1},
    92 },
    93 },
    94 {
    95 name: "nil repost",
    96 repost: nil,
    97 errMsg: "saving nil reposts is not allowed",
    98 },
    99 }
    100
    101 for _, tt := range tests {
    102 t.Run(tt.name, func(t *testing.T) {
    103 s := boards.NewRepostStorage()
    104
    105 err := s.Add(tt.repost)
    106
    107 if tt.errMsg != "" {
    108 urequire.Error(t, err, "expect an error")
    109 urequire.ErrorContains(t, err, tt.errMsg, "expect error to match")
    110 return
    111 }
    112
    113 urequire.NoError(t, err, "expect no error")
    114
    115 _, found := s.Get(tt.repost.ID)
    116 urequire.True(t, found, "expect repost to be found")
    117 })
    118 }
    119}
    120
    121func TestRepostStorageRemove(t *testing.T) {
    122 tests := []struct {
    123 name string
    124 setup func() boards.RepostStorage
    125 boardID boards.ID
    126 removed bool
    127 }{
    128 {
    129 name: "ok",
    130 setup: func() boards.RepostStorage {
    131 s := boards.NewRepostStorage()
    132 s.Add(&boards.Post{
    133 ID: 100,
    134 Board: &boards.Board{ID: 1},
    135 })
    136 return s
    137 },
    138 boardID: 1,
    139 removed: true,
    140 },
    141 {
    142 name: "not found",
    143 setup: func() boards.RepostStorage {
    144 return boards.NewRepostStorage()
    145 },
    146 boardID: 404,
    147 },
    148 }
    149
    150 for _, tt := range tests {
    151 t.Run(tt.name, func(t *testing.T) {
    152 s := tt.setup()
    153
    154 removed := s.Remove(tt.boardID)
    155
    156 if !tt.removed {
    157 urequire.False(t, removed, "expect repost not to be removed")
    158 return
    159 }
    160
    161 urequire.True(t, removed, "expect repost to be removed")
    162
    163 _, found := s.Get(tt.boardID)
    164 urequire.False(t, found, "expect repost not to be found")
    165 })
    166 }
    167}
    168
    169func TestRepostStorageSize(t *testing.T) {
    170 tests := []struct {
    171 name string
    172 setup func() boards.RepostStorage
    173 size int
    174 }{
    175 {
    176 name: "empty",
    177 setup: func() boards.RepostStorage {
    178 return boards.NewRepostStorage()
    179 },
    180 size: 0,
    181 },
    182 {
    183 name: "one repost",
    184 setup: func() boards.RepostStorage {
    185 s := boards.NewRepostStorage()
    186 s.Add(&boards.Post{
    187 ID: 1,
    188 Board: &boards.Board{ID: 1},
    189 })
    190 return s
    191 },
    192 size: 1,
    193 },
    194 {
    195 name: "multiple reposts",
    196 setup: func() boards.RepostStorage {
    197 s := boards.NewRepostStorage()
    198 s.Add(&boards.Post{
    199 ID: 1,
    200 Board: &boards.Board{ID: 1},
    201 })
    202 s.Add(&boards.Post{
    203 ID: 1,
    204 Board: &boards.Board{ID: 2},
    205 })
    206 return s
    207 },
    208 size: 2,
    209 },
    210 }
    211
    212 for _, tt := range tests {
    213 t.Run(tt.name, func(t *testing.T) {
    214 s := tt.setup()
    215
    216 urequire.Equal(t, tt.size, s.Size())
    217 })
    218 }
    219}
    220
    221func TestRepostStorageIterate(t *testing.T) {
    222 tests := []struct {
    223 name string
    224 setup func() boards.RepostStorage
    225 reverse bool
    226 ids [][2]boards.ID
    227 }{
    228 {
    229 name: "default",
    230 setup: func() boards.RepostStorage {
    231 s := boards.NewRepostStorage()
    232 s.Add(&boards.Post{
    233 ID: 10,
    234 Board: &boards.Board{ID: 1},
    235 })
    236 s.Add(&boards.Post{
    237 ID: 20,
    238 Board: &boards.Board{ID: 2},
    239 })
    240 s.Add(&boards.Post{
    241 ID: 30,
    242 Board: &boards.Board{ID: 3},
    243 })
    244 return s
    245 },
    246 ids: [][2]boards.ID{
    247 {1, 10},
    248 {2, 20},
    249 {3, 30},
    250 },
    251 },
    252 {
    253 name: "reverse",
    254 setup: func() boards.RepostStorage {
    255 s := boards.NewRepostStorage()
    256 s.Add(&boards.Post{
    257 ID: 10,
    258 Board: &boards.Board{ID: 1},
    259 })
    260 s.Add(&boards.Post{
    261 ID: 20,
    262 Board: &boards.Board{ID: 2},
    263 })
    264 s.Add(&boards.Post{
    265 ID: 30,
    266 Board: &boards.Board{ID: 3},
    267 })
    268 return s
    269 },
    270 reverse: true,
    271 ids: [][2]boards.ID{
    272 {3, 30},
    273 {2, 20},
    274 {1, 10},
    275 },
    276 },
    277 }
    278
    279 for _, tt := range tests {
    280 t.Run(tt.name, func(t *testing.T) {
    281 s := tt.setup()
    282 count := s.Size()
    283 if tt.reverse {
    284 count = -count
    285 }
    286
    287 var i int
    288 s.Iterate(0, count, func(boardID, repostID boards.ID) bool {
    289 urequire.True(t, tt.ids[i][0] == boardID, "expect board ID to match")
    290 urequire.True(t, tt.ids[i][1] == repostID, "expect repost ID to match")
    291
    292 i++
    293 return false
    294 })
    295 })
    296 }
    297}
    298