1package bug
2
3import (
4 "testing"
5 "time"
6
7 "github.com/stretchr/testify/require"
8
9 "github.com/MichaelMure/git-bug/entities/identity"
10 "github.com/MichaelMure/git-bug/entity"
11 "github.com/MichaelMure/git-bug/entity/dag"
12 "github.com/MichaelMure/git-bug/repository"
13)
14
15func TestEdit(t *testing.T) {
16 snapshot := Snapshot{}
17
18 repo := repository.NewMockRepo()
19
20 rene, err := identity.NewIdentity(repo, "René Descartes", "rene@descartes.fr")
21 require.NoError(t, err)
22
23 unix := time.Now().Unix()
24
25 create := NewCreateOp(rene, unix, "title", "create", nil)
26 create.Apply(&snapshot)
27
28 require.NoError(t, create.Id().Validate())
29
30 comment1 := NewAddCommentOp(rene, unix, "comment 1", nil)
31 comment1.Apply(&snapshot)
32
33 require.NoError(t, comment1.Id().Validate())
34
35 // add another unrelated op in between
36 setTitle := NewSetTitleOp(rene, unix, "edited title", "title")
37 setTitle.Apply(&snapshot)
38
39 comment2 := NewAddCommentOp(rene, unix, "comment 2", nil)
40 comment2.Apply(&snapshot)
41
42 require.NoError(t, comment2.Id().Validate())
43
44 edit := NewEditCommentOp(rene, unix, create.Id(), "create edited", nil)
45 edit.Apply(&snapshot)
46
47 require.Len(t, snapshot.Timeline, 4)
48 require.Len(t, snapshot.Timeline[0].(*CreateTimelineItem).History, 2)
49 require.Len(t, snapshot.Timeline[1].(*AddCommentTimelineItem).History, 1)
50 require.Len(t, snapshot.Timeline[3].(*AddCommentTimelineItem).History, 1)
51 require.Equal(t, snapshot.Comments[0].Message, "create edited")
52 require.Equal(t, snapshot.Comments[1].Message, "comment 1")
53 require.Equal(t, snapshot.Comments[2].Message, "comment 2")
54
55 edit2 := NewEditCommentOp(rene, unix, comment1.Id(), "comment 1 edited", nil)
56 edit2.Apply(&snapshot)
57
58 require.Len(t, snapshot.Timeline, 4)
59 require.Len(t, snapshot.Timeline[0].(*CreateTimelineItem).History, 2)
60 require.Len(t, snapshot.Timeline[1].(*AddCommentTimelineItem).History, 2)
61 require.Len(t, snapshot.Timeline[3].(*AddCommentTimelineItem).History, 1)
62 require.Equal(t, snapshot.Comments[0].Message, "create edited")
63 require.Equal(t, snapshot.Comments[1].Message, "comment 1 edited")
64 require.Equal(t, snapshot.Comments[2].Message, "comment 2")
65
66 edit3 := NewEditCommentOp(rene, unix, comment2.Id(), "comment 2 edited", nil)
67 edit3.Apply(&snapshot)
68
69 require.Len(t, snapshot.Timeline, 4)
70 require.Len(t, snapshot.Timeline[0].(*CreateTimelineItem).History, 2)
71 require.Len(t, snapshot.Timeline[1].(*AddCommentTimelineItem).History, 2)
72 require.Len(t, snapshot.Timeline[3].(*AddCommentTimelineItem).History, 2)
73 require.Equal(t, snapshot.Comments[0].Message, "create edited")
74 require.Equal(t, snapshot.Comments[1].Message, "comment 1 edited")
75 require.Equal(t, snapshot.Comments[2].Message, "comment 2 edited")
76}
77
78func TestEditCommentSerialize(t *testing.T) {
79 dag.SerializeRoundTripTest(t, operationUnmarshaler, func(author entity.Identity, unixTime int64) (*EditCommentOperation, entity.Resolvers) {
80 return NewEditCommentOp(author, unixTime, "target", "message", nil), nil
81 })
82 dag.SerializeRoundTripTest(t, operationUnmarshaler, func(author entity.Identity, unixTime int64) (*EditCommentOperation, entity.Resolvers) {
83 return NewEditCommentOp(author, unixTime, "target", "message", []repository.Hash{"hash1", "hash2"}), nil
84 })
85}