op_edit_comment_test.go

 1package bug
 2
 3import (
 4	"encoding/json"
 5	"testing"
 6	"time"
 7
 8	"github.com/stretchr/testify/assert"
 9	"github.com/stretchr/testify/require"
10
11	"github.com/MichaelMure/git-bug/identity"
12)
13
14func TestEdit(t *testing.T) {
15	snapshot := Snapshot{}
16
17	rene := identity.NewBare("René Descartes", "rene@descartes.fr")
18	unix := time.Now().Unix()
19
20	create := NewCreateOp(rene, unix, "title", "create", nil)
21	create.Apply(&snapshot)
22
23	hash1 := create.ID()
24	require.True(t, IDIsValid(hash1))
25
26	comment1 := NewAddCommentOp(rene, unix, "comment 1", nil)
27	comment1.Apply(&snapshot)
28
29	hash2 := comment1.ID()
30	require.True(t, IDIsValid(hash2))
31
32	// add another unrelated op in between
33	setTitle := NewSetTitleOp(rene, unix, "edited title", "title")
34	setTitle.Apply(&snapshot)
35
36	comment2 := NewAddCommentOp(rene, unix, "comment 2", nil)
37	comment2.Apply(&snapshot)
38
39	hash3 := comment2.ID()
40	require.True(t, IDIsValid(hash3))
41
42	edit := NewEditCommentOp(rene, unix, hash1, "create edited", nil)
43	edit.Apply(&snapshot)
44
45	assert.Equal(t, len(snapshot.Timeline), 4)
46	assert.Equal(t, len(snapshot.Timeline[0].(*CreateTimelineItem).History), 2)
47	assert.Equal(t, len(snapshot.Timeline[1].(*AddCommentTimelineItem).History), 1)
48	assert.Equal(t, len(snapshot.Timeline[3].(*AddCommentTimelineItem).History), 1)
49	assert.Equal(t, snapshot.Comments[0].Message, "create edited")
50	assert.Equal(t, snapshot.Comments[1].Message, "comment 1")
51	assert.Equal(t, snapshot.Comments[2].Message, "comment 2")
52
53	edit2 := NewEditCommentOp(rene, unix, hash2, "comment 1 edited", nil)
54	edit2.Apply(&snapshot)
55
56	assert.Equal(t, len(snapshot.Timeline), 4)
57	assert.Equal(t, len(snapshot.Timeline[0].(*CreateTimelineItem).History), 2)
58	assert.Equal(t, len(snapshot.Timeline[1].(*AddCommentTimelineItem).History), 2)
59	assert.Equal(t, len(snapshot.Timeline[3].(*AddCommentTimelineItem).History), 1)
60	assert.Equal(t, snapshot.Comments[0].Message, "create edited")
61	assert.Equal(t, snapshot.Comments[1].Message, "comment 1 edited")
62	assert.Equal(t, snapshot.Comments[2].Message, "comment 2")
63
64	edit3 := NewEditCommentOp(rene, unix, hash3, "comment 2 edited", nil)
65	edit3.Apply(&snapshot)
66
67	assert.Equal(t, len(snapshot.Timeline), 4)
68	assert.Equal(t, len(snapshot.Timeline[0].(*CreateTimelineItem).History), 2)
69	assert.Equal(t, len(snapshot.Timeline[1].(*AddCommentTimelineItem).History), 2)
70	assert.Equal(t, len(snapshot.Timeline[3].(*AddCommentTimelineItem).History), 2)
71	assert.Equal(t, snapshot.Comments[0].Message, "create edited")
72	assert.Equal(t, snapshot.Comments[1].Message, "comment 1 edited")
73	assert.Equal(t, snapshot.Comments[2].Message, "comment 2 edited")
74}
75
76func TestEditCommentSerialize(t *testing.T) {
77	var rene = identity.NewBare("René Descartes", "rene@descartes.fr")
78	unix := time.Now().Unix()
79	before := NewEditCommentOp(rene, unix, "target", "message", nil)
80
81	data, err := json.Marshal(before)
82	assert.NoError(t, err)
83
84	var after EditCommentOperation
85	err = json.Unmarshal(data, &after)
86	assert.NoError(t, err)
87
88	// enforce creating the ID
89	before.ID()
90
91	assert.Equal(t, before, &after)
92}