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}