add missing apidoc, dont show sendrequest form on docpage

fix unit tests
This commit is contained in:
lukas 2021-05-23 14:21:44 +02:00
parent 31ad6ec1e5
commit b59b6a17f4
5 changed files with 188 additions and 16 deletions

View File

@ -5,13 +5,13 @@ import (
) )
func cleanUp() { func cleanUp() {
handlers = nil handlers = make(map[string]Handler)
} }
func TestAddHandler(t *testing.T) { func TestAddHandler(t *testing.T) {
cleanUp() cleanUp()
AddHandler("test", ActorNode, nil, func() []byte { AddHandler("test", ActorNode, func(info *HandlerInfo) []byte {
return nil return nil
}) })
if len(handlers) != 1 { if len(handlers) != 1 {
@ -23,13 +23,13 @@ func TestCallOfHandler(t *testing.T) {
cleanUp() cleanUp()
i := 0 i := 0
AddHandler("test", ActorNode, nil, func() []byte { AddHandler("test", ActorNode, func(info *HandlerInfo) []byte {
i++ i++
return nil return nil
}) })
// simulate the call of the api // simulate the call of the api
handleAPICall("test", "", ActorNode) handleAPICall("test", "", ActorNode, nil)
if i != 1 { if i != 1 {
t.Errorf("Unexpected number of Lambda calls : %d/1", i) t.Errorf("Unexpected number of Lambda calls : %d/1", i)
@ -39,26 +39,32 @@ func TestCallOfHandler(t *testing.T) {
func TestDecodingOfArguments(t *testing.T) { func TestDecodingOfArguments(t *testing.T) {
cleanUp() cleanUp()
var myvar struct { AddHandler("test", ActorNode, func(info *HandlerInfo) []byte {
var args struct {
Test string Test string
TestInt int TestInt int
} }
AddHandler("test", ActorNode, &myvar, func() []byte { err := FillStruct(&args, info.Data)
if err != nil {
t.Errorf("Error parsing args: %s", err.Error())
return nil
}
if args.TestInt != 42 || args.Test != "myString" {
t.Errorf("Wrong parsing of argument parameters : %d/42 - %s/myString", args.TestInt, args.Test)
}
return nil return nil
}) })
// simulate the call of the api // simulate the call of the api
handleAPICall("test", `{"Test":"myString","TestInt":42}`, ActorNode) handleAPICall("test", `{"Test":"myString","TestInt":42}`, ActorNode, nil)
if myvar.TestInt != 42 || myvar.Test != "myString" {
t.Errorf("Wrong parsing of argument parameters : %d/42 - %s/myString", myvar.TestInt, myvar.Test)
}
} }
func TestNoHandlerCovers(t *testing.T) { func TestNoHandlerCovers(t *testing.T) {
cleanUp() cleanUp()
ret := handleAPICall("test", "", ActorNode) ret := handleAPICall("test", "", ActorNode, nil)
if ret != nil { if ret != nil {
t.Error("Expect nil return within unhandled api action") t.Error("Expect nil return within unhandled api action")

View File

@ -18,11 +18,42 @@ func AddSettingsHandlers() {
} }
func getSettingsFromDB() { func getSettingsFromDB() {
/**
* @api {post} /api/settings [loadGeneralSettings]
* @apiDescription Get the settings object
* @apiName loadGeneralSettings
* @apiGroup Settings
*
* @apiSuccess {Object} Settings Settings object
* @apiSuccess {string} Settings.VideoPath webserver path to the videos
* @apiSuccess {string} Settings.EpisodePath webserver path to the tvshows
* @apiSuccess {string} Settings.MediacenterName overall name of the mediacenter
* @apiSuccess {string} Settings.Password new server password (-1 if no password set)
* @apiSuccess {bool} Settings.TMDBGrabbing TMDB grabbing support to grab tag info and thumbnails
* @apiSuccess {bool} Settings.DarkMode Darkmode enabled?
* @apiSuccess {uint32} Settings.VideoNr total number of videos
* @apiSuccess {float32} Settings.DBSize total size of database
* @apiSuccess {uint32} Settings.DifferentTags number of different tags available
* @apiSuccess {uint32} Settings.TagsAdded number of different tags added to videos
* @apiSuccess {string} Settings.PathPrefix
*/
AddHandler("loadGeneralSettings", SettingsNode, func(info *HandlerInfo) []byte { AddHandler("loadGeneralSettings", SettingsNode, func(info *HandlerInfo) []byte {
result := database.GetSettings() result := database.GetSettings()
return jsonify(result) return jsonify(result)
}) })
/**
* @api {post} /api/settings [loadInitialData]
* @apiDescription load startdata to display on homepage
* @apiName loadInitialData
* @apiGroup Settings
*
* @apiSuccess {string} VideoPath webserver path to the videos
* @apiSuccess {string} EpisodePath webserver path to the tvshows
* @apiSuccess {string} MediacenterName overall name of the mediacenter
* @apiSuccess {string} Pasword new server password (-1 if no password set)
* @apiSuccess {bool} DarkMode Darkmode enabled?
*/
AddHandler("loadInitialData", SettingsNode, func(info *HandlerInfo) []byte { AddHandler("loadInitialData", SettingsNode, func(info *HandlerInfo) []byte {
sett := settings.LoadSettings() sett := settings.LoadSettings()
@ -54,7 +85,24 @@ func getSettingsFromDB() {
} }
func saveSettingsToDB() { func saveSettingsToDB() {
/**
* @api {post} /api/settings [saveGeneralSettings]
* @apiDescription Save the global settings provided
* @apiName saveGeneralSettings
* @apiGroup Settings
*
* @apiParam {Object} Settings Settings object
* @apiParam {string} Settings.VideoPath webserver path to the videos
* @apiParam {string} Settings.EpisodePath webserver path to the tvshows
* @apiParam {string} Settings.MediacenterName overall name of the mediacenter
* @apiParam {string} Settings.Password new server password (-1 if no password set)
* @apiParam {bool} Settings.TMDBGrabbing TMDB grabbing support to grab tag info and thumbnails
* @apiParam {bool} Settings.DarkMode Darkmode enabled?
*
* @apiSuccess {string} result 'success' if successfully or error message if not
*/
AddHandler("saveGeneralSettings", SettingsNode, func(info *HandlerInfo) []byte { AddHandler("saveGeneralSettings", SettingsNode, func(info *HandlerInfo) []byte {
// todo correct type here!
var args struct { var args struct {
Settings types.SettingsType Settings types.SettingsType
} }
@ -80,16 +128,38 @@ func saveSettingsToDB() {
// methods for handling reindexing and cleanup of db gravity // methods for handling reindexing and cleanup of db gravity
func reIndexHandling() { func reIndexHandling() {
/**
* @api {post} /api/settings [startReindex]
* @apiDescription Start Database video reindex Job
* @apiName startReindex
* @apiGroup Settings
*
* @apiSuccess {string} result 'success' if successfully or error message if not
*/
AddHandler("startReindex", SettingsNode, func(info *HandlerInfo) []byte { AddHandler("startReindex", SettingsNode, func(info *HandlerInfo) []byte {
videoparser.StartReindex() videoparser.StartReindex()
return database.ManualSuccessResponse(nil) return database.ManualSuccessResponse(nil)
}) })
/**
* @api {post} /api/settings [startTVShowReindex]
* @apiDescription Start Database TVShow reindex job
* @apiName startTVShowReindex
* @apiGroup Settings
*
* @apiSuccess {string} result 'success' if successfully or error message if not
*/
AddHandler("startTVShowReindex", SettingsNode, func(info *HandlerInfo) []byte { AddHandler("startTVShowReindex", SettingsNode, func(info *HandlerInfo) []byte {
videoparser.StartTVShowReindex() videoparser.StartTVShowReindex()
return database.ManualSuccessResponse(nil) return database.ManualSuccessResponse(nil)
}) })
/**
* @api {post} /api/settings [cleanupGravity]
* @apiDescription Start Database cleanup job
* @apiName cleanupGravity
* @apiGroup Settings
*/
AddHandler("cleanupGravity", SettingsNode, func(info *HandlerInfo) []byte { AddHandler("cleanupGravity", SettingsNode, func(info *HandlerInfo) []byte {
videoparser.StartCleanup() videoparser.StartCleanup()
return nil return nil

View File

@ -6,12 +6,36 @@ import (
) )
func AddTvshowHandlers() { func AddTvshowHandlers() {
/**
* @api {post} /api/tvshow [getTVShows]
* @apiDescription get all available tv shows
* @apiName getTVShows
* @apiGroup TVshow
*
* @apiSuccess {Object[]} .
* @apiSuccess {uint32} .Id tvshow id
* @apiSuccess {string} .Name tvshow name
*/
AddHandler("getTVShows", TVShowNode, func(info *HandlerInfo) []byte { AddHandler("getTVShows", TVShowNode, func(info *HandlerInfo) []byte {
query := "SELECT id, name FROM tvshow" query := "SELECT id, name FROM tvshow"
rows := database.Query(query) rows := database.Query(query)
return jsonify(readTVshowsFromResultset(rows)) return jsonify(readTVshowsFromResultset(rows))
}) })
/**
* @api {post} /api/tvshow [getEpisodes]
* @apiDescription get all Episodes of a TVShow
* @apiName getEpisodes
* @apiGroup TVshow
*
* @apiParam {uint32} ShowID id of tvshow to get episodes from
*
* @apiSuccess {Object[]} .
* @apiSuccess {uint32} .ID episode id
* @apiSuccess {string} .Name episode name
* @apiSuccess {uint8} .Season Season number
* @apiSuccess {uint8} .Episode Episode number
*/
AddHandler("getEpisodes", TVShowNode, func(info *HandlerInfo) []byte { AddHandler("getEpisodes", TVShowNode, func(info *HandlerInfo) []byte {
var args struct { var args struct {
ShowID uint32 ShowID uint32
@ -46,6 +70,20 @@ func AddTvshowHandlers() {
return jsonify(episodes) return jsonify(episodes)
}) })
/**
* @api {post} /api/tvshow [loadEpisode]
* @apiDescription load all info of episode
* @apiName loadEpisode
* @apiGroup TVshow
*
* @apiParam {uint32} ID id of episode
*
* @apiSuccess {uint32} TVShowID episode id
* @apiSuccess {string} Name episode name
* @apiSuccess {uint8} Season Season number
* @apiSuccess {uint8} Episode Episode number
* @apiSuccess {string} Path webserver path of video file
*/
AddHandler("loadEpisode", TVShowNode, func(info *HandlerInfo) []byte { AddHandler("loadEpisode", TVShowNode, func(info *HandlerInfo) []byte {
var args struct { var args struct {
ID uint32 ID uint32
@ -83,6 +121,16 @@ WHERE tvshow_episodes.id=%d`, args.ID)
return jsonify(ret) return jsonify(ret)
}) })
/**
* @api {post} /api/tvshow [readThumbnail]
* @apiDescription Load Thubnail of specific episode
* @apiName readThumbnail
* @apiGroup TVshow
*
* @apiParam {int} Id id of episode to load thumbnail
*
* @apiSuccess {string} . Base64 encoded Thubnail
*/
AddHandler("readThumbnail", TVShowNode, func(info *HandlerInfo) []byte { AddHandler("readThumbnail", TVShowNode, func(info *HandlerInfo) []byte {
var args struct { var args struct {
Id int Id int

View File

@ -13,6 +13,17 @@ func AddTagHandlers() {
} }
func deleteFromDB() { func deleteFromDB() {
/**
* @api {post} /api/tags [deleteTag]
* @apiDescription Start Database video reindex Job
* @apiName deleteTag
* @apiGroup Tags
*
* @apiParam {bool} [Force] force delete tag with its constraints
* @apiParam {int} TagId id of tag to delete
*
* @apiSuccess {string} result 'success' if successfully or error message if not
*/
AddHandler("deleteTag", TagNode, func(info *HandlerInfo) []byte { AddHandler("deleteTag", TagNode, func(info *HandlerInfo) []byte {
var args struct { var args struct {
TagId int TagId int
@ -44,7 +55,7 @@ func deleteFromDB() {
// check with regex if its the key constraint error // check with regex if its the key constraint error
r := regexp.MustCompile("^.*a foreign key constraint fails.*$") r := regexp.MustCompile("^.*a foreign key constraint fails.*$")
if r.MatchString(err.Error()) { if r.MatchString(err.Error()) {
return []byte(`{"result":"not empty tag"}`) return database.ManualSuccessResponse(fmt.Errorf("not empty tag"))
} else { } else {
return database.ManualSuccessResponse(err) return database.ManualSuccessResponse(err)
} }
@ -53,6 +64,16 @@ func deleteFromDB() {
} }
func getFromDB() { func getFromDB() {
/**
* @api {post} /api/tags [getAllTags]
* @apiDescription get all available Tags
* @apiName getAllTags
* @apiGroup Tags
*
* @apiSuccess {Object[]} array of tag objects
* @apiSuccess {uint32} TagId
* @apiSuccess {string} TagName name of the Tag
*/
AddHandler("getAllTags", TagNode, func(info *HandlerInfo) []byte { AddHandler("getAllTags", TagNode, func(info *HandlerInfo) []byte {
query := "SELECT tag_id,tag_name from tags" query := "SELECT tag_id,tag_name from tags"
return jsonify(readTagsFromResultset(database.Query(query))) return jsonify(readTagsFromResultset(database.Query(query)))
@ -60,6 +81,16 @@ func getFromDB() {
} }
func addToDB() { func addToDB() {
/**
* @api {post} /api/tags [createTag]
* @apiDescription create a new tag
* @apiName createTag
* @apiGroup Tags
*
* @apiParam {string} TagName name of the tag
*
* @apiSuccess {string} result 'success' if successfully or error message if not
*/
AddHandler("createTag", TagNode, func(info *HandlerInfo) []byte { AddHandler("createTag", TagNode, func(info *HandlerInfo) []byte {
var args struct { var args struct {
TagName string TagName string
@ -73,6 +104,17 @@ func addToDB() {
return database.SuccessQuery(query, args.TagName) return database.SuccessQuery(query, args.TagName)
}) })
/**
* @api {post} /api/tags [addTag]
* @apiDescription Add new tag to video
* @apiName addTag
* @apiGroup Tags
*
* @apiParam {int} TagId Tag id to add to video
* @apiParam {int} MovieId Video Id of video to add tag to
*
* @apiSuccess {string} result 'success' if successfully or error message if not
*/
AddHandler("addTag", TagNode, func(info *HandlerInfo) []byte { AddHandler("addTag", TagNode, func(info *HandlerInfo) []byte {
var args struct { var args struct {
MovieId int MovieId int

View File

@ -79,5 +79,11 @@
"prettier-config": "^1.0.0", "prettier-config": "^1.0.0",
"react-scripts": "4.0.3", "react-scripts": "4.0.3",
"apidoc": "^0.28.1" "apidoc": "^0.28.1"
},
"apidoc":{
"name": "OpenMediaCenter",
"description": "API Documentation of OpenMediaCenter",
"title": "OpenMediaCenter Doc",
"sampleUrl": null
} }
} }