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/moul/forge/v0

Package
Open in gnoweb ↗

Overview

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

Files (14)

  • README.mdmarkdown
  • gnomod.tomltoml
  • change.gnogno
  • errors.gnogno
  • forge.gnogno
  • issue.gnogno
  • ref.gnogno
  • validate.gnogno
  • change_test.gnogno
  • forge_test.gnogno
  • helpers_test.gnogno
  • issue_test.gnogno
  • ref_test.gnogno
  • validate_test.gnogno
  • issue_test.gnogno
    1package forge23import (4	"testing"56	"gno.land/p/nt/uassert/v0"7	"gno.land/p/nt/urequire/v0"8

    Functions

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

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

    )
    9
    10func TestIssueLifecycle(t *testing.T) {
    11 _, r := newRepo(t)
    12
    13 // Filing an issue needs no role: the gate is that the author pays for the
    14 // bytes they write.
    15 i, err := r.OpenIssue(eve, 200, "Render eats the last newline", "Steps:\n1. …", []string{"bug"})
    16 urequire.NoError(t, err)
    17 uassert.Equal(t, int64(0), i.ID)
    18 uassert.True(t, i.Open)
    19 uassert.Equal(t, eve.String(), i.Author.String())
    20 uassert.Equal(t, 1, r.IssueCount())
    21 uassert.Equal(t, 1, r.OpenIssueCount())
    22
    23 c, err := r.CommentIssue(bob, 201, 0, "reproduced")
    24 urequire.NoError(t, err)
    25 uassert.Equal(t, int64(0), c.ID)
    26 uassert.Equal(t, 1, i.CommentCount())
    27 uassert.Equal(t, int64(201), i.UpdatedAt)
    28
    29 // The author may close their own; a stranger may not close someone else's.
    30 uassert.ErrorIs(t, r.SetIssueOpen(carol, 202, 0, false), ErrUnauthorized)
    31 urequire.NoError(t, r.SetIssueOpen(eve, 202, 0, false))
    32 uassert.False(t, i.Open)
    33 uassert.Equal(t, 0, r.OpenIssueCount())
    34
    35 // Closed is a triage state, not a gag.
    36 _, err = r.CommentIssue(eve, 203, 0, "still happening on pearl")
    37 urequire.NoError(t, err)
    38
    39 // Maintainers can reopen and label.
    40 urequire.NoError(t, r.SetIssueOpen(bob, 204, 0, true))
    41 uassert.ErrorIs(t, r.SetIssueLabels(eve, 205, 0, []string{"p1"}), ErrUnauthorized)
    42 urequire.NoError(t, r.SetIssueLabels(bob, 205, 0, []string{"bug", "p1"}))
    43 uassert.Equal(t, 2, len(i.Labels))
    44}
    45
    46func TestIssueValidation(t *testing.T) {
    47 _, r := newRepo(t)
    48
    49 _, err := r.OpenIssue(eve, 200, "", "body", nil)
    50 uassert.ErrorIs(t, err, ErrInvalidText, "a title is required")
    51 _, err = r.OpenIssue(eve, 200, "two\nlines", "", nil)
    52 uassert.ErrorIs(t, err, ErrInvalidText, "a title is one line")
    53 _, err = r.OpenIssue(eve, 200, "ok", "", []string{"a,b"})
    54 uassert.ErrorIs(t, err, ErrInvalidText, "labels are comma-free")
    55 _, err = r.OpenIssue(eve, 200, "ok", "", []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"})
    56 uassert.ErrorIs(t, err, ErrTooMany)
    57
    58 _, err = r.CommentIssue(eve, 200, 7, "no such issue")
    59 uassert.ErrorIs(t, err, ErrIssueNotFound)
    60 uassert.ErrorIs(t, r.SetIssueOpen(bob, 200, 7, false), ErrIssueNotFound)
    61
    62 urequire.NoError(t, func() error { _, err := r.OpenIssue(eve, 200, "ok", "", nil); return err }())
    63 _, err = r.CommentIssue(eve, 201, 0, "")
    64 uassert.ErrorIs(t, err, ErrInvalidText, "an empty comment is not a comment")
    65}
    66
    67func TestIssueIterationIsNewestFirst(t *testing.T) {
    68 _, r := newRepo(t)
    69 for _, title := range []string{"first", "second", "third"} {
    70 _, err := r.OpenIssue(eve, 200, title, "", nil)
    71 urequire.NoError(t, err)
    72 }
    73
    74 var got []string
    75 r.IterateIssues(0, 0, func(i *Issue) bool {
    76 got = append(got, i.Title)
    77 return false
    78 })
    79 uassert.Equal(t, "third,second,first", join(got))
    80
    81 var page []string
    82 r.IterateIssues(1, 1, func(i *Issue) bool {
    83 page = append(page, i.Title)
    84 return false
    85 })
    86 uassert.Equal(t, "second", join(page))
    87
    88 i := r.Issue(0)
    89 urequire.NotEqual(t, nil, i)
    90 for n := 0; n < 3; n++ {
    91 _, err := r.CommentIssue(eve, 201, 0, "ping")
    92 urequire.NoError(t, err)
    93 }
    94 var bodies []string
    95 i.IterateComments(0, 2, func(c *Comment) bool {
    96 bodies = append(bodies, c.Body)
    97 return false
    98 })
    99 uassert.Equal(t, "ping,ping", join(bodies))
    100}
    101