internal/store/reviewrequests_test.go
73 lines · 2392 bytes
2 symbols in this file
1package store
2
3import "testing"
4
5// A requested reviewer sees the merge request in their queue even with no
6// other tie to the repository, and the queue empties once they have
7// reviewed the current head — the two rules #145 requires together. A new
8// push brings it back, and --remove drops it outright.
9func TestReviewQueueRequestedReviewer(t *testing.T) {
10 s, repoID, _ := mrFixture(t)
11 mr, err := s.MRByNumber(repoID, 1)
12 if err != nil {
13 t.Fatal(err)
14 }
15 reviewerID, err := s.CreateUser("dana", false)
16 if err != nil {
17 t.Fatal(err)
18 }
19
20 if q, err := s.ReviewQueue(reviewerID); err != nil || len(q) != 0 {
21 t.Fatalf("queue before any request: %+v, %v", q, err)
22 }
23
24 if err := s.SetMRReviewRequest(mr.ID, reviewerID, true); err != nil {
25 t.Fatal(err)
26 }
27 q, err := s.ReviewQueue(reviewerID)
28 if err != nil || len(q) != 1 || q[0].Number != mr.Number {
29 t.Fatalf("requested reviewer not in queue: %+v, %v", q, err)
30 }
31
32 if err := s.AddMRReview(mr.ID, reviewerID, "approve", mr.HeadSHA); err != nil {
33 t.Fatal(err)
34 }
35 if q, err := s.ReviewQueue(reviewerID); err != nil || len(q) != 0 {
36 t.Fatalf("queue after reviewing the current head: %+v, %v", q, err)
37 }
38
39 if err := s.UpdateMRHead(mr.ID, "def456", "", false); err != nil {
40 t.Fatal(err)
41 }
42 if q, err := s.ReviewQueue(reviewerID); err != nil || len(q) != 1 {
43 t.Fatalf("queue after a new head: %+v, %v", q, err)
44 }
45
46 if err := s.SetMRReviewRequest(mr.ID, reviewerID, false); err != nil {
47 t.Fatal(err)
48 }
49 if q, err := s.ReviewQueue(reviewerID); err != nil || len(q) != 0 {
50 t.Fatalf("queue after --remove: %+v, %v", q, err)
51 }
52 if err := s.SetMRReviewRequest(mr.ID, reviewerID, false); err != ErrNotFound {
53 t.Fatalf("removing an absent request: %v", err)
54 }
55}
56
57// The involved half of the queue never shows an author their own merge
58// request (reviewQueueQuery's author_id <> ?1); the requested half must
59// hold the same line even if the author is somehow added as a requested
60// reviewer on their own MR.
61func TestReviewQueueExcludesAuthor(t *testing.T) {
62 s, repoID, authorID := mrFixture(t)
63 mr, err := s.MRByNumber(repoID, 1)
64 if err != nil {
65 t.Fatal(err)
66 }
67 if err := s.SetMRReviewRequest(mr.ID, authorID, true); err != nil {
68 t.Fatal(err)
69 }
70 if q, err := s.ReviewQueue(authorID); err != nil || len(q) != 0 {
71 t.Fatalf("author requested on their own MR should not see it in queue: %+v, %v", q, err)
72 }
73}