diff --git a/conf/app.conf b/conf/app.conf index 955df9ef1..153370877 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -4,3 +4,5 @@ runmode = dev autorender = false copyrequestbody = true enableadmin = true + +apiversion = 1.0.0 \ No newline at end of file diff --git a/controllers/ping.go b/controllers/ping.go index 69b8c2ac4..28ae973dc 100644 --- a/controllers/ping.go +++ b/controllers/ping.go @@ -1,14 +1,23 @@ package controllers -import "github.com/astaxie/beego" +import ( + "github.com/astaxie/beego" + "encoding/xml" +) -type PingController struct { - beego.Controller +type PingResponse struct { + XMLName xml.Name `xml:"http://subsonic.org/restapi subsonic-response"` + Status string `xml:"status,attr"` + Version string `xml:"version,attr"` } +type PingController struct{ beego.Controller } + // @router /rest/ping.view [get] func (this *PingController) Get() { - this.Ctx.WriteString("") + response := &PingResponse{Status:"ok", Version: beego.AppConfig.String("apiversion")} + xmlBody, _ := xml.Marshal(response) + this.Ctx.Output.Body([]byte(xml.Header + string(xmlBody))) } diff --git a/tests/controllers/ping_test.go b/tests/controllers/ping_test.go index b04b16fc2..8f82144e2 100644 --- a/tests/controllers/ping_test.go +++ b/tests/controllers/ping_test.go @@ -10,6 +10,8 @@ import ( "github.com/astaxie/beego" . "github.com/smartystreets/goconvey/convey" + "github.com/deluan/gosonic/controllers" +"encoding/xml" ) func init() { @@ -33,8 +35,11 @@ func TestPing(t *testing.T) { Convey("The Result Should Not Be Empty", func() { So(w.Body.Len(), ShouldBeGreaterThan, 0) }) - Convey("The Result Should Be A Pong", func() { - So(w.Body.String(), ShouldEqual, "") + Convey("The Result Should Be A Valid Ping Response", func() { + v := controllers.PingResponse{} + xml.Unmarshal(w.Body.Bytes(), &v) + So(v.Status, ShouldEqual, "ok") + So(v.Version, ShouldEqual, "1.0.0") }) })