github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/teams/name_test.go (about)

     1  package teams
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/keybase/client/go/protocol/keybase1"
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestTeamNameFromString(t *testing.T) {
    11  	cases := []struct {
    12  		str      string
    13  		ok       bool
    14  		implicit bool
    15  	}{
    16  		{"", false, false},
    17  		{"a", false, false},
    18  		{"a.", false, false},
    19  		{"aaaa.", false, false},
    20  		{"aaaa.bbbbb.", false, false},
    21  		{".aaaa", false, false},
    22  		{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", false, false},
    23  
    24  		{"aaa.bbb.ccc", true, false},
    25  		{"aaa.ccc", true, false},
    26  		{"__keybase_implicit_team__", false, false},
    27  		{"__keybase_implicit_team__.x", false, false},
    28  		{"__keybase_implicit_team__9f6d31062cf8efbca45f9b193b24d724", true, true},
    29  		{"__keybase_implicit_team__bbbb26367512347c55154f14d436fb8b", true, true},
    30  		{"__keybase_implicit_team_", false, true},
    31  		{"__keybase_implicit_team__", false, true},
    32  		{"__keybase_implicit_team___", false, true},
    33  		{"__keybase_implicit_team__bbbb26367512347c55154f14d436fb8", false, true},  // too short
    34  		{"__keybase_implicit_team__bbbb26367512347c55154f14d436fb8z", false, true}, // non-hex
    35  	}
    36  
    37  	for i, c := range cases {
    38  		t.Logf("--> [%v] %+v", i, c)
    39  		name, err := keybase1.TeamNameFromString(c.str)
    40  		if c.ok {
    41  			require.NoError(t, err)
    42  		} else {
    43  			require.Error(t, err)
    44  			continue
    45  		}
    46  		require.True(t, len(name.Parts) > 0)
    47  		require.Equal(t, c.str, name.String())
    48  		require.Equal(t, c.implicit, name.IsImplicit())
    49  	}
    50  }
    51  
    52  func TestParseImplicitTeamBackingName(t *testing.T) {
    53  	tc := SetupTest(t, "team", 1)
    54  	defer tc.Cleanup()
    55  
    56  	badNames := []string{
    57  		"__keybase_implicit_team__",
    58  		"__keybase_implicit_team__12345678901234567801234567890q",
    59  		"__keybase_implicit_team__12345678901234567801234567890",
    60  	}
    61  	for _, badName := range badNames {
    62  		_, err := keybase1.TeamNameFromString(badName)
    63  		require.Error(t, err)
    64  	}
    65  	goodName := "__keybase_implicit_team__0123456789abcdef0123456789abcdef"
    66  	name, err := keybase1.TeamNameFromString(goodName)
    67  	require.NoError(t, err)
    68  	require.Equal(t, string(name.Parts[0]), "__keybase_implicit_team__0123456789abcdef0123456789abcdef")
    69  }
    70  
    71  func TestIsAncestorOf(t *testing.T) {
    72  	test := func(a, b string) bool {
    73  		aName, err := keybase1.TeamNameFromString(a)
    74  		require.NoError(t, err)
    75  		bName, err := keybase1.TeamNameFromString(b)
    76  		require.NoError(t, err)
    77  		return aName.IsAncestorOf(bName)
    78  	}
    79  
    80  	require.True(t, test("aaa", "aaa.bbb"))
    81  	require.True(t, test("aaa", "aaa.bbb.ccc"))
    82  	require.False(t, test("ccc", "aaa.bbb"))
    83  
    84  	require.True(t, test("aaa.bbb", "aaa.bbb.ccc"))
    85  
    86  	require.False(t, test("aaa.bbb.ccc", "aaa.bbb.ccc"))
    87  	require.False(t, test("aaa.bbb.ccc", "aaa.bbb"))
    88  }