1package bug
2
3import (
4 "time"
5
6 "github.com/MichaelMure/git-bug/identity"
7 "github.com/MichaelMure/git-bug/repository"
8 "github.com/stretchr/testify/assert"
9
10 "testing"
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 TestBugCommitLoad(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 bug1.Append(setTitleOp)
78 bug1.Append(addCommentOp)
79
80 repo := repository.NewMockRepoForTest()
81
82 err := bug1.Commit(repo)
83 assert.Nil(t, err)
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(setTitleOp)
92 bug1.Append(addCommentOp)
93
94 err = bug1.Commit(repo)
95 assert.Nil(t, err)
96
97 bug3, err := ReadLocalBug(repo, bug1.Id())
98 assert.NoError(t, err)
99 equivalentBug(t, bug1, bug3)
100}
101
102func equivalentBug(t *testing.T, expected, actual *Bug) {
103 assert.Equal(t, len(expected.packs), len(actual.packs))
104
105 for i := range expected.packs {
106 for j := range expected.packs[i].Operations {
107 actual.packs[i].Operations[j].base().hash = expected.packs[i].Operations[j].base().hash
108 }
109 }
110
111 assert.Equal(t, expected, actual)
112}