예제 #1
0
class TestSearchByIdMethod(unittest.TestCase):
    def setUp(self):
        self.roles = Role(
            PropertyMock(url='test_url',
                         team='test_team',
                         signature='test_signature',
                         token='old_value',
                         verify=True,
                         r=Mock(return_value=(200, [{
                             'id': 'test_id'
                         }]))))
        self.id = 'test_id'

    def test_search_by_id_request(self):
        flag, response = self.roles.search_by_id(self.id)
        self.roles.root.r.assert_called_with(
            'GET',
            f'{self.roles.root.url}/api/v1/roles',
            body=None,
            headers=None,
            verify=self.roles.root.verify)
        self.assertTrue(flag)
        self.assertEqual(response, {'id': 'test_id'})

    def test_search_by_id_with_incorrect_id_type(self):
        with self.assertRaisesRegex(AssertionError, 'The ID must be a string'):
            self.roles.search_by_id(None)

    def test_search_by_id_with_empty_id_string(self):
        with self.assertRaisesRegex(AssertionError,
                                    'The ID must not be an empty string'):
            self.roles.search_by_id('')
예제 #2
0
 def setUp(self):
     self.roles = Role(
         PropertyMock(url='test_url',
                      team='test_team',
                      signature='test_signature',
                      token='old_value',
                      verify=True,
                      r=Mock(return_value=(200, {
                          'token': '123'
                      }))))
예제 #3
0
 def setUp(self):
     self.roles = Role(
         PropertyMock(url='test_url',
                      team='test_team',
                      signature='test_signature',
                      token='old_value',
                      verify=True,
                      r=Mock(return_value=(200, [{
                          'id': 'test_id'
                      }]))))
     self.id = 'test_id'
예제 #4
0
 def setUp(self):
     self.roles = Role(
         PropertyMock(url='test_url',
                      team='test_team',
                      signature='test_signature',
                      token='old_value',
                      verify=True,
                      r=Mock(return_value=(200, {
                          'token': '123'
                      }))))
     self.name = 'test'
     self.tabs = ['overview']
     self.permissions = {'bi': [1, 1, 0, 1]}
예제 #5
0
 def setUp(self):
     self.roles = Role(
         PropertyMock(url='test_url',
                      team='test_team',
                      signature='test_signature',
                      token='old_value',
                      verify=True,
                      dev_mode=True,
                      r=Mock(return_value=(200, {
                          'token': '123'
                      }))))
     self.id = 'test_id'
     self.data = {'a': 1, 'b': 2}
예제 #6
0
class TestGetAllMethod(unittest.TestCase):
    def setUp(self):
        self.roles = Role(
            PropertyMock(url='test_url',
                         team='test_team',
                         signature='test_signature',
                         token='old_value',
                         verify=True,
                         r=Mock(return_value=(200, {
                             'token': '123'
                         }))))

    def test_get_all_request(self):
        self.roles.get_all()
        self.roles.root.r.assert_called_with(
            'GET',
            f'{self.roles.root.url}/api/v1/roles',
            body=None,
            headers=None,
            verify=self.roles.root.verify)
예제 #7
0
class TestDeleteMethod(unittest.TestCase):
    def setUp(self):
        self.roles = Role(
            PropertyMock(url='test_url',
                         team='test_team',
                         signature='test_signature',
                         token='old_value',
                         verify=True,
                         r=Mock(return_value=(200, {
                             'token': '123'
                         }))))
        self.id = 'test_id'

    def test_delete_request(self):
        self.roles.delete(self.id)
        self.roles.root.r.assert_called_with(
            'DELETE',
            f'{self.roles.root.url}/api/v1/roles/{self.id}',
            body=None,
            headers=None,
            verify=self.roles.root.verify)

    def test_delete_with_incorrect_id_type(self):
        with self.assertRaisesRegex(AssertionError, 'The ID must be a string'):
            self.roles.delete(123)

    def test_delete_with_empty_id_string(self):
        with self.assertRaisesRegex(AssertionError,
                                    'The ID must not be an empty string'):
            self.roles.delete('')
예제 #8
0
class TestRawCreateMethod(unittest.TestCase):
    def setUp(self):
        self.roles = Role(
            PropertyMock(url='test_url',
                         team='test_team',
                         signature='test_signature',
                         token='old_value',
                         verify=True,
                         dev_mode=True,
                         r=Mock(return_value=(200, {
                             'token': '123'
                         }))))
        self.data = {'a': 1, 'b': 2}

    def test_raw_create_request(self):
        self.roles.raw_create(self.data)
        self.roles.root.r.assert_called_with(
            'POST',
            f'{self.roles.root.url}/api/v1/roles',
            json.dumps(self.data),
            headers=None,
            verify=self.roles.root.verify)

    def test_raw_create_with_incorrect_data_type(self):
        with self.assertRaisesRegex(AssertionError,
                                    'The data type must be a dictionary'):
            self.roles.raw_create(123)

    def test_raw_create_with_empty_dict(self):
        with self.assertRaisesRegex(
                AssertionError, 'Role data must not be an empty dictionary'):
            self.roles.raw_create({})
예제 #9
0
 def setUp(self):
     self.roles = Role(
         PropertyMock(url='test_url',
                      team='test_team',
                      signature='test_signature',
                      token='old_value',
                      verify=True,
                      r=Mock(return_value=(200, {
                          'token': '123'
                      }))))
     self.old_data = {
         'createdAt':
         1234567890,
         'createdBy':
         'test',
         'id':
         'role_id',
         'name':
         'old_name',
         'permissions': [{
             'api': 'roles',
             'create': True,
             'delete': True,
             'id': 'permission_id',
             'read': True,
             'update': True,
             'version': 1
         }],
         'tabs': ['overview'],
         'updatedAt':
         1234567890,
         'updatedBy':
         'test',
         'version':
         1
     }
     self.new_name = 'test'
     self.new_tabs = ['overview']
     self.new_permissions = {'bi': [1, 1, 0, 1]}
예제 #10
0
    def __init__(self, **settings):
        self.log = logging.getLogger(__name__)
        self.log.debug('Client has been init with %s', settings)

        assert 'url' in settings, 'url is required parameter'
        assert isinstance(settings['url'], str), 'url value must be a string'
        assert 'team' in settings, 'team is required parameter'
        assert isinstance(settings['team'], str), 'team value must be a string'

        self.url = str(settings['url'])
        self.af_url = str(
            settings['custom_af_url']
        ) if 'custom_af_url' in settings else self.url + ':7499'
        self.team = str(settings['team'])
        self.api_user_id = str(
            settings['api_user_id']) if 'api_user_id' in settings else ''
        self.api_signature = str(
            settings['api_signature']) if 'api_signature' in settings else ''
        self.af_version = str(
            settings['af_version']) if 'af_version' in settings else 'v2.2'
        self.verify = bool(
            settings['verify']) if 'verify' in settings else True

        self.token = ''
        self.login_time = 0
        self.ttl = 840  # Session TTL == 14 mins

        self.auth = Auth(self)
        self.subchannels = Subchannel(self)
        self.lists = List(self)
        self.users = User(self)
        self.channels = Channel(self)
        self.policies = Policy(self)
        self.events = Event(self)
        self.roles = Role(self)
        self.abtests = ABTest(self)
        self.af = AFClient(self)
        self.cases = Case(self)
        self.settings = Settings(self)
        self.queues = Queue(self)
        self.sessions = Session(self)
        self.tech = Tech(self)
        self.bi = BusinessIntelligence(self)
        self.schema = Schema(self)
        self.currencies = Currency(self)
        self.geo = Geo(self)
        self.bins = Bin(self)
        self.reports = Report(self)
예제 #11
0
class TestUpdateMethod(unittest.TestCase):
    def setUp(self):
        self.roles = Role(
            PropertyMock(url='test_url',
                         team='test_team',
                         signature='test_signature',
                         token='old_value',
                         verify=True,
                         r=Mock(return_value=(200, {
                             'token': '123'
                         }))))
        self.old_data = {
            'createdAt':
            1234567890,
            'createdBy':
            'test',
            'id':
            'role_id',
            'name':
            'old_name',
            'permissions': [{
                'api': 'roles',
                'create': True,
                'delete': True,
                'id': 'permission_id',
                'read': True,
                'update': True,
                'version': 1
            }],
            'tabs': ['overview'],
            'updatedAt':
            1234567890,
            'updatedBy':
            'test',
            'version':
            1
        }
        self.new_name = 'test'
        self.new_tabs = ['overview']
        self.new_permissions = {'bi': [1, 1, 0, 1]}

    def test_update_request(self):
        self.roles.update(self.old_data, self.new_name, self.new_tabs,
                          self.new_permissions)
        self.roles.root.r.assert_called_with(
            'PUT',
            f'{self.roles.root.url}/api/v1/roles/{self.old_data["id"]}',
            json.dumps({
                "createdAt":
                1234567890,
                "createdBy":
                "test",
                "updatedAt":
                1234567890,
                "updatedBy":
                "test",
                "version":
                1,
                "name":
                "test",
                "tabs": ["overview"],
                "permissions": [{
                    "api": "bi",
                    "name": "",
                    "tabs": ["overview"],
                    "create": True,
                    "read": True,
                    "update": False,
                    "delete": True
                }]
            }),
            headers=None,
            verify=self.roles.root.verify)

    def test_update_with_incorrect_raw_old_type(self):
        with self.assertRaisesRegex(AssertionError,
                                    'Raw old data must be a dict'):
            self.roles.update(123, self.new_name, self.new_tabs,
                              self.new_permissions)

    def test_update_with_empty_raw_old_data(self):
        with self.assertRaisesRegex(
                AssertionError,
                'Raw old data must not be an empty dictionary'):
            self.roles.update({}, self.new_name, self.new_tabs,
                              self.new_permissions)

    def test_update_with_incorrect_new_name_type(self):
        with self.assertRaisesRegex(AssertionError,
                                    'Role name must be a string'):
            self.roles.update(self.old_data, 123, self.new_tabs,
                              self.new_permissions)

    def test_update_with_incorrect_new_tabs_type(self):
        with self.assertRaisesRegex(AssertionError, 'Tabs must be a list'):
            self.roles.update(self.old_data, self.new_name, 123,
                              self.new_permissions)

    def test_update_with_incorrect_new_permissions_type(self):
        with self.assertRaisesRegex(AssertionError,
                                    'Permissions must be a dict of list'):
            self.roles.update(self.old_data, self.new_name, self.new_tabs, 123)

    def test_update_with_unavailable_tab(self):
        with self.assertRaisesRegex(
                AssertionError,
                r"You are using unavailable tabs. List of tabs: "):
            self.roles.update(self.old_data, self.new_name, ['unavailable'],
                              self.new_permissions)

    def test_update_with_unavailable_permissions(self):
        with self.assertRaisesRegex(
                AssertionError,
                r"la is not available api. List of all available API: "):
            self.roles.update(self.old_data, self.new_name, ['unavailable'],
                              {'la': [1, 2, 3, 4]})
예제 #12
0
class TestCreateMethod(unittest.TestCase):
    def setUp(self):
        self.roles = Role(
            PropertyMock(url='test_url',
                         team='test_team',
                         signature='test_signature',
                         token='old_value',
                         verify=True,
                         r=Mock(return_value=(200, {
                             'token': '123'
                         }))))
        self.name = 'test'
        self.tabs = ['overview']
        self.permissions = {'bi': [1, 1, 0, 1]}

    def test_create_request(self):
        self.roles.create(self.name, self.tabs, self.permissions)
        self.roles.root.r.assert_called_with(
            'POST',
            f'{self.roles.root.url}/api/v1/roles',
            json.dumps({
                "tabs": ["overview"],
                "permissions": [{
                    "api": "bi",
                    "name": "",
                    "tabs": ["overview"],
                    "create": True,
                    "read": True,
                    "update": False,
                    "delete": True
                }],
                "name":
                "test"
            }),
            headers=None,
            verify=self.roles.root.verify)

    def test_create_with_incorrect_name_type(self):
        with self.assertRaisesRegex(AssertionError,
                                    'Role name must be a string'):
            self.roles.create(123, self.tabs, self.permissions)

    def test_create_with_empty_name_string(self):
        with self.assertRaisesRegex(AssertionError,
                                    'Role name must not be an empty string'):
            self.roles.create('', self.tabs, self.permissions)

    def test_create_with_incorrect_tabs_type(self):
        with self.assertRaisesRegex(AssertionError, 'Tabs must be a list'):
            self.roles.create(self.name, 123, self.permissions)

    def test_create_with_unavailable_tab(self):
        with self.assertRaisesRegex(
                AssertionError,
                r"You are using unavailable tabs. List of tabs: "):
            self.roles.create(self.name, ['unavailable'], self.permissions)

    def test_create_with_incorrect_permissions_type(self):
        with self.assertRaisesRegex(AssertionError,
                                    "Permissions must be a dict of list"):
            self.roles.create(self.name, self.tabs, 123)

    def test_create_with_unavailable_permissions(self):
        with self.assertRaisesRegex(
                AssertionError,
                r"la is not available api. List of all available API: "):
            self.roles.create(self.name, self.tabs, {'la': [1, 2, 3, 4]})
예제 #13
0
class TestRawUpdateMethod(unittest.TestCase):
    def setUp(self):
        self.roles = Role(
            PropertyMock(url='test_url',
                         team='test_team',
                         signature='test_signature',
                         token='old_value',
                         verify=True,
                         dev_mode=True,
                         r=Mock(return_value=(200, {
                             'token': '123'
                         }))))
        self.id = 'test_id'
        self.data = {'a': 1, 'b': 2}

    def test_raw_update_request(self):
        self.roles.raw_update(self.id, self.data)
        self.roles.root.r.assert_called_with(
            'PUT',
            f'{self.roles.root.url}/api/v1/roles/{self.id}',
            json.dumps(self.data),
            headers=None,
            verify=self.roles.root.verify)

    def test_raw_update_should_work_if_dev_mode_eq_True(self):
        self.roles.root.dev_mode = True
        self.roles.raw_update(self.id, self.data)

    def test_raw_update_with_incorrect_id_type(self):
        with self.assertRaisesRegex(AssertionError, 'The ID must be a string'):
            self.roles.raw_update(123, self.data)

    def test_raw_update_with_incorrect_data_type(self):
        with self.assertRaisesRegex(AssertionError,
                                    'The data type must be a dictionary'):
            self.roles.raw_update(self.id, 123)

    def test_raw_update_with_empty_id_string(self):
        with self.assertRaisesRegex(AssertionError,
                                    'The ID must not be an empty string'):
            self.roles.raw_update('', self.data)

    def test_raw_update_with_empty_data_dict(self):
        with self.assertRaisesRegex(
                AssertionError, 'Role data must not be an empty dictionary'):
            self.roles.raw_update(self.id, {})