internal/store/orgremove_test.go

3f4afd2210627e46fd0cea1f5831857af71638f6
gitbay/internal/store/orgremove_test.go history · blame · raw

57 lines · 1400 bytes

 1package store
 2
 3import "testing"
 4
 5// Removing an org member drops their team memberships in that org. Team
 6// add requires membership, so a row that survived removal would grant a
 7// non-member access through the team (#196).
 8func TestRemoveOrgMemberDropsTeamRows(t *testing.T) {
 9	s := open(t)
10	if err := s.MigrateUp(); err != nil {
11		t.Fatal(err)
12	}
13	alice, err := s.CreateUser("alice", false)
14	if err != nil {
15		t.Fatal(err)
16	}
17	bob, err := s.CreateUser("bob", false)
18	if err != nil {
19		t.Fatal(err)
20	}
21	oid, err := s.CreateOrg("acme", alice)
22	if err != nil {
23		t.Fatal(err)
24	}
25	other, err := s.CreateOrg("other", alice)
26	if err != nil {
27		t.Fatal(err)
28	}
29	for _, o := range []int64{oid, other} {
30		if err := s.SetOrgMember(o, bob, "member"); err != nil {
31			t.Fatal(err)
32		}
33	}
34	core, err := s.CreateTeam(oid, "core")
35	if err != nil {
36		t.Fatal(err)
37	}
38	elsewhere, err := s.CreateTeam(other, "core")
39	if err != nil {
40		t.Fatal(err)
41	}
42	for _, tm := range []int64{core, elsewhere} {
43		if err := s.AddTeamMember(tm, bob); err != nil {
44			t.Fatal(err)
45		}
46	}
47	if err := s.RemoveOrgMember(oid, bob); err != nil {
48		t.Fatal(err)
49	}
50	if m, _ := s.TeamMembers(core); len(m) != 0 {
51		t.Fatalf("team rows survived org removal: %v", m)
52	}
53	// The other org's team is untouched.
54	if m, _ := s.TeamMembers(elsewhere); len(m) != 1 || m[0] != "bob" {
55		t.Fatalf("removal reached another org's team: %v", m)
56	}
57}