Beispiel #1
0
    def test_get_workspace_acl(self, mock_time, mock_logger):
        user = User.objects.get(username='******')
        responses.add(responses.POST,
                      GOOGLE_API_TOKEN_URL,
                      status=200,
                      body=GOOGLE_TOKEN_RESULT)
        mock_time.time.return_value = AUTH_EXTRA_DATA['auth_time'] + 10

        url = '{}api/workspaces/my-seqr-billing/my-seqr-workspace/acl'.format(
            TEST_TERRA_API_ROOT_URL)
        responses.add(
            responses.GET,
            url,
            status=200,
            body=
            '{"acl": {"*****@*****.**": {"accessLevel": "OWNER","canCompute": true,"canShare": true,"pending": false},"*****@*****.**": {"accessLevel": "OWNER","canCompute": true,"canShare": true,"pending": false},"*****@*****.**": {"accessLevel": "OWNER","canCompute": true,"canShare": true,"pending": false},"*****@*****.**": {"accessLevel": "READER","canCompute": false,"canShare": false,"pending": false}}}'
        )
        acl = user_get_workspace_acl(user, 'my-seqr-billing',
                                     'my-seqr-workspace')
        self.assertIn('*****@*****.**', acl.keys())
        mock_logger.info.assert_called_with(
            'GET https://terra.api/api/workspaces/my-seqr-billing/my-seqr-workspace/acl 200 425 test_user'
        )
        self.assertEqual(len(mock_logger.method_calls), 1)

        mock_logger.reset_mock()
        responses.replace(responses.GET, url, status=401)
        with self.assertRaises(TerraAPIException) as ec:
            _ = user_get_workspace_acl(user, 'my-seqr-billing',
                                       'my-seqr-workspace')
        self.assertEqual(
            str(ec.exception),
            'Error: called Terra API: GET /api/workspaces/my-seqr-billing/my-seqr-workspace/acl got status: 401 with a reason: Unauthorized'
        )
        mock_logger.error.assert_called_with(
            'GET https://terra.api/api/workspaces/my-seqr-billing/my-seqr-workspace/acl 401 0 test_user'
        )
        self.assertEqual(len(mock_logger.method_calls), 1)

        mock_logger.reset_mock()
        responses.replace(responses.GET, url, status=403)
        r = user_get_workspace_acl(user, 'my-seqr-billing',
                                   'my-seqr-workspace')
        self.assertDictEqual(r, {})
        mock_logger.warning.assert_called_with(
            'test_user got access denied (403) from Terra API: GET /api/workspaces/my-seqr-billing/my-seqr-workspace/acl with reason: Forbidden'
        )
        self.assertEqual(len(mock_logger.method_calls), 1)

        mock_logger.reset_mock()
        responses.replace(responses.GET, url, status=404)
        r = user_get_workspace_acl(user, 'my-seqr-billing',
                                   'my-seqr-workspace')
        self.assertDictEqual(r, {})
        mock_logger.warning.assert_called_with(
            'test_user called Terra API: GET /api/workspaces/my-seqr-billing/my-seqr-workspace/acl got status 404 with reason: Not Found'
        )
        self.assertEqual(len(mock_logger.method_calls), 1)
Beispiel #2
0
    def test_get_workspace_acl(self, mock_logger):
        user = User.objects.get(username='******')

        url = '{}api/workspaces/my-seqr-billing/my-seqr-workspace/acl'.format(
            TEST_TERRA_API_ROOT_URL)
        responses.add(
            responses.GET,
            url,
            status=200,
            body=
            '{"acl": {"*****@*****.**": {"accessLevel": "OWNER","canCompute": true,"canShare": true,"pending": false},"*****@*****.**": {"accessLevel": "OWNER","canCompute": true,"canShare": true,"pending": false},"*****@*****.**": {"accessLevel": "OWNER","canCompute": true,"canShare": true,"pending": false},"*****@*****.**": {"accessLevel": "READER","canCompute": false,"canShare": false,"pending": false}}}'
        )
        acl = user_get_workspace_acl(user, 'my-seqr-billing',
                                     'my-seqr-workspace')
        self.assertIn('*****@*****.**', acl.keys())
        mock_logger.info.assert_called_with(
            'GET https://terra.api/api/workspaces/my-seqr-billing/my-seqr-workspace/acl 200 425',
            user)
        self.assertEqual(len(mock_logger.method_calls), 1)

        mock_logger.reset_mock()
        responses.replace(responses.GET, url, status=401)
        r = user_get_workspace_acl(user, 'my-seqr-billing',
                                   'my-seqr-workspace')
        self.assertDictEqual(r, {})

        mock_logger.warning.assert_called_with(
            'Error: called Terra API: GET /api/workspaces/my-seqr-billing/my-seqr-workspace/acl got status: 401 with a reason: Unauthorized',
            user)
        self.assertEqual(len(mock_logger.method_calls), 1)

        mock_logger.reset_mock()
        responses.replace(responses.GET, url, status=403)
        r = user_get_workspace_acl(user, 'my-seqr-billing',
                                   'my-seqr-workspace')
        self.assertDictEqual(r, {})
        mock_logger.warning.assert_called_with(
            'test_user got access denied (403) from Terra API: GET /api/workspaces/my-seqr-billing/my-seqr-workspace/acl with reason: Forbidden',
            user)
        self.assertEqual(len(mock_logger.method_calls), 1)

        mock_logger.reset_mock()
        responses.replace(responses.GET, url, status=404)
        r = user_get_workspace_acl(user, 'my-seqr-billing',
                                   'my-seqr-workspace')
        self.assertDictEqual(r, {})
        mock_logger.warning.assert_called_with(
            'test_user called Terra API: GET /api/workspaces/my-seqr-billing/my-seqr-workspace/acl got status 404 with reason: Not Found',
            user)
        self.assertEqual(len(mock_logger.method_calls), 1)
Beispiel #3
0
def get_workspace_collaborator_perms(user, workspace_namespace, workspace_name):
    workspace_acl = user_get_workspace_acl(user, workspace_namespace, workspace_name)
    permission_levels = {}
    for email in workspace_acl.keys():
        permission_level = _map_anvil_seqr_permission(workspace_acl[email])
        if permission_level:
            permission_levels.update({email: permission_level})
    return permission_levels