github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/r/demo/userbook/userbook_test.gno (about)

     1  package userbook
     2  
     3  import (
     4  	"std"
     5  	"strings"
     6  	"testing"
     7  
     8  	"gno.land/p/demo/testutils"
     9  	"gno.land/p/demo/ufmt"
    10  )
    11  
    12  func TestRender(t *testing.T) {
    13  	// Sign up 20 users + deployer
    14  	for i := 0; i < 20; i++ {
    15  		addrName := ufmt.Sprintf("test%d", i)
    16  		caller := testutils.TestAddress(addrName)
    17  		std.TestSetOrigCaller(caller)
    18  		SignUp()
    19  	}
    20  
    21  	testCases := []struct {
    22  		name                  string
    23  		nextPage              bool
    24  		prevPage              bool
    25  		path                  string
    26  		expectedNumberOfUsers int
    27  	}{
    28  		{
    29  			name:                  "1st page render",
    30  			nextPage:              true,
    31  			prevPage:              false,
    32  			path:                  "page/1",
    33  			expectedNumberOfUsers: 20,
    34  		},
    35  		{
    36  			name:                  "2nd page render",
    37  			nextPage:              false,
    38  			prevPage:              true,
    39  			path:                  "page/2",
    40  			expectedNumberOfUsers: 1,
    41  		},
    42  		{
    43  			name:                  "Invalid path render",
    44  			nextPage:              true,
    45  			prevPage:              false,
    46  			path:                  "page/invalidtext",
    47  			expectedNumberOfUsers: 20,
    48  		},
    49  		{
    50  			name:                  "Empty Page",
    51  			nextPage:              false,
    52  			prevPage:              false,
    53  			path:                  "page/1000",
    54  			expectedNumberOfUsers: 0,
    55  		},
    56  	}
    57  
    58  	for _, tc := range testCases {
    59  		t.Run(tc.name, func(t *testing.T) {
    60  			got := Render(tc.path)
    61  			numUsers := countUsers(got)
    62  
    63  			if tc.prevPage && !strings.Contains(got, "Previous page") {
    64  				t.Fatalf("expected to find Previous page, didn't find it")
    65  			}
    66  			if tc.nextPage && !strings.Contains(got, "Next page") {
    67  				t.Fatalf("expected to find Next page, didn't find it")
    68  			}
    69  
    70  			if tc.expectedNumberOfUsers != numUsers {
    71  				t.Fatalf("expected %d, got %d users", tc.expectedNumberOfUsers, numUsers)
    72  			}
    73  		})
    74  	}
    75  }
    76  
    77  func countUsers(input string) int {
    78  	return strings.Count(input, "#### User #")
    79  }