internal/store/orgremove_test.go
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}