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