mirror of
https://github.com/navidrome/navidrome.git
synced 2025-06-05 01:43:11 +03:00
Refactored responses, implemented getLicense
This commit is contained in:
parent
ed1a132d8e
commit
1a3f370ea6
@ -3,6 +3,8 @@ httpport = 8080
|
|||||||
runmode = dev
|
runmode = dev
|
||||||
autorender = false
|
autorender = false
|
||||||
copyrequestbody = true
|
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 (
|
import (
|
||||||
"github.com/astaxie/beego"
|
"github.com/astaxie/beego"
|
||||||
"encoding/xml"
|
"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 }
|
type PingController struct{ beego.Controller }
|
||||||
|
|
||||||
// @router /rest/ping.view [get]
|
// @router /rest/ping.view [get]
|
||||||
func (this *PingController) Get() {
|
func (this *PingController) Get() {
|
||||||
response := &PingResponse{Status:"ok", Version: beego.AppConfig.String("apiversion")}
|
response := responses.NewSubsonic()
|
||||||
xmlBody, _ := xml.Marshal(response)
|
xmlBody, _ := xml.Marshal(response)
|
||||||
this.Ctx.Output.Body([]byte(xml.Header + string(xmlBody)))
|
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() {
|
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"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"encoding/xml"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
_ "github.com/deluan/gosonic/routers"
|
_ "github.com/deluan/gosonic/routers"
|
||||||
|
|
||||||
"github.com/astaxie/beego"
|
"github.com/astaxie/beego"
|
||||||
. "github.com/smartystreets/goconvey/convey"
|
. "github.com/smartystreets/goconvey/convey"
|
||||||
"github.com/deluan/gosonic/controllers"
|
"github.com/deluan/gosonic/responses"
|
||||||
"encoding/xml"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
_, file, _, _ := runtime.Caller(1)
|
_, file, _, _ := runtime.Caller(1)
|
||||||
apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, "../.." + string(filepath.Separator))))
|
appPath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, "../.." + string(filepath.Separator))))
|
||||||
beego.TestBeegoInit(apppath)
|
beego.TestBeegoInit(appPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestGet is a sample to run an endpoint test
|
// TestGet is a sample to run an endpoint test
|
||||||
@ -26,17 +26,17 @@ func TestPing(t *testing.T) {
|
|||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
beego.BeeApp.Handlers.ServeHTTP(w, r)
|
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("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)
|
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)
|
So(w.Body.Len(), ShouldBeGreaterThan, 0)
|
||||||
})
|
})
|
||||||
Convey("The Result Should Be A Valid Ping Response", func() {
|
Convey("The result should be a valid ping response", func() {
|
||||||
v := controllers.PingResponse{}
|
v := responses.Subsonic{}
|
||||||
xml.Unmarshal(w.Body.Bytes(), &v)
|
xml.Unmarshal(w.Body.Bytes(), &v)
|
||||||
So(v.Status, ShouldEqual, "ok")
|
So(v.Status, ShouldEqual, "ok")
|
||||||
So(v.Version, ShouldEqual, "1.0.0")
|
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