github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/r/x/nir1218_evaluation_proposal/committee_test.gno (about)

     1  package evaluation
     2  
     3  import (
     4  	"std"
     5  	"testing"
     6  
     7  	"gno.land/p/demo/testutils"
     8  )
     9  
    10  func TestCommitteeMembers(t *testing.T) {
    11  	members := []std.Address{testutils.TestAddress("member1"), testutils.TestAddress("member2"), testutils.TestAddress("member3")}
    12  	c := NewCommittee()
    13  
    14  	t.Run("Designate Committee Members", func(t *testing.T) {
    15  		c.DesignateMembers(members)
    16  		if !isEqualAddressSlice(c.members, members) {
    17  			t.Errorf("Designated Committee members got %v expcted %v", members, c.members)
    18  		}
    19  	})
    20  
    21  	t.Run("Dismiss Committee Members", func(t *testing.T) {
    22  		c.DismissMembers(members)
    23  	})
    24  }
    25  
    26  func TestCategoryEvaluationCriteria(t *testing.T) {
    27  	member := testutils.TestAddress("member")
    28  	category := "document"
    29  	criteria := []string{"clarity", "usage"}
    30  	category2 := "bounty"
    31  	criteria2 := []string{"complexity"}
    32  	expectedGategory := NewCategory(category, criteria)
    33  	expectedGategory2 := NewCategory(category2, criteria2)
    34  
    35  	c := NewCommittee()
    36  	c.DesignateMembers([]std.Address{member})
    37  
    38  	t.Run("Add First Committee Category and Evaluation Criteria", func(t *testing.T) {
    39  		std.TestSetOrigCaller(member)
    40  		c.AddCategory(category, criteria)
    41  		value, exists := c.categories.Get(category)
    42  		if !exists {
    43  			t.Errorf("Add first category %s failed", category)
    44  		}
    45  		gotCategory := value.(*Category)
    46  		if gotCategory.name != expectedGategory.name {
    47  			t.Errorf("First Committee category got %s expected %s", gotCategory.name, expectedGategory.name)
    48  		}
    49  	})
    50  
    51  	t.Run("Add Second Committee Category and Evaluation Criteria", func(t *testing.T) {
    52  		std.TestSetOrigCaller(member)
    53  		c.AddCategory(category2, criteria2)
    54  		value2, exists2 := c.categories.Get(category2)
    55  		if !exists2 {
    56  			t.Errorf("Add second category %s failed", category2)
    57  		}
    58  		gotCategory2 := value2.(*Category)
    59  		if gotCategory2.name != expectedGategory2.name {
    60  			t.Errorf("Second Committee category got %s expected %s", gotCategory2.name, expectedGategory2.name)
    61  		}
    62  	})
    63  
    64  	t.Run("Approve First Committee Category", func(t *testing.T) {
    65  		std.TestSetOrigCaller(member)
    66  		approved := c.ApproveCategory(category, VoteYes)
    67  		if !approved {
    68  			value, exists := c.categories.Get(category)
    69  			gotCategory := value.(*Category)
    70  			t.Errorf("Approved First Committee category got %s expected %s", gotCategory.status, "Approved")
    71  		}
    72  	})
    73  }
    74  
    75  func isEqualStringSlice(a, b []string) bool {
    76  	if len(a) != len(b) {
    77  		return false
    78  	}
    79  	for i := range a {
    80  		if a[i] != b[i] {
    81  			return false
    82  		}
    83  	}
    84  	return true
    85  }
    86  
    87  func isEqualAddressSlice(a, b []std.Address) bool {
    88  	if len(a) != len(b) {
    89  		return false
    90  	}
    91  	for i := range a {
    92  		if a[i] != b[i] {
    93  			return false
    94  		}
    95  	}
    96  	return true
    97  }