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}