diff --git a/.gitignore b/.gitignore index 7e96f2c..9553194 100644 --- a/.gitignore +++ b/.gitignore @@ -82,9 +82,6 @@ celerybeat-schedule # SageMath parsed files *.sage.py -# dotenv -.env - # virtualenv .venv venv/ diff --git a/NextCloud.py b/NextCloud.py index 0324d9c..a274f0a 100644 --- a/NextCloud.py +++ b/NextCloud.py @@ -92,6 +92,7 @@ def __init__(self, endpoint, user, password, js=False): "Activity": Activity(requester), "Notifications": Notifications(requester), "UserLDAP": UserLDAP(requester), + "Capabilities": Capabilities(requester), } for name, location in PUBLIC_API_NAME_CLASS_MAP.items(): setattr(self, name, getattr(self.functionality[location], name)) @@ -112,6 +113,15 @@ def requester(self): return self._requester +class Capabilities(WithRequester): + API_URL = "/ocs/v1.php/cloud/capabilities" + + @nextcloud_method + def get_capabilities(self): + """ Obtain capabilities provided by the Nextcloud server and its apps """ + return self.requester.get() + + class GroupFolders(WithRequester): API_URL = "/apps/groupfolders/folders" diff --git a/nextcloud/Dockerfile b/nextcloud/Dockerfile index ce82b35..504fa43 100644 --- a/nextcloud/Dockerfile +++ b/nextcloud/Dockerfile @@ -1,4 +1,6 @@ -FROM nextcloud:apache +ARG NEXTCLOUD_VERSION + +FROM nextcloud:$NEXTCLOUD_VERSION-apache RUN apt-get update && apt-get install wget && apt-get clean RUN wget https://github.com/nextcloud/groupfolders/releases/download/v2.0.2/groupfolders-2.0.2.tar.gz -P /tmp \ diff --git a/tests/.env b/tests/.env new file mode 100644 index 0000000..695ad37 --- /dev/null +++ b/tests/.env @@ -0,0 +1,11 @@ +POSTGRES_USER=postgres +POSTGRES_PASSWORD=secret +POSTGRES_DB=nextcloud +POSTGRES_HOST=db + +NEXTCLOUD_VERSION=14 +NEXTCLOUD_HOSTNAME=app +NEXTCLOUD_ADMIN_USER=admin +NEXTCLOUD_ADMIN_PASSWORD=admin + +NEXTCLOUD_HOST=app diff --git a/tests/base.py b/tests/base.py index b54a47e..380c85f 100644 --- a/tests/base.py +++ b/tests/base.py @@ -5,9 +5,10 @@ from NextCloud import NextCloud -NEXTCLOUD_URL = "http://{}:80".format(os.environ['NEXTCLOUD_HOST']) -NEXTCLOUD_USERNAME = os.environ.get('NEXTCLOUD_USERNAME') -NEXTCLOUD_PASSWORD = os.environ.get('NEXTCLOUD_PASSWORD') +NEXTCLOUD_VERSION = os.environ.get('NEXTCLOUD_VERSION') +NEXTCLOUD_URL = "http://{}:80".format(os.environ['NEXTCLOUD_HOSTNAME']) +NEXTCLOUD_USERNAME = os.environ.get('NEXTCLOUD_ADMIN_USER') +NEXTCLOUD_PASSWORD = os.environ.get('NEXTCLOUD_ADMIN_PASSWORD') class BaseTestCase(TestCase): diff --git a/tests/docker-compose.yml b/tests/docker-compose.yml index 3fbb305..dffae4f 100644 --- a/tests/docker-compose.yml +++ b/tests/docker-compose.yml @@ -1,50 +1,31 @@ version: '3' services: - db: - image: postgres:9.6-alpine - restart: always - networks: - - backend - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: secret - app: build: context: ../nextcloud dockerfile: Dockerfile - restart: always + args: + NEXTCLOUD_VERSION: ${NEXTCLOUD_VERSION} networks: backend: - aliases: - - app - ports: - - 8080:80 environment: - POSTGRES_DB: 'nextcloud' - POSTGRES_USER: 'postgres' - POSTGRES_PASSWORD: 'secret' - POSTGRES_HOST: 'db' - - NEXTCLOUD_TRUSTED_DOMAINS: "app" - NEXTCLOUD_ADMIN_USER: "admin" - NEXTCLOUD_ADMIN_PASSWORD: "admin" - depends_on: - - db + - SQLITE_DATABASE=nextcloud + - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_HOSTNAME} + - NEXTCLOUD_ADMIN_USER + - NEXTCLOUD_ADMIN_PASSWORD python-api: build: context: ../ dockerfile: Dockerfile environment: - NEXTCLOUD_HOST: "app" - NEXTCLOUD_USERNAME: "admin" - NEXTCLOUD_PASSWORD: "admin" + - NEXTCLOUD_VERSION + - NEXTCLOUD_HOSTNAME + - NEXTCLOUD_ADMIN_USER + - NEXTCLOUD_ADMIN_PASSWORD networks: backend: - aliases: - - python-api volumes: - ../:/usr/src/app diff --git a/tests/test_capabilities.py b/tests/test_capabilities.py new file mode 100644 index 0000000..13e227a --- /dev/null +++ b/tests/test_capabilities.py @@ -0,0 +1,9 @@ +from .base import BaseTestCase, NEXTCLOUD_VERSION + + +class TestCapabilities(BaseTestCase): + + def test_get_capabilities(self): + res = self.nxc.get_capabilities() + assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE + assert str(res['ocs']['data']['version']['major']) == NEXTCLOUD_VERSION diff --git a/tests/test_group_folders.py b/tests/test_group_folders.py index 55eaa9d..9f08a8f 100644 --- a/tests/test_group_folders.py +++ b/tests/test_group_folders.py @@ -26,7 +26,7 @@ def test_crud_group_folder(self): # retrieve single folder res = self.nxc.get_group_folder(group_folder_id) assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE - assert res['ocs']['data']['id'] == group_folder_id + assert str(res['ocs']['data']['id']) == str(group_folder_id) assert res['ocs']['data']['mount_point'] == folder_mount_point # rename group folder @@ -67,7 +67,7 @@ def test_grant_revoke_access_to_group_folder(self): # check that folder has this group res = self.nxc.get_group_folder(group_folder_id) - assert res['ocs']['data']['groups'] == {group_id: Permission.ALL} + assert res['ocs']['data']['groups'] == {group_id: str(Permission.ALL.value)} # revoke access res = self.nxc.revoke_access_to_group_folder(group_folder_id, group_id) @@ -97,7 +97,7 @@ def test_setting_folder_quotas(self): assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE and res['ocs']['data'] is True # check if quota changed res = self.nxc.get_group_folder(group_folder_id) - assert res['ocs']['data']['quota'] == QUOTA_ONE_GB + assert str(res['ocs']['data']['quota']) == str(QUOTA_ONE_GB) # clear self.clear(group_folder_ids=[group_folder_id]) @@ -124,7 +124,7 @@ def test_setting_folder_permissions(self): assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE and res['ocs']['data'] is True # check if permissions changed res = self.nxc.get_group_folder(group_folder_id) - assert res['ocs']['data']['groups'][group_id] == new_permission + assert str(res['ocs']['data']['groups'][group_id]) == str(new_permission) # clear self.clear(nxc=self.nxc, group_ids=[group_id], group_folder_ids=[group_folder_id])