Refactored responses, implemented getLicense

This commit is contained in:
Deluan 2016-02-24 11:29:26 -05:00
parent ed1a132d8e
commit 1a3f370ea6
9 changed files with 116 additions and 58 deletions

View File

@ -3,6 +3,8 @@ httpport = 8080
runmode = dev
autorender = false
copyrequestbody = true
enableadmin = true
apiversion = 1.0.0
apiversion = 1.0.0
[dev]
enableadmin = true

View File

@ -0,0 +1,19 @@
package controllers
import (
"github.com/astaxie/beego"
"encoding/xml"
"github.com/deluan/gosonic/responses"
)
type GetLicenseController struct{ beego.Controller }
// @router /rest/getLicense.view [get]
func (this *GetLicenseController) Get() {
response := responses.NewGetLicense(true)
xmlBody, _ := xml.Marshal(response)
this.Ctx.Output.Body([]byte(xml.Header + string(xmlBody)))
}

View File

@ -3,19 +3,14 @@ package controllers
import (
"github.com/astaxie/beego"
"encoding/xml"
"github.com/deluan/gosonic/responses"
)
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() {
response := &PingResponse{Status:"ok", Version: beego.AppConfig.String("apiversion")}
response := responses.NewSubsonic()
xmlBody, _ := xml.Marshal(response)
this.Ctx.Output.Body([]byte(xml.Header + string(xmlBody)))
}

17
responses/license.go Normal file
View File

@ -0,0 +1,17 @@
package responses
type valid struct {
Valid bool `xml:"valid,attr"`
}
type license struct {
Subsonic
Body valid `xml:"license"`
}
func NewGetLicense(valid bool) *license {
response := new(license)
response.Subsonic = NewSubsonic()
response.Body.Valid = valid
return response
}

16
responses/subsonic.go Normal file
View File

@ -0,0 +1,16 @@
package responses
import (
"encoding/xml"
"github.com/astaxie/beego"
)
type Subsonic struct {
XMLName xml.Name `xml:"http://subsonic.org/restapi subsonic-response"`
Status string `xml:"status,attr"`
Version string `xml:"version,attr"`
}
func NewSubsonic() Subsonic {
return Subsonic{Status: "ok", Version: beego.AppConfig.String("apiversion")}
}

View File

@ -14,5 +14,8 @@ import (
)
func init() {
beego.Include(&controllers.PingController{})
beego.Include(
&controllers.PingController{},
&controllers.GetLicenseController{},
)
}

View File

@ -0,0 +1,44 @@
package test
import (
"net/http"
"net/http/httptest"
"testing"
"runtime"
"path/filepath"
_ "github.com/deluan/gosonic/routers"
"github.com/astaxie/beego"
. "github.com/smartystreets/goconvey/convey"
"encoding/xml"
"fmt"
)
func init() {
_, file, _, _ := runtime.Caller(1)
appPath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, "../.." + string(filepath.Separator))))
beego.TestBeegoInit(appPath)
}
// TestGet is a sample to run an endpoint test
func TestGetLicense(t *testing.T) {
r, _ := http.NewRequest("GET", "/rest/getLicense.view", nil)
w := httptest.NewRecorder()
beego.BeeApp.Handlers.ServeHTTP(w, r)
beego.Trace("testing", "TestGetLicense", fmt.Sprintf("Code[%d]\n%s", w.Code, w.Body.String()))
Convey("Subject: GetLicense Endpoint\n", t, func() {
Convey("Status code should be 200", func() {
So(w.Code, ShouldEqual, 200)
})
Convey("The license should always be valid", func() {
v := new(string)
err := xml.Unmarshal(w.Body.Bytes(), &v)
So(err, ShouldBeNil)
So(w.Body.String(), ShouldContainSubstring, `license valid="true"`)
})
})
}

View File

@ -5,19 +5,19 @@ import (
"net/http/httptest"
"testing"
"runtime"
"encoding/xml"
"path/filepath"
_ "github.com/deluan/gosonic/routers"
"github.com/astaxie/beego"
. "github.com/smartystreets/goconvey/convey"
"github.com/deluan/gosonic/controllers"
"encoding/xml"
"github.com/deluan/gosonic/responses"
"fmt"
)
func init() {
_, file, _, _ := runtime.Caller(1)
apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, "../.." + string(filepath.Separator))))
beego.TestBeegoInit(apppath)
appPath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, "../.." + string(filepath.Separator))))
beego.TestBeegoInit(appPath)
}
// TestGet is a sample to run an endpoint test
@ -26,17 +26,17 @@ func TestPing(t *testing.T) {
w := httptest.NewRecorder()
beego.BeeApp.Handlers.ServeHTTP(w, r)
beego.Trace("testing", "TestPing", "Code[%d]\n%s", w.Code, w.Body.String())
beego.Trace("testing", "TestPing", fmt.Sprintf("Code[%d]\n%s", w.Code, w.Body.String()))
Convey("Subject: Ping Endpoint\n", t, func() {
Convey("Status Code Should Be 200", func() {
Convey("Status code should be 200", func() {
So(w.Code, ShouldEqual, 200)
})
Convey("The Result Should Not Be Empty", func() {
Convey("The result should not be empty", func() {
So(w.Body.Len(), ShouldBeGreaterThan, 0)
})
Convey("The Result Should Be A Valid Ping Response", func() {
v := controllers.PingResponse{}
Convey("The result should be a valid ping response", func() {
v := responses.Subsonic{}
xml.Unmarshal(w.Body.Bytes(), &v)
So(v.Status, ShouldEqual, "ok")
So(v.Version, ShouldEqual, "1.0.0")

View File

@ -1,38 +0,0 @@
package test
import (
"net/http"
"net/http/httptest"
"testing"
"runtime"
"path/filepath"
_ "github.com/deluan/gosonic/routers"
"github.com/astaxie/beego"
. "github.com/smartystreets/goconvey/convey"
)
func init() {
_, file, _, _ := runtime.Caller(1)
apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".." + string(filepath.Separator))))
beego.TestBeegoInit(apppath)
}
// TestGet is a sample to run an endpoint test
func xTestGet(t *testing.T) {
r, _ := http.NewRequest("GET", "/v1/object", nil)
w := httptest.NewRecorder()
beego.BeeApp.Handlers.ServeHTTP(w, r)
beego.Trace("testing", "TestGet", "Code[%d]\n%s", w.Code, w.Body.String())
Convey("Subject: Test Station Endpoint\n", t, func() {
Convey("Status Code Should Be 200", func() {
So(w.Code, ShouldEqual, 200)
})
Convey("The Result Should Not Be Empty", func() {
So(w.Body.Len(), ShouldBeGreaterThan, 0)
})
})
}