operation_test.go

 1package bug
 2
 3import (
 4	"testing"
 5	"time"
 6
 7	"github.com/MichaelMure/git-bug/util/git"
 8)
 9
10func TestValidate(t *testing.T) {
11	rene := Person{
12		Name:  "René Descartes",
13		Email: "rene@descartes.fr",
14	}
15
16	unix := time.Now().Unix()
17
18	good := []Operation{
19		NewCreateOp(rene, unix, "title", "message", nil),
20		NewSetTitleOp(rene, unix, "title2", "title1"),
21		NewAddCommentOp(rene, unix, "message2", nil),
22		NewSetStatusOp(rene, unix, ClosedStatus),
23		NewLabelChangeOperation(rene, unix, []Label{"added"}, []Label{"removed"}),
24	}
25
26	for _, op := range good {
27		if err := op.Validate(); err != nil {
28			t.Fatal(err)
29		}
30	}
31
32	bad := []Operation{
33		// opbase
34		NewSetStatusOp(Person{Name: "", Email: "rene@descartes.fr"}, unix, ClosedStatus),
35		NewSetStatusOp(Person{Name: "René Descartes\u001b", Email: "rene@descartes.fr"}, unix, ClosedStatus),
36		NewSetStatusOp(Person{Name: "René Descartes", Email: "rene@descartes.fr\u001b"}, unix, ClosedStatus),
37		NewSetStatusOp(Person{Name: "René \nDescartes", Email: "rene@descartes.fr"}, unix, ClosedStatus),
38		NewSetStatusOp(Person{Name: "René Descartes", Email: "rene@\ndescartes.fr"}, unix, ClosedStatus),
39		CreateOperation{OpBase: &OpBase{
40			Author:        rene,
41			UnixTime:      0,
42			OperationType: CreateOp,
43		},
44			Title:   "title",
45			Message: "message",
46		},
47
48		NewCreateOp(rene, unix, "multi\nline", "message", nil),
49		NewCreateOp(rene, unix, "title", "message", []git.Hash{git.Hash("invalid")}),
50		NewCreateOp(rene, unix, "title\u001b", "message", nil),
51		NewCreateOp(rene, unix, "title", "message\u001b", nil),
52		NewSetTitleOp(rene, unix, "multi\nline", "title1"),
53		NewSetTitleOp(rene, unix, "title", "multi\nline"),
54		NewSetTitleOp(rene, unix, "title\u001b", "title2"),
55		NewSetTitleOp(rene, unix, "title", "title2\u001b"),
56		NewAddCommentOp(rene, unix, "", nil),
57		NewAddCommentOp(rene, unix, "message\u001b", nil),
58		NewAddCommentOp(rene, unix, "message", []git.Hash{git.Hash("invalid")}),
59		NewSetStatusOp(rene, unix, 1000),
60		NewSetStatusOp(rene, unix, 0),
61		NewLabelChangeOperation(rene, unix, []Label{}, []Label{}),
62		NewLabelChangeOperation(rene, unix, []Label{"multi\nline"}, []Label{}),
63	}
64
65	for i, op := range bad {
66		if err := op.Validate(); err == nil {
67			t.Fatal("validation should have failed", i, op)
68		}
69	}
70}