internal/store/reviewrequests_test.go

v1.35.1
gitbay/internal/store/reviewrequests_test.go history · blame · raw

73 lines · 2392 bytes

 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}