github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/systests/team_seitan_invite_v2_test.go (about) 1 package systests 2 3 import ( 4 "testing" 5 6 "golang.org/x/net/context" 7 8 keybase1 "github.com/keybase/client/go/protocol/keybase1" 9 "github.com/keybase/client/go/teams" 10 "github.com/stretchr/testify/require" 11 ) 12 13 // Parameterized high-level tests (using team service API and gregor handler) 14 // for Seitan V1 and Seitan V2. 15 16 func TestTeamInviteSeitanHappy(t *testing.T) { 17 testTeamInviteSeitanHappy(t, false /* implicitAdmin */, teams.SeitanVersion1) 18 testTeamInviteSeitanHappy(t, false /* implicitAdmin */, teams.SeitanVersion2) 19 } 20 21 func TestTeamInviteSeitanHappyImplicitAdmin(t *testing.T) { 22 testTeamInviteSeitanHappy(t, true /* implicitAdmin */, teams.SeitanVersion1) 23 testTeamInviteSeitanHappy(t, true /* implicitAdmin */, teams.SeitanVersion2) 24 } 25 26 func testTeamInviteSeitanHappy(t *testing.T, implicitAdmin bool, seitanVersion teams.SeitanVersion) { 27 tt := newTeamTester(t) 28 defer tt.cleanup() 29 30 own := tt.addUser("own") 31 roo := tt.addUser("roo") 32 33 teamIDParent, teamNameParent := own.createTeam2() 34 teamID := teamIDParent 35 teamName := teamNameParent 36 t.Logf("Created team %v %v", teamIDParent, teamNameParent) 37 if implicitAdmin { 38 subteamID, err := teams.CreateSubteam(context.TODO(), tt.users[0].tc.G, "sub1", teamNameParent, keybase1.TeamRole_NONE /* addSelfAs */) 39 require.NoError(t, err) 40 teamID = *subteamID 41 subteamName, err := teamNameParent.Append("sub1") 42 require.NoError(t, err) 43 teamName = subteamName 44 t.Logf("Created subteam %v %v", teamID, teamName) 45 } 46 47 label := keybase1.NewSeitanKeyLabelWithSms(keybase1.SeitanKeyLabelSms{ 48 F: "bugs", 49 N: "0000", 50 }) 51 var token string 52 switch seitanVersion { 53 case teams.SeitanVersion1: 54 ikey, err := own.teamsClient.TeamCreateSeitanToken(context.TODO(), keybase1.TeamCreateSeitanTokenArg{ 55 Teamname: teamName.String(), 56 Role: keybase1.TeamRole_WRITER, 57 Label: label, 58 }) 59 token = string(ikey) 60 require.NoError(t, err) 61 case teams.SeitanVersion2: 62 ikey, err := own.teamsClient.TeamCreateSeitanTokenV2(context.TODO(), keybase1.TeamCreateSeitanTokenV2Arg{ 63 Teamname: teamName.String(), 64 Role: keybase1.TeamRole_WRITER, 65 Label: label, 66 }) 67 token = string(ikey) 68 require.NoError(t, err) 69 default: 70 t.Fatalf("Invalid seitan version %v", seitanVersion) 71 } 72 73 t.Logf("Created token %q", token) 74 75 details := own.teamGetDetails(teamName.String()) 76 require.Len(t, details.AnnotatedActiveInvites, 1) 77 for _, invite := range details.AnnotatedActiveInvites { 78 require.Equal(t, keybase1.TeamRole_WRITER, invite.InviteMetadata.Invite.Role) 79 tic, err := invite.InviteMetadata.Invite.Type.C() 80 require.NoError(t, err) 81 require.Equal(t, keybase1.TeamInviteCategory_SEITAN, tic) 82 require.Equal(t, keybase1.TeamInviteDisplayName("bugs (0000)"), invite.DisplayName) 83 } 84 85 roo.kickTeamRekeyd() 86 err := roo.teamsClient.TeamAcceptInvite(context.TODO(), keybase1.TeamAcceptInviteArg{ 87 Token: token, 88 }) 89 require.NoError(t, err) 90 91 t.Logf("User used token, waiting for rekeyd") 92 93 own.waitForTeamChangedGregor(teamID, keybase1.Seqno(3)) 94 95 t0, err := teams.GetTeamByNameForTest(context.TODO(), own.tc.G, teamName.String(), false /* public */, true /* needAdmin */) 96 require.NoError(t, err) 97 98 role, err := t0.MemberRole(context.TODO(), teams.NewUserVersion(roo.uid, 1)) 99 require.NoError(t, err) 100 require.Equal(t, role, keybase1.TeamRole_WRITER) 101 102 details = own.teamGetDetails(teamName.String()) 103 require.Len(t, details.AnnotatedActiveInvites, 0) 104 }