1package systests
2
3import (
4	"testing"
5
6	"golang.org/x/net/context"
7
8	keybase1 "github.com/keybase/client/go/protocol/keybase1"
9
10	"github.com/stretchr/testify/require"
11)
12
13func testSubteamCreate(t *testing.T, joinSubteam bool) {
14	t.Logf("testSubteamCreate(joinSubteam: %t)", joinSubteam)
15
16	tt := newTeamTester(t)
17	defer tt.cleanup()
18
19	ann := tt.addUser("ann")
20	t.Logf("Signed up ann %s", ann.username)
21
22	parentName := ann.createTeam()
23	subteamName := parentName + ".test"
24
25	cli := ann.teamsClient
26	res, err := cli.TeamCreate(context.Background(), keybase1.TeamCreateArg{
27		Name:        subteamName,
28		JoinSubteam: joinSubteam,
29	})
30	require.NoError(t, err)
31	require.Equal(t, joinSubteam, res.CreatorAdded)
32	require.True(t, res.ChatSent)
33
34	t.Logf("Created subteam %s", subteamName)
35
36	teamObj := ann.loadTeam(subteamName, false /* admin */)
37	role, err := teamObj.MemberRole(context.Background(), ann.userVersion())
38	require.NoError(t, err)
39
40	if joinSubteam {
41		require.Equal(t, keybase1.TeamRole_ADMIN, role, "role should be ADMIN")
42		require.EqualValues(t, 1, teamObj.CurrentSeqno(), "expecting just one link in team")
43	} else {
44		require.Equal(t, keybase1.TeamRole_NONE, role, "role should be NONE")
45		// Expecting 2 links in main chain: subteam_head, leave
46		// And a link in hidden chain after leave: rotate_key
47		ann.waitForAnyRotateByID(teamObj.ID, keybase1.Seqno(2) /* toSeqno */, keybase1.Seqno(1) /* toHiddenSeqno */)
48	}
49}
50
51func TestSubteamCreate(t *testing.T) {
52	t.Run("just create", func(t *testing.T) { testSubteamCreate(t, false) })
53	t.Run("create and join", func(t *testing.T) { testSubteamCreate(t, true) })
54}
55