internal/store/mrs_test.go

ab515bab173c501ad2228f0af8068a8730f8b5ea
gitbay/internal/store/mrs_test.go history · blame · raw

73 lines · 2008 bytes

 1package store
 2
 3import "testing"
 4
 5func mrFixture(t *testing.T) (*Store, int64, int64) {
 6	t.Helper()
 7	s := open(t)
 8	if err := s.MigrateUp(); err != nil {
 9		t.Fatal(err)
10	}
11	uid, err := s.CreateUser("cmc", true)
12	if err != nil {
13		t.Fatal(err)
14	}
15	repoID, err := s.CreateRepo("user", uid, "lib", "public")
16	if err != nil {
17		t.Fatal(err)
18	}
19	if _, err := s.CreateMR(repoID, uid, repoID, "feature", "main", "t", "", "abc123", "md"); err != nil {
20		t.Fatal(err)
21	}
22	return s, repoID, uid
23}
24
25// A merged or closed MR records who resolved it and when: the state alone
26// cannot say it, and updated_at moves for every edit.
27func TestResolutionStamps(t *testing.T) {
28	s, repoID, uid := mrFixture(t)
29	mr, err := s.MRByNumber(repoID, 1)
30	if err != nil {
31		t.Fatal(err)
32	}
33	if mr.MergedAt != "" || mr.ClosedAt != "" {
34		t.Fatalf("open MR carries a stamp: %+v", mr)
35	}
36	if err := s.MarkMerged(mr.ID, "base1", uid, ""); err != nil {
37		t.Fatal(err)
38	}
39	mr, _ = s.MRByNumber(repoID, 1)
40	if mr.State != "merged" || mr.MergedAt == "" || mr.MergedBy != "cmc" {
41		t.Fatalf("merge stamp: %+v", mr)
42	}
43
44	// Reopening — a source branch that came back — clears the stamp.
45	if err := s.SetMRState(mr.ID, "open"); err != nil {
46		t.Fatal(err)
47	}
48	mr, _ = s.MRByNumber(repoID, 1)
49	if mr.MergedAt != "" || mr.MergedBy != "" {
50		t.Fatalf("reopen kept the merge stamp: %+v", mr)
51	}
52
53	if err := s.MarkClosed(mr.ID, uid, ""); err != nil {
54		t.Fatal(err)
55	}
56	mr, _ = s.MRByNumber(repoID, 1)
57	if mr.State != "closed" || mr.ClosedAt == "" || mr.ClosedBy != "cmc" {
58		t.Fatalf("close stamp: %+v", mr)
59	}
60}
61
62// An import carries the upstream time but no local account for the actor.
63func TestResolutionStampImported(t *testing.T) {
64	s, repoID, _ := mrFixture(t)
65	mr, _ := s.MRByNumber(repoID, 1)
66	if err := s.MarkMerged(mr.ID, "base1", 0, "2024-03-02T10:00:00Z"); err != nil {
67		t.Fatal(err)
68	}
69	mr, _ = s.MRByNumber(repoID, 1)
70	if mr.MergedAt != "2024-03-02T10:00:00Z" || mr.MergedBy != "" {
71		t.Fatalf("imported merge stamp: %+v", mr)
72	}
73}