mirror of
https://gitlab.bertha.cloud/partitio/Nextcloud-Partitio/gonextcloud
synced 2024-11-25 09:46:24 +00:00
Tests restructuration and AppsConfig implementation
This commit is contained in:
parent
f40f6afa5c
commit
1cc321d657
106
appsconfig.go
Normal file
106
appsconfig.go
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
package gonextcloud
|
||||||
|
|
||||||
|
import (
|
||||||
|
req "github.com/levigross/grequests"
|
||||||
|
"gitlab.adphi.fr/partitio/Nextcloud-Partitio/gonextcloud/types"
|
||||||
|
"net/http"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
//AppsConfigList lists all the available apps
|
||||||
|
func (c *Client) AppsConfigList() (apps []string, err error) {
|
||||||
|
res, err := c.baseRequest(http.MethodGet, routes.appsConfig, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var r types.AppConfigResponse
|
||||||
|
res.JSON(&r)
|
||||||
|
return r.Ocs.Data.Data, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//AppsConfigKeys returns the app's config keys
|
||||||
|
func (c *Client) AppsConfigKeys(id string) (keys []string, err error) {
|
||||||
|
res, err := c.baseRequest(http.MethodGet, routes.appsConfig, nil, id)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var r types.AppConfigResponse
|
||||||
|
res.JSON(&r)
|
||||||
|
return r.Ocs.Data.Data, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//AppsConfigValue get the config value for the given app's key
|
||||||
|
func (c *Client) AppsConfigValue(id, key string) (string, error) {
|
||||||
|
res, err := c.baseRequest(http.MethodGet, routes.appsConfig, nil, id, key)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
var r types.AppcConfigValueResponse
|
||||||
|
res.JSON(&r)
|
||||||
|
return r.Ocs.Data.Data, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//AppsConfigSetValue set the config value for the given app's key
|
||||||
|
func (c *Client) AppsConfigSetValue(id, key, value string) error {
|
||||||
|
ro := &req.RequestOptions{
|
||||||
|
Data: map[string]string{
|
||||||
|
"value": value,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
_, err := c.baseRequest(http.MethodPost, routes.appsConfig, ro, id, key)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
//AppsConfigDeleteValue delete the config value and (!! be careful !!) the key
|
||||||
|
func (c *Client) AppsConfigDeleteValue(id, key, value string) error {
|
||||||
|
_, err := c.baseRequest(http.MethodDelete, routes.appsConfig, nil, id, key)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
//AppsConfig returns all apps AppConfigDetails
|
||||||
|
func (c *Client) AppsConfig() (map[string]map[string]string, error) {
|
||||||
|
config := make(map[string]map[string]string)
|
||||||
|
var err error
|
||||||
|
appsIDs, err := c.AppsConfigList()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(len(appsIDs))
|
||||||
|
for i := range appsIDs {
|
||||||
|
go func(id string) {
|
||||||
|
defer wg.Done()
|
||||||
|
d, err := c.AppsConfigDetails(id)
|
||||||
|
if err == nil {
|
||||||
|
config[id] = d
|
||||||
|
}
|
||||||
|
}(appsIDs[i])
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
return config, err
|
||||||
|
}
|
||||||
|
|
||||||
|
//AppsConfigDetails returns all the config's key, values pair of the app
|
||||||
|
func (c *Client) AppsConfigDetails(appID string) (map[string]string, error) {
|
||||||
|
config := make(map[string]string)
|
||||||
|
var err error
|
||||||
|
var ks []string
|
||||||
|
ks, err = c.AppsConfigKeys(appID)
|
||||||
|
if err != nil {
|
||||||
|
return config, err
|
||||||
|
}
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(len(ks))
|
||||||
|
for i := range ks {
|
||||||
|
go func(key string) {
|
||||||
|
defer wg.Done()
|
||||||
|
var v string
|
||||||
|
v, err = c.AppsConfigValue(appID, key)
|
||||||
|
if err == nil {
|
||||||
|
config[key] = v
|
||||||
|
}
|
||||||
|
}(ks[i])
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
return config, err
|
||||||
|
}
|
56
appsconfig_test.go
Normal file
56
appsconfig_test.go
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package gonextcloud
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAppsConfig(t *testing.T) {
|
||||||
|
c = nil
|
||||||
|
if err := initClient(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
ac, err := c.AppsConfig()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.NotEmpty(t, ac)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppsConfigList(t *testing.T) {
|
||||||
|
c = nil
|
||||||
|
if err := initClient(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
a, err := c.AppsConfigList()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Contains(t, a, "files")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppsConfigKeys(t *testing.T) {
|
||||||
|
c = nil
|
||||||
|
if err := initClient(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
ks, err := c.AppsConfigKeys("activity")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Contains(t, ks, "enabled")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppsConfigValue(t *testing.T) {
|
||||||
|
c = nil
|
||||||
|
if err := initClient(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
k, err := c.AppsConfigValue("files", "enabled")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "yes", k)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppConfigDetails(t *testing.T) {
|
||||||
|
c = nil
|
||||||
|
if err := initClient(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
d, err := c.AppsConfigDetails("activity")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.NotEmpty(t, d)
|
||||||
|
}
|
@ -463,72 +463,6 @@ var (
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
groupFoldersTests = []struct {
|
|
||||||
string
|
|
||||||
test
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
"TestGroupFoldersCreate",
|
|
||||||
func(t *testing.T) {
|
|
||||||
// Recreate client
|
|
||||||
var err error
|
|
||||||
groupID, err = c.GroupFoldersCreate("API")
|
|
||||||
assert.NoError(t, err)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"TestGroupFoldersList",
|
|
||||||
func(t *testing.T) {
|
|
||||||
gfs, err := c.GroupFoldersList()
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotNil(t, gfs[groupID])
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"TestGroupFolders",
|
|
||||||
func(t *testing.T) {
|
|
||||||
gf, err := c.GroupFolders(groupID)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotNil(t, gf)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"TestGroupFolderRename",
|
|
||||||
func(t *testing.T) {
|
|
||||||
err := c.GroupFoldersRename(groupID, "API_Renamed")
|
|
||||||
assert.NoError(t, err)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"TestGroupFoldersAddGroup",
|
|
||||||
func(t *testing.T) {
|
|
||||||
err := c.GroupFoldersAddGroup(groupID, "admin")
|
|
||||||
assert.NoError(t, err)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"TestGroupFoldersSetGroupPermissions",
|
|
||||||
func(t *testing.T) {
|
|
||||||
err := c.GroupFoldersSetGroupPermissions(groupID, "admin", types.ReadPermission)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"TestGroupFoldersSetQuota",
|
|
||||||
func(t *testing.T) {
|
|
||||||
err := c.GroupFoldersSetQuota(groupID, 100)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"TestGroupFolderRemoveGroup",
|
|
||||||
func(t *testing.T) {
|
|
||||||
err := c.GroupFoldersRemoveGroup(groupID, "admin")
|
|
||||||
assert.NoError(t, err)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestClient(t *testing.T) {
|
func TestClient(t *testing.T) {
|
||||||
@ -540,16 +474,6 @@ func TestClient(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGroupFolders(t *testing.T) {
|
|
||||||
c = nil
|
|
||||||
if err := initClient(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
for _, tt := range groupFoldersTests {
|
|
||||||
t.Run(tt.string, tt.test)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestUserCreateWithoutPassword(t *testing.T) {
|
func TestUserCreateWithoutPassword(t *testing.T) {
|
||||||
c = nil
|
c = nil
|
||||||
if err := initClient(); err != nil {
|
if err := initClient(); err != nil {
|
||||||
|
85
groupfolders_test.go
Normal file
85
groupfolders_test.go
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
package gonextcloud
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"gitlab.adphi.fr/partitio/Nextcloud-Partitio/gonextcloud/types"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
groupFoldersTests = []struct {
|
||||||
|
string
|
||||||
|
test
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"TestGroupFoldersCreate",
|
||||||
|
func(t *testing.T) {
|
||||||
|
// Recreate client
|
||||||
|
var err error
|
||||||
|
groupID, err = c.GroupFoldersCreate("API")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"TestGroupFoldersList",
|
||||||
|
func(t *testing.T) {
|
||||||
|
gfs, err := c.GroupFoldersList()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.NotNil(t, gfs[groupID])
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"TestGroupFolders",
|
||||||
|
func(t *testing.T) {
|
||||||
|
gf, err := c.GroupFolders(groupID)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.NotNil(t, gf)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"TestGroupFolderRename",
|
||||||
|
func(t *testing.T) {
|
||||||
|
err := c.GroupFoldersRename(groupID, "API_Renamed")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"TestGroupFoldersAddGroup",
|
||||||
|
func(t *testing.T) {
|
||||||
|
err := c.GroupFoldersAddGroup(groupID, "admin")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"TestGroupFoldersSetGroupPermissions",
|
||||||
|
func(t *testing.T) {
|
||||||
|
err := c.GroupFoldersSetGroupPermissions(groupID, "admin", types.ReadPermission)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"TestGroupFoldersSetQuota",
|
||||||
|
func(t *testing.T) {
|
||||||
|
err := c.GroupFoldersSetQuota(groupID, 100)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"TestGroupFolderRemoveGroup",
|
||||||
|
func(t *testing.T) {
|
||||||
|
err := c.GroupFoldersRemoveGroup(groupID, "admin")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGroupFolders(t *testing.T) {
|
||||||
|
c = nil
|
||||||
|
if err := initClient(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
for _, tt := range groupFoldersTests {
|
||||||
|
t.Run(tt.string, tt.test)
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,7 @@ type Routes struct {
|
|||||||
monitor *url.URL
|
monitor *url.URL
|
||||||
shares *url.URL
|
shares *url.URL
|
||||||
groupfolders *url.URL
|
groupfolders *url.URL
|
||||||
|
appsConfig *url.URL
|
||||||
}
|
}
|
||||||
|
|
||||||
const badRequest = 998
|
const badRequest = 998
|
||||||
@ -25,5 +26,6 @@ var (
|
|||||||
monitor: &url.URL{Path: apiPath.Path + "/apps/serverinfo/api/v1/info"},
|
monitor: &url.URL{Path: apiPath.Path + "/apps/serverinfo/api/v1/info"},
|
||||||
shares: &url.URL{Path: apiPath.Path + "/apps/files_sharing/api/v1/shares"},
|
shares: &url.URL{Path: apiPath.Path + "/apps/files_sharing/api/v1/shares"},
|
||||||
groupfolders: &url.URL{Path: "apps/groupfolders/folders"},
|
groupfolders: &url.URL{Path: "apps/groupfolders/folders"},
|
||||||
|
appsConfig: &url.URL{Path: apiPath.Path + "/apps/provisioning_api/api/v1/config/apps"},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -90,6 +90,24 @@ type AppResponse struct {
|
|||||||
} `json:"ocs"`
|
} `json:"ocs"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AppConfigResponse struct {
|
||||||
|
Ocs struct {
|
||||||
|
Meta Meta `json:"meta"`
|
||||||
|
Data struct {
|
||||||
|
Data []string `json:"data"`
|
||||||
|
} `json:"data"`
|
||||||
|
} `json:"ocs"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AppcConfigValueResponse struct {
|
||||||
|
Ocs struct {
|
||||||
|
Meta Meta `json:"meta"`
|
||||||
|
Data struct {
|
||||||
|
Data string `json:"data"`
|
||||||
|
} `json:"data"`
|
||||||
|
} `json:"ocs"`
|
||||||
|
}
|
||||||
|
|
||||||
//CapabilitiesResponse
|
//CapabilitiesResponse
|
||||||
type CapabilitiesResponse struct {
|
type CapabilitiesResponse struct {
|
||||||
Ocs struct {
|
Ocs struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user