bug_test.go

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