operation_iterator_test.go

 1package bug
 2
 3import (
 4	"fmt"
 5	"testing"
 6	"time"
 7
 8	"github.com/stretchr/testify/require"
 9
10	"github.com/MichaelMure/git-bug/identity"
11	"github.com/MichaelMure/git-bug/repository"
12)
13
14func ExampleOperationIterator() {
15	b := NewBug()
16
17	// add operations
18
19	it := NewOperationIterator(b)
20
21	for it.Next() {
22		// do something with each operations
23		_ = it.Value()
24	}
25}
26
27func TestOpIterator(t *testing.T) {
28	repo := repository.NewMockRepo()
29
30	rene, err := identity.NewIdentity(repo, "René Descartes", "rene@descartes.fr")
31	require.NoError(t, err)
32	err = rene.Commit(repo)
33	require.NoError(t, err)
34
35	unix := time.Now().Unix()
36
37	createOp := NewCreateOp(rene, unix, "title", "message", nil)
38	addCommentOp := NewAddCommentOp(rene, unix, "message2", nil)
39	setStatusOp := NewSetStatusOp(rene, unix, ClosedStatus)
40	labelChangeOp := NewLabelChangeOperation(rene, unix, []Label{"added"}, []Label{"removed"})
41
42	var i int
43	genTitleOp := func() Operation {
44		i++
45		return NewSetTitleOp(rene, unix, fmt.Sprintf("title%d", i), "")
46	}
47
48	bug1 := NewBug()
49
50	// first pack
51	bug1.Append(createOp)
52	bug1.Append(addCommentOp)
53	bug1.Append(setStatusOp)
54	bug1.Append(labelChangeOp)
55	err = bug1.Commit(repo)
56	require.NoError(t, err)
57
58	// second pack
59	bug1.Append(genTitleOp())
60	bug1.Append(genTitleOp())
61	bug1.Append(genTitleOp())
62	err = bug1.Commit(repo)
63	require.NoError(t, err)
64
65	// staging
66	bug1.Append(genTitleOp())
67	bug1.Append(genTitleOp())
68	bug1.Append(genTitleOp())
69
70	it := NewOperationIterator(bug1)
71
72	counter := 0
73	for it.Next() {
74		_ = it.Value()
75		counter++
76	}
77
78	require.Equal(t, 10, counter)
79}