示例#1
0
 def gen_client(token):
     '''
     gen client by token
     '''
     client = APIClient()
     client.credentials(HTTP_AUTHORIZATION='Token ' + token)
     return client
示例#2
0
 def gen_client(username):
     '''
     gen client by token
     '''
     client = APIClient()
     client.head = {'user': username}
     return client
示例#3
0
    def test_ding_login(self, mock_auth_code):
        mock_auth_code.return_value = "ding_uid"
        client = APIClient()
        res = client.post(reverse('siteapi:ding_login'), data={'code': 'ding_code'})
        expect = {'code': ["this account hasn't registered"]}
        self.assertEqual(res.json(), expect)
        self.assertEqual(res.status_code, 400)

        user = User.create_user(username='******', password='')
        DingUser.valid_objects.create(user=user, uid='ding_uid')
        res = client.post(reverse('siteapi:ding_login'), data={'code': 'ding_code'})
        self.assertEqual(res.status_code, 200)
        self.assertIn('token', res.json())
示例#4
0
    def setUp(self):
        super(DeptPermTestCase, self).setUp()
        root = Dept.valid_objects.get(uid='root')
        level_1 = Dept.valid_objects.create(uid='l1', name='l1', parent=root)
        Dept.valid_objects.create(uid='l11', name='l11', parent=level_1, order_no=2)
        Dept.valid_objects.create(uid='l12', name='l12', parent=level_1, order_no=1)
        user = User.create_user('employee', 'employee')
        DeptMember.valid_objects.create(user=user, owner=root)
        user = User.create_user('employee_2', 'employee_2')

        token = self.client.post(reverse('siteapi:user_login'), data={
            'username': '******',
            'password': '******'
        }).json()['token']
        self.employee = APIClient()
        self.employee.credentials(HTTP_AUTHORIZATION='Token ' + token)
示例#5
0
class TestCase(django_TestCase):
    '''
    base TestCase
    '''

    client = None
    maxDiff = None

    now = datetime.datetime(2019, 1, 1, tzinfo=pytz.timezone('UTC'))
    now_str = '2019-01-01T08:00:00+08:00'
    mock_now = False

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.anonymous = APIClient()
        self.user = User.valid_objects.get(username='******')

    @staticmethod
    def gen_client(token):
        '''
        gen client by token
        '''
        client = APIClient()
        client.credentials(HTTP_AUTHORIZATION='Token ' + token)
        return client

    def login(self, username, password):
        '''
        gen test client as logined user
        '''
        token = self.anonymous.post(reverse('siteapi:user_login'),
                                    data={
                                        'username': username,
                                        'password': password,
                                    }).json()['token']
        return self.gen_client(token)

    def login_as(self, user):
        '''
        gen test client from user
        '''
        return self.gen_client(user.token)

    def setUp(self):
        '''
        pre-work
        '''
        self.init()
        self.client = self.login_as(self.user)
        if self.mock_now:
            self.now_patcher = mock.patch('django.utils.timezone.now')
            self.mock_now = self.now_patcher.start()
            self.mock_now.return_value = self.now

    def tearDown(self):
        if self.mock_now:
            self.now_patcher.stop()

    def init(self):
        '''
示例#6
0
class TestCase(django_TestCase):
    '''
    base TestCase
    '''

    client = None
    maxDiff = None

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.anonymous = APIClient()
        self.user = User.valid_objects.get(username='******')

    @staticmethod
    def gen_client(token):
        '''
        gen client by token
        '''
        client = APIClient()
        client.credentials(HTTP_AUTHORIZATION='Token ' + token)
        return client

    def login(self, username, password):
        '''
        gen test client as logined user
        '''
        token = self.anonymous.post(reverse('siteapi:user_login'),
                                    data={
                                        'username': username,
                                        'password': password,
                                    }).json()['token']
        return self.gen_client(token)

    def login_as(self, user):
        '''
        gen test client from user
        '''
        return self.gen_client(user.token)

    def setUp(self):
        '''
        pre-work
        '''
        self.init()
        self.client = self.login_as(self.user)

    def init(self):
        '''
示例#7
0
class DeptPermTestCase(TestCase):
    def setUp(self):
        super(DeptPermTestCase, self).setUp()
        root = Dept.valid_objects.get(uid='root')
        level_1 = Dept.valid_objects.create(uid='l1', name='l1', parent=root)
        Dept.valid_objects.create(uid='l11', name='l11', parent=level_1, order_no=2)
        Dept.valid_objects.create(uid='l12', name='l12', parent=level_1, order_no=1)
        user = User.create_user('employee', 'employee')
        DeptMember.valid_objects.create(user=user, owner=root)
        user = User.create_user('employee_2', 'employee_2')

        token = self.client.post(reverse('siteapi:user_login'), data={
            'username': '******',
            'password': '******'
        }).json()['token']
        self.employee = APIClient()
        self.employee.credentials(HTTP_AUTHORIZATION='Token ' + token)

    def test_no_perm(self):
        res = self.anonymous.get(reverse('siteapi:ucenter_node_detail', args=('d_l11', )))
        self.assertEqual(res.status_code, 401)
        res = self.employee.get(reverse('siteapi:ucenter_node_detail', args=('d_l11', )))
        self.assertEqual(res.status_code, 200)

        res = self.employee.get(reverse('siteapi:dept_tree', args=('l11', )))
        self.assertEqual(res.status_code, 403)
        res = self.employee.get(reverse('siteapi:dept_child_user', args=('l11', )))
        self.assertEqual(res.status_code, 200)
        res = self.employee.get(reverse('siteapi:dept_child_dept', args=('l11', )))
        self.assertEqual(res.status_code, 200)

        res = self.employee.delete(reverse('siteapi:dept_detail', args=('l11', )))
        self.assertEqual(res.status_code, 403)
        res = self.employee.json_post(reverse('siteapi:dept_child_dept', args=('l11', )))
        self.assertEqual(res.status_code, 403)
        res = self.employee.json_patch(reverse('siteapi:dept_child_user', args=('l11', )))
        self.assertEqual(res.status_code, 403)

    def test_node_perm(self):
        perm = Perm.get('dept_nodel1_admin')
        UserPerm.valid_objects.create(owner=User.objects.get(username='******'), perm=perm, value=True)

        group = Group.objects.create(name='test')
        ManagerGroup.objects.create(group=group, scope_subject=2, nodes=['d_l11'])
        GroupMember.objects.create(owner=group, user=User.objects.get(username='******'))
        res = self.employee.json_patch(reverse('siteapi:dept_detail', args=('l11', )), data={'name': 'new'})
        Dept.objects.get(uid='l11')
        self.assertEqual(res.status_code, 200)

        res = self.employee.json_patch(reverse('siteapi:dept_detail', args=('l1', )), data={'name': 'new'})
        self.assertEqual(res.status_code, 403)

    def test_boss(self):
        employee = User.objects.get(username='******')
        employee.is_boss = True
        employee.save()

        res = self.employee.json_patch(reverse('siteapi:dept_detail', args=('l11', )), data={'name': 'new'})
        self.assertEqual(res.status_code, 200)

        res = self.employee.json_patch(reverse('siteapi:dept_detail', args=('l1', )), data={'name': 'new'})
        self.assertEqual(res.status_code, 200)
示例#8
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     self.anonymous = APIClient()
     self.user = User.valid_objects.get(username='******')
示例#9
0
    def test_login(self):
        user = User.create_user(username='******', password='******')
        user.mobile = '18812341234'
        user.private_email = '*****@*****.**'
        user.save()
        client = APIClient()

        res = client.get(reverse('siteapi:user_self_perm'))
        self.assertEqual(res.status_code, 401)

        res = client.post(reverse('siteapi:user_login'),
                          data={
                              'username': '******',
                              'password': '******'
                          })
        self.assertEqual(res.status_code, 200)
        res = client.post(reverse('siteapi:user_login'),
                          data={
                              'private_email': '*****@*****.**',
                              'password': '******'
                          })
        self.assertEqual(res.status_code, 200)
        res = client.post(reverse('siteapi:user_login'),
                          data={
                              'mobile': '18812341234',
                              'password': '******'
                          })
        self.assertEqual(res.status_code, 200)

        user = User.objects.get(username='******')
        self.assertIsNotNone(user.last_active_time)
        self.assertTrue(user.is_settled)

        client.credentials(HTTP_AUTHORIZATION='Token ' + res.json()['token'])
        res = client.get(reverse('siteapi:user_self_perm'))
        self.assertEqual(res.status_code, 200)

        res = client.post(reverse('siteapi:user_login'),
                          data={
                              'username': '******',
                              'password': '******'
                          })
        self.assertEqual(res.json()['perms'],
                         ['system_oneid_all', 'system_ark-meta-server_all'])

        # test login failed because of account_config
        email_config = EmailConfig.get_current()
        email_config.is_valid = False
        email_config.save()
        res = client.post(reverse('siteapi:user_login'),
                          data={
                              'private_email': '*****@*****.**',
                              'password': '******'
                          })
        self.assertEqual(res.status_code, 400)

        mobile_config = SMSConfig.get_current()
        mobile_config.is_valid = True
        mobile_config.save()
        res = client.post(reverse('siteapi:user_login'),
                          data={
                              'mobile': '18812341234',
                              'password': '******'
                          })
        self.assertEqual(res.status_code, 200)
示例#10
0
class TestCase(django_TestCase):
    '''
    base TestCase
    '''

    client = None
    maxDiff = None

    now = datetime.datetime(2019, 1, 1, tzinfo=pytz.timezone('UTC'))
    now_str = '2019-01-01T08:00:00+08:00'
    mock_now = False

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.anonymous = APIClient()
        self.user = User.valid_objects.get(username='******')

    @staticmethod
    def gen_client(token):
        '''
        gen client by token
        '''
        client = APIClient()
        client.credentials(HTTP_AUTHORIZATION='Token ' + token)
        return client

    def login(self, username, password):
        '''
        gen test client as logined user
        '''
        token = self.anonymous.post(reverse('siteapi:user_login'),
                                    data={
                                        'username': username,
                                        'password': password,
                                    }).json()['token']
        return self.gen_client(token)

    def login_as(self, user):
        '''
        gen test client from user
        '''
        return self.gen_client(user.token)

    def setUp(self):
        '''
        pre-work
        '''
        self.init()
        self.client = self.login_as(self.user)
        if self.mock_now:
            self.now_patcher = mock.patch('django.utils.timezone.now')
            self.mock_now = self.now_patcher.start()
            self.mock_now.return_value = self.now

    def tearDown(self):
        if self.mock_now:
            self.now_patcher.stop()

    def init(self):
        '''
        pre-work: create necessary objs
        '''

    def assertEqualScoped(self, first, second, keys=None, msg=""):  # pylint: disable=invalid-name
        '''
        断言两个对象的局部是否相等
        目前仅限 dict 对象
        '''
        if keys is None:
            return self.assertEqual(first, second, msg)
        for key in keys:
            self.assertEqual(first[key], second[key], msg=f'[{key}]:' + msg)

    @staticmethod
    def extract(data, keys=None):
        '''
        extract specified keys from dict
        '''
        if keys is None:
            return data
        return {key: data.get(key) for key in keys}