Files
core/http/handler/api/restream_test.go
2022-06-24 19:47:12 +02:00

163 lines
4.2 KiB
Go

package api
import (
"net/http"
"testing"
"github.com/datarhei/core/v16/http/api"
"github.com/datarhei/core/v16/http/mock"
"github.com/stretchr/testify/require"
"github.com/labstack/echo/v4"
)
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{}
}
func getDummyRestreamHandler() (*RestreamHandler, error) {
rs, err := mock.DummyRestreamer("../../mock")
if err != nil {
return nil, err
}
handler := NewRestream(rs)
return handler, nil
}
func getDummyRestreamRouter() (*echo.Echo, error) {
router := mock.DummyEcho()
restream, err := getDummyRestreamHandler()
if err != nil {
return nil, err
}
router.GET("/", restream.GetAll)
router.POST("/", restream.Add)
router.GET("/:id", restream.Get)
router.GET("/:id/report", restream.GetReport)
router.PUT("/:id", restream.Update)
router.DELETE("/:id", restream.Delete)
router.PUT("/:id/command", restream.Command)
return router, nil
}
func TestAddProcessMissingField(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
data := mock.Read(t, "./fixtures/addProcessMissingField.json")
mock.Request(t, http.StatusOK, router, "POST", "/", data)
}
func TestAddProcessInvalidType(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
data := mock.Read(t, "./fixtures/addProcessInvalidType.json")
mock.Request(t, http.StatusBadRequest, router, "POST", "/", data)
}
func TestAddProcess(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
data := mock.Read(t, "./fixtures/addProcess.json")
response := mock.Request(t, http.StatusOK, router, "POST", "/", data)
mock.Validate(t, &api.ProcessConfig{}, response.Data)
}
func TestRemoveUnknownProcess(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
mock.Request(t, http.StatusNotFound, router, "DELETE", "/foobar", nil)
}
func TestRemoveProcess(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
data := mock.Read(t, "./fixtures/removeProcess.json")
mock.Request(t, http.StatusOK, router, "POST", "/", data)
mock.Request(t, http.StatusOK, router, "DELETE", "/test", nil)
}
func TestProcessInfo(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
data := mock.Read(t, "./fixtures/addProcess.json")
mock.Request(t, http.StatusOK, router, "POST", "/", data)
response := mock.Request(t, http.StatusOK, router, "GET", "/test", nil)
mock.Validate(t, &api.Process{}, response.Data)
}
func TestProcessReportNotFound(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
mock.Request(t, http.StatusNotFound, router, "GET", "/test/report", nil)
}
func TestProcessReport(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
data := mock.Read(t, "./fixtures/addProcess.json")
mock.Request(t, http.StatusOK, router, "POST", "/", data)
response := mock.Request(t, http.StatusOK, router, "GET", "/test/report", nil)
mock.Validate(t, &api.ProcessReport{}, response.Data)
}
func TestProcessCommandNotFound(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
command := mock.Read(t, "./fixtures/commandStart.json")
mock.Request(t, http.StatusBadRequest, router, "PUT", "/test/command", command)
}
func TestProcessCommandInvalid(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
data := mock.Read(t, "./fixtures/addProcess.json")
mock.Request(t, http.StatusOK, router, "POST", "/", data)
command := mock.Read(t, "./fixtures/commandInvalid.json")
mock.Request(t, http.StatusBadRequest, router, "PUT", "/test/command", command)
}
func TestProcessCommand(t *testing.T) {
router, err := getDummyRestreamRouter()
require.NoError(t, err)
data := mock.Read(t, "./fixtures/addProcess.json")
mock.Request(t, http.StatusOK, router, "POST", "/", data)
command := mock.Read(t, "./fixtures/commandStart.json")
mock.Request(t, http.StatusOK, router, "PUT", "/test/command", command)
mock.Request(t, http.StatusOK, router, "GET", "/test", data)
command = mock.Read(t, "./fixtures/commandStop.json")
mock.Request(t, http.StatusOK, router, "PUT", "/test/command", command)
mock.Request(t, http.StatusOK, router, "GET", "/test", data)
}