blob: 3d1db725f9dd21246bdabde4ce89a4e41c3bf746 [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package monorail
import (
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func TestValidation(t *testing.T) {
t.Parallel()
Convey("Validation", t, func() {
type Validatable interface {
Validate() error
}
good := func(v Validatable) {
So(v.Validate(), ShouldBeNil)
}
bad := func(v Validatable) {
So(v.Validate(), ShouldNotBeNil)
}
Convey("IssueRef", func() {
good(&IssueRef{ProjectId: "chromium", IssueId: 1})
bad((*IssueRef)(nil))
bad(&IssueRef{})
bad(&IssueRef{ProjectId: "chromium"})
bad(&IssueRef{IssueId: 1})
})
Convey("AtomPerson", func() {
good(&AtomPerson{Name: "bob"})
bad((*AtomPerson)(nil))
bad(&AtomPerson{})
})
Convey("Issue", func() {
good(&Issue{Status: StatusStarted, ProjectId: "chromium"})
good(&Issue{
Summary: "Write tests for monorail client",
Author: &AtomPerson{Name: "seanmccullough@chromium.org"},
Owner: &AtomPerson{Name: "nodir@chromium.org"},
Status: StatusStarted,
Cc: []*AtomPerson{{Name: "agable@chromium.org"}},
Description: "We should keep our code coverage high, so write tests",
Components: []string{"Infra"},
Labels: []string{"M-53"},
ProjectId: "chromium",
})
bad((*Issue)(nil))
bad(&Issue{})
bad(&Issue{
Status: StatusStarted,
BlockedOn: []*IssueRef{{}},
})
bad(&Issue{
Status: StatusStarted,
Cc: []*AtomPerson{{Name: "a"}, {Name: "a"}},
})
bad(&Issue{
Status: StatusStarted,
Components: []string{""},
})
bad(&Issue{
Status: StatusStarted,
Labels: []string{""},
})
bad(&Issue{
Status: StatusStarted,
Owner: &AtomPerson{},
})
})
Convey("InsertIssueRequest", func() {
good(&InsertIssueRequest{
Issue: &Issue{
ProjectId: "chromium",
Summary: "Write tests for monorail client",
Author: &AtomPerson{Name: "seanmccullough@chromium.org"},
Owner: &AtomPerson{Name: "nodir@chromium.org"},
Status: StatusStarted,
Cc: []*AtomPerson{{Name: "agable@chromium.org"}},
Description: "We should keep our code coverage high, so write tests",
Components: []string{"Infra"},
Labels: []string{"M-53"},
},
})
bad(&InsertIssueRequest{})
bad(&InsertIssueRequest{
Issue: &Issue{
ProjectId: "chromium",
Status: StatusStarted,
Id: 1,
},
})
})
})
}