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