mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-15 03:30:39 +03:00
Refactored responses, implemented getLicense
This commit is contained in:
parent
ed1a132d8e
commit
1a3f370ea6
@ -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
|
||||
|
19
controllers/get_license.go
Normal file
19
controllers/get_license.go
Normal 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)))
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
17
responses/license.go
Normal 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
16
responses/subsonic.go
Normal 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")}
|
||||
}
|
@ -14,5 +14,8 @@ import (
|
||||
)
|
||||
|
||||
func init() {
|
||||
beego.Include(&controllers.PingController{})
|
||||
beego.Include(
|
||||
&controllers.PingController{},
|
||||
&controllers.GetLicenseController{},
|
||||
)
|
||||
}
|
||||
|
44
tests/controllers/get_license_test.go
Normal file
44
tests/controllers/get_license_test.go
Normal 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"`)
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
|
@ -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")
|
||||
|
@ -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)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user