1package bug
2
3import (
4 "testing"
5 "time"
6
7 "github.com/stretchr/testify/assert"
8
9 "github.com/MichaelMure/git-bug/identity"
10 "github.com/MichaelMure/git-bug/repository"
11)
12
13func TestBugId(t *testing.T) {
14 mockRepo := repository.NewMockRepoForTest()
15
16 bug1 := NewBug()
17
18 rene := identity.NewIdentity("René Descartes", "rene@descartes.fr")
19 createOp := NewCreateOp(rene, time.Now().Unix(), "title", "message", nil)
20
21 bug1.Append(createOp)
22
23 err := bug1.Commit(mockRepo)
24
25 if err != nil {
26 t.Fatal(err)
27 }
28
29 bug1.Id()
30}
31
32func TestBugValidity(t *testing.T) {
33 mockRepo := repository.NewMockRepoForTest()
34
35 bug1 := NewBug()
36
37 rene := identity.NewIdentity("René Descartes", "rene@descartes.fr")
38 createOp := NewCreateOp(rene, time.Now().Unix(), "title", "message", nil)
39
40 if bug1.Validate() == nil {
41 t.Fatal("Empty bug should be invalid")
42 }
43
44 bug1.Append(createOp)
45
46 if bug1.Validate() != nil {
47 t.Fatal("Bug with just a CreateOp should be valid")
48 }
49
50 err := bug1.Commit(mockRepo)
51 if err != nil {
52 t.Fatal(err)
53 }
54
55 bug1.Append(createOp)
56
57 if bug1.Validate() == nil {
58 t.Fatal("Bug with multiple CreateOp should be invalid")
59 }
60
61 err = bug1.Commit(mockRepo)
62 if err == nil {
63 t.Fatal("Invalid bug should not commit")
64 }
65}
66
67func TestBugCommitLoadRemove(t *testing.T) {
68 bug1 := NewBug()
69
70 rene := identity.NewIdentity("René Descartes", "rene@descartes.fr")
71 createOp := NewCreateOp(rene, time.Now().Unix(), "title", "message", nil)
72 setTitleOp := NewSetTitleOp(rene, time.Now().Unix(), "title2", "title1")
73 addCommentOp := NewAddCommentOp(rene, time.Now().Unix(), "message2", nil)
74
75 bug1.Append(createOp)
76 bug1.Append(setTitleOp)
77
78 repo := repository.NewMockRepoForTest()
79
80 assert.True(t, bug1.NeedCommit())
81
82 err := bug1.Commit(repo)
83 assert.Nil(t, err)
84 assert.False(t, bug1.NeedCommit())
85
86 bug2, err := ReadLocalBug(repo, bug1.Id())
87 assert.NoError(t, err)
88 equivalentBug(t, bug1, bug2)
89
90 // add more op
91
92 bug1.Append(addCommentOp)
93
94 assert.True(t, bug1.NeedCommit())
95
96 err = bug1.Commit(repo)
97 assert.Nil(t, err)
98 assert.False(t, bug1.NeedCommit())
99
100 bug3, err := ReadLocalBug(repo, bug1.Id())
101 assert.NoError(t, err)
102 equivalentBug(t, bug1, bug3)
103
104 err = RemoveLocalBug(repo, bug1.Id())
105 assert.NoError(t, err)
106
107 streamedBugs := ReadAllLocalBugs(repo)
108 count := 0
109 for range streamedBugs {
110 count++
111 }
112 assert.Equal(t, 0, count)
113}
114
115func equivalentBug(t *testing.T, expected, actual *Bug) {
116 assert.Equal(t, len(expected.packs), len(actual.packs))
117
118 for i := range expected.packs {
119 for j := range expected.packs[i].Operations {
120 actual.packs[i].Operations[j].base().id = expected.packs[i].Operations[j].base().id
121 }
122 }
123
124 assert.Equal(t, expected, actual)
125}