woodpecker/pkg/server/badge_test.go

105 lines
3 KiB
Go
Raw Normal View History

2015-04-23 21:56:26 +00:00
package server
import (
2015-05-12 17:06:00 +00:00
"database/sql"
2015-04-28 21:42:09 +00:00
"encoding/xml"
2015-04-23 21:56:26 +00:00
"net/http"
2015-04-28 21:42:09 +00:00
"net/url"
2015-04-23 21:56:26 +00:00
"testing"
2015-05-17 20:51:42 +00:00
"github.com/drone/drone/pkg/ccmenu"
"github.com/drone/drone/pkg/server/recorder"
"github.com/drone/drone/pkg/store/mock"
2015-05-17 20:51:42 +00:00
common "github.com/drone/drone/pkg/types"
2015-05-12 17:06:00 +00:00
2015-05-22 18:37:40 +00:00
. "github.com/drone/drone/Godeps/_workspace/src/github.com/franela/goblin"
"github.com/drone/drone/Godeps/_workspace/src/github.com/gin-gonic/gin"
"github.com/drone/drone/Godeps/_workspace/src/github.com/stretchr/testify/mock"
2015-04-23 21:56:26 +00:00
)
var badgeTests = []struct {
2015-05-12 17:06:00 +00:00
branch string
badge []byte
state string
activity string
status string
err error
}{
2015-05-12 17:06:00 +00:00
{"", badgeSuccess, common.StateSuccess, "Sleeping", "Success", nil},
{"master", badgeSuccess, common.StateSuccess, "Sleeping", "Success", nil},
{"", badgeStarted, common.StateRunning, "Building", "Unknown", nil},
{"", badgeError, common.StateError, "Sleeping", "Exception", nil},
{"", badgeError, common.StateKilled, "Sleeping", "Exception", nil},
{"", badgeFailure, common.StateFailure, "Sleeping", "Failure", nil},
{"", badgeNone, "", "", "", sql.ErrNoRows},
}
2015-04-23 21:56:26 +00:00
func TestBadges(t *testing.T) {
store := new(mocks.Store)
url_, _ := url.Parse("http://localhost:8080")
2015-04-23 21:56:26 +00:00
g := Goblin(t)
g.Describe("Badges", func() {
2015-04-28 21:42:09 +00:00
2015-05-01 05:48:15 +00:00
g.It("should serve svg badges", func() {
for _, test := range badgeTests {
rw := recorder.New()
ctx := &gin.Context{Engine: gin.Default(), Writer: rw}
2015-05-12 17:06:00 +00:00
ctx.Request = &http.Request{
Form: url.Values{},
}
if len(test.branch) != 0 {
ctx.Request.Form.Set("branch", test.branch)
2015-04-28 21:42:09 +00:00
}
2015-04-23 21:56:26 +00:00
2015-05-12 17:06:00 +00:00
repo := &common.Repo{FullName: "foo/bar"}
ctx.Set("datastore", store)
ctx.Set("repo", repo)
2015-04-23 21:56:26 +00:00
commit := &common.Build{Status: test.state}
store.On("BuildLast", repo, test.branch).Return(commit, test.err).Once()
GetBadge(ctx)
2015-05-12 17:06:00 +00:00
g.Assert(rw.Code).Equal(200)
g.Assert(rw.Body.Bytes()).Equal(test.badge)
g.Assert(rw.HeaderMap.Get("Content-Type")).Equal("image/svg+xml")
2015-04-28 21:42:09 +00:00
}
})
2015-04-28 21:42:09 +00:00
g.It("should serve ccmenu xml", func() {
2015-04-23 21:56:26 +00:00
for _, test := range badgeTests {
rw := recorder.New()
ctx := &gin.Context{Engine: gin.Default(), Writer: rw}
ctx.Request = &http.Request{URL: url_}
2015-04-28 21:42:09 +00:00
repo := &common.Repo{FullName: "foo/bar"}
ctx.Set("datastore", store)
ctx.Set("repo", repo)
2015-04-28 21:42:09 +00:00
commits := []*common.Build{
&common.Build{Status: test.state},
2015-05-12 17:06:00 +00:00
}
store.On("BuildList", repo, mock.AnythingOfType("int"), mock.AnythingOfType("int")).Return(commits, test.err).Once()
GetCC(ctx)
2015-04-28 21:42:09 +00:00
// in an error scenario (ie no build exists) we should
// return a 404 not found error.
if test.err != nil {
g.Assert(rw.Status()).Equal(404)
continue
2015-04-28 21:42:09 +00:00
}
// else parse the CCMenu xml output and verify
// it matches the expected values.
cc := &ccmenu.CCProjects{}
xml.Unmarshal(rw.Body.Bytes(), cc)
2015-05-12 17:06:00 +00:00
g.Assert(rw.Code).Equal(200)
g.Assert(cc.Project.Activity).Equal(test.activity)
g.Assert(cc.Project.LastBuildStatus).Equal(test.status)
g.Assert(rw.HeaderMap.Get("Content-Type")).Equal("application/xml; charset=utf-8")
2015-04-28 21:42:09 +00:00
}
})
2015-04-23 21:56:26 +00:00
})
}