op_create_test.go

 1package board
 2
 3import (
 4	"testing"
 5	"time"
 6
 7	"github.com/stretchr/testify/require"
 8
 9	"github.com/git-bug/git-bug/entities/identity"
10	"github.com/git-bug/git-bug/entity"
11	"github.com/git-bug/git-bug/entity/dag"
12	"github.com/git-bug/git-bug/repository"
13)
14
15func TestCreate(t *testing.T) {
16	snap := 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", "description", DefaultColumns)
26	create.Apply(&snap)
27
28	id := create.Id()
29	require.NoError(t, id.Validate())
30
31	require.Equal(t, id, snap.Id())
32	require.Equal(t, "title", snap.Title)
33	require.Equal(t, "description", snap.Description)
34	require.Len(t, snap.Columns, len(DefaultColumns))
35	for i, column := range DefaultColumns {
36		require.Equal(t, column, snap.Columns[i].Name)
37	}
38
39	// Make sure an extra Create Op doesn't mess things
40	isaac, err := identity.NewIdentity(repo, "Isaac Newton", "isaac@newton.uk")
41	require.NoError(t, err)
42	create2 := NewCreateOp(isaac, unix, "title2", "description2", DefaultColumns)
43	create2.Apply(&snap)
44
45	require.Equal(t, id, snap.Id())
46	require.Equal(t, "title", snap.Title)
47	require.Equal(t, "description", snap.Description)
48	require.Len(t, snap.Columns, len(DefaultColumns))
49	for i, column := range DefaultColumns {
50		require.Equal(t, column, snap.Columns[i].Name)
51	}
52}
53
54func TestNonUnique(t *testing.T) {
55	repo := repository.NewMockRepo()
56
57	rene, err := identity.NewIdentity(repo, "René Descartes", "rene@descartes.fr")
58	require.NoError(t, err)
59
60	unix := time.Now().Unix()
61
62	create := NewCreateOp(rene, unix, "title", "description", []string{
63		"foo", "bar", "foo",
64	})
65
66	require.Error(t, create.Validate())
67}
68
69func TestCreateSerialize(t *testing.T) {
70	dag.SerializeRoundTripTest(t, operationUnmarshaler, func(author identity.Interface, unixTime int64) (*CreateOperation, entity.Resolvers) {
71		return NewCreateOp(author, unixTime, "title", "description", DefaultColumns), nil
72	})
73}