internal/store/reviewcarry_test.go
58 lines · 1666 bytes
1 symbol in this file
1package store
2
3import "testing"
4
5// UpdateMRHead with sameDiff moves the fresh reviews of the old head to
6// the new one and leaves already-stale reviews stale (#198).
7func TestUpdateMRHeadSameDiffKeepsFreshReviews(t *testing.T) {
8 s := open(t)
9 if err := s.MigrateUp(); err != nil {
10 t.Fatal(err)
11 }
12 alice, _ := s.CreateUser("alice", false)
13 bob, _ := s.CreateUser("bob", false)
14 carol, _ := s.CreateUser("carol", false)
15 repo, _ := s.CreateRepo("user", alice, "app", "public")
16 id, err := s.CreateMR(repo, alice, repo, "feat", "main", "t", "", "aaa", "md", false)
17 if err != nil {
18 t.Fatal(err)
19 }
20 // bob reviewed an earlier head and is stale; carol reviewed the
21 // current one.
22 if err := s.AddMRReview(id, bob, "approve", "000"); err != nil {
23 t.Fatal(err)
24 }
25 if err := s.UpdateMRHead(id, "aaa", "", false); err != nil {
26 t.Fatal(err)
27 }
28 if err := s.AddMRReview(id, carol, "approve", "aaa"); err != nil {
29 t.Fatal(err)
30 }
31 if err := s.UpdateMRHead(id, "bbb", "", true); err != nil {
32 t.Fatal(err)
33 }
34 reviews, err := s.ListMRReviews(id)
35 if err != nil {
36 t.Fatal(err)
37 }
38 got := map[string]MRReview{}
39 for _, r := range reviews {
40 got[r.Reviewer] = r
41 }
42 if r := got["carol"]; r.Stale || r.HeadSHA != "bbb" {
43 t.Errorf("fresh review did not follow the same diff: %+v", r)
44 }
45 if r := got["bob"]; !r.Stale || r.HeadSHA != "000" {
46 t.Errorf("stale review changed: %+v", r)
47 }
48 // A different diff stales everything, as before.
49 if err := s.UpdateMRHead(id, "ccc", "", false); err != nil {
50 t.Fatal(err)
51 }
52 reviews, _ = s.ListMRReviews(id)
53 for _, r := range reviews {
54 if !r.Stale {
55 t.Errorf("review survived a changed diff: %+v", r)
56 }
57 }
58}