Passed
Push — master ( 16f953...0e3ad4 )
by Matěj
01:13
created

tests.base.LocalNxcUserMixin.setUp()   A

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nop 1
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
import os
2
import random
3
import string
4
from unittest import TestCase
5
6
from NextCloud import NextCloud
7
8
NEXTCLOUD_VERSION = os.environ.get('NEXTCLOUD_VERSION')
9
NEXTCLOUD_URL = "http://{}:80".format(os.environ.get('NEXTCLOUD_HOSTNAME', 'localhost'))
10
NEXTCLOUD_USERNAME = os.environ.get('NEXTCLOUD_ADMIN_USER', 'admin')
11
NEXTCLOUD_PASSWORD = os.environ.get('NEXTCLOUD_ADMIN_PASSWORD', 'admin')
12
13
14
class BaseTestCase(TestCase):
15
16
    SUCCESS_CODE = 100
17
    INVALID_INPUT_CODE = 101
18
    USERNAME_ALREADY_EXISTS_CODE = 102
19
    UNKNOWN_ERROR_CODE = 103
20
    NOT_FOUND_CODE = 404
21
22
    SHARE_API_SUCCESS_CODE = 200  # share api has different code
23
24
    def setUp(self):
25
        self.username = NEXTCLOUD_USERNAME
26
        self.nxc = NextCloud(NEXTCLOUD_URL, NEXTCLOUD_USERNAME, NEXTCLOUD_PASSWORD, json_output=True)
27
28
    def create_new_user(self, username_prefix, password=None):
29
        """ Helper method to create new user """
30
        new_user_username = username_prefix + self.get_random_string(length=4)
31
        user_password = password or self.get_random_string(length=8)
32
        res = self.nxc.add_user(new_user_username, user_password)
33
        assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE
34
        return new_user_username
35
36
    def delete_user(self, username):
37
        """ Helper method to delete user by username """
38
        res = self.nxc.delete_user(username)
39
        assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE
40
41
    def clear(self, nxc=None, user_ids=None, group_ids=None, share_ids=None, group_folder_ids=None):
42
        """
43
        Delete created objects during tests
44
45
        Args:
46
            nxc (NextCloud object): (optional) Nextcloud instance, if not given - self.nxc is used
47
            user_ids (list): list of user ids
48
            group_ids (list): list of group ids
49
            share_ids (list): list of shares ids
50
51
        Returns:
52
53
        """
54
        nxc = nxc or self.nxc
55
        if share_ids:
56
            for share_id in share_ids:
57
                res = nxc.delete_share(share_id)
58
                assert res['ocs']['meta']['statuscode'] == self.SHARE_API_SUCCESS_CODE
59
        if group_ids:
60
            for group_id in group_ids:
61
                res = nxc.delete_group(group_id)
62
                assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE
63
        if user_ids:
64
            for user_id in user_ids:
65
                res = nxc.delete_user(user_id)
66
                assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE
67
        if group_folder_ids:
68
            for group_folder_id in group_folder_ids:
69
                res = nxc.delete_group_folder(group_folder_id)
70
                assert res['ocs']['meta']['statuscode'] == self.SUCCESS_CODE
71
72
    def get_random_string(self, length=6):
73
        """ Helper method to get random string with set length  """
74
        return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(length))
75
76
77
class LocalNxcUserMixin(object):
78
    """Mixin to create new clean NextCloud admin user for tests and delete it on tear down"""
79
80
    def setUp(self):
81
        super(LocalNxcUserMixin, self).setUp()
82
        user_password = self.get_random_string(length=8)
83
        self.user_username = self.create_new_user('test_user_', password=user_password)
84
        self.nxc_local = self.nxc_local = NextCloud(NEXTCLOUD_URL, self.user_username, user_password, json_output=True)
85
        # make user admin
86
        self.nxc.add_to_group(self.user_username, 'admin')
87
88
    def tearDown(self):
89
        self.nxc.delete_user(self.user_username)
90