Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/views/test_origin_save.py
# Copyright (C) 2018 The Software Heritage developers | # Copyright (C) 2018 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU Affero General Public License version 3, or any later version | # License: GNU Affero General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from datetime import datetime, timedelta | from datetime import datetime, timedelta | ||||
from nose.tools import istest, nottest | |||||
from rest_framework.test import APITestCase | from rest_framework.test import APITestCase | ||||
from unittest.mock import patch | from unittest.mock import patch | ||||
from swh.web.common.utils import reverse | from swh.web.common.utils import reverse | ||||
from swh.web.common.models import ( | from swh.web.common.models import ( | ||||
SaveUnauthorizedOrigin, SaveOriginRequest, | SaveUnauthorizedOrigin, SaveOriginRequest, | ||||
SAVE_REQUEST_ACCEPTED, SAVE_REQUEST_REJECTED, | SAVE_REQUEST_ACCEPTED, SAVE_REQUEST_REJECTED, | ||||
SAVE_REQUEST_PENDING | SAVE_REQUEST_PENDING | ||||
) | ) | ||||
from swh.web.common.models import ( | from swh.web.common.models import ( | ||||
SAVE_TASK_NOT_CREATED, SAVE_TASK_NOT_YET_SCHEDULED, | SAVE_TASK_NOT_CREATED, SAVE_TASK_NOT_YET_SCHEDULED, | ||||
SAVE_TASK_SCHEDULED, SAVE_TASK_FAILED, SAVE_TASK_SUCCEED | SAVE_TASK_SCHEDULED, SAVE_TASK_FAILED, SAVE_TASK_SUCCEED | ||||
) | ) | ||||
from swh.web.tests.testcase import SWHWebTestCase | from swh.web.tests.testcase import SWHWebTestCase | ||||
class SaveApiTestCase(SWHWebTestCase, APITestCase): | class SaveApiTestCase(SWHWebTestCase, APITestCase): | ||||
@classmethod | @classmethod | ||||
def setUpTestData(cls): | def setUpTestData(cls): # noqa: N802 | ||||
SaveUnauthorizedOrigin.objects.create( | SaveUnauthorizedOrigin.objects.create( | ||||
url='https://github.com/user/illegal_repo') | url='https://github.com/user/illegal_repo') | ||||
SaveUnauthorizedOrigin.objects.create( | SaveUnauthorizedOrigin.objects.create( | ||||
url='https://gitlab.com/user_to_exclude') | url='https://gitlab.com/user_to_exclude') | ||||
@istest | def test_invalid_origin_type(self): | ||||
def invalid_origin_type(self): | |||||
url = reverse('save-origin', | url = reverse('save-origin', | ||||
kwargs={'origin_type': 'foo', | kwargs={'origin_type': 'foo', | ||||
'origin_url': 'https://github.com/torvalds/linux'}) # noqa | 'origin_url': 'https://github.com/torvalds/linux'}) # noqa | ||||
response = self.client.post(url) | response = self.client.post(url) | ||||
self.assertEquals(response.status_code, 400) | self.assertEquals(response.status_code, 400) | ||||
@istest | def test_invalid_origin_url(self): | ||||
def invalid_origin_url(self): | |||||
url = reverse('save-origin', | url = reverse('save-origin', | ||||
kwargs={'origin_type': 'git', | kwargs={'origin_type': 'git', | ||||
'origin_url': 'bar'}) | 'origin_url': 'bar'}) | ||||
response = self.client.post(url) | response = self.client.post(url) | ||||
self.assertEquals(response.status_code, 400) | self.assertEquals(response.status_code, 400) | ||||
@nottest | |||||
def check_created_save_request_status(self, mock_scheduler, origin_url, | def check_created_save_request_status(self, mock_scheduler, origin_url, | ||||
scheduler_task_status, | scheduler_task_status, | ||||
expected_request_status, | expected_request_status, | ||||
expected_task_status=None, | expected_task_status=None, | ||||
visit_date=None): | visit_date=None): | ||||
if not scheduler_task_status: | if not scheduler_task_status: | ||||
mock_scheduler.get_tasks.return_value = [] | mock_scheduler.get_tasks.return_value = [] | ||||
▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | def check_created_save_request_status(self, mock_scheduler, origin_url, | ||||
self.assertEqual(response.data['save_request_status'], | self.assertEqual(response.data['save_request_status'], | ||||
expected_request_status) | expected_request_status) | ||||
self.assertEqual(response.data['save_task_status'], | self.assertEqual(response.data['save_task_status'], | ||||
expected_task_status) | expected_task_status) | ||||
else: | else: | ||||
self.assertEqual(response.status_code, 403) | self.assertEqual(response.status_code, 403) | ||||
@nottest | |||||
def check_save_request_status(self, mock_scheduler, origin_url, | def check_save_request_status(self, mock_scheduler, origin_url, | ||||
expected_request_status, | expected_request_status, | ||||
expected_task_status, | expected_task_status, | ||||
scheduler_task_status='next_run_not_scheduled', # noqa | scheduler_task_status='next_run_not_scheduled', # noqa | ||||
visit_date=None): | visit_date=None): | ||||
mock_scheduler.get_tasks.return_value = \ | mock_scheduler.get_tasks.return_value = \ | ||||
[{ | [{ | ||||
Show All 29 Lines | def check_save_request_status(self, mock_scheduler, origin_url, | ||||
# the scheduler task has been archived | # the scheduler task has been archived | ||||
mock_scheduler.get_tasks.return_value = [] | mock_scheduler.get_tasks.return_value = [] | ||||
response = self.client.get(url) | response = self.client.get(url) | ||||
self.assertEqual(response.status_code, 200) | self.assertEqual(response.status_code, 200) | ||||
save_request_data = response.data[0] | save_request_data = response.data[0] | ||||
self.assertEqual(save_request_data['save_task_status'], | self.assertEqual(save_request_data['save_task_status'], | ||||
expected_task_status) | expected_task_status) | ||||
@istest | |||||
@patch('swh.web.common.origin_save.scheduler') | @patch('swh.web.common.origin_save.scheduler') | ||||
def save_request_rejected(self, mock_scheduler): | def test_save_request_rejected(self, mock_scheduler): | ||||
origin_url = 'https://github.com/user/illegal_repo' | origin_url = 'https://github.com/user/illegal_repo' | ||||
self.check_created_save_request_status(mock_scheduler, origin_url, | self.check_created_save_request_status(mock_scheduler, origin_url, | ||||
None, SAVE_REQUEST_REJECTED) | None, SAVE_REQUEST_REJECTED) | ||||
self.check_save_request_status(mock_scheduler, origin_url, | self.check_save_request_status(mock_scheduler, origin_url, | ||||
SAVE_REQUEST_REJECTED, | SAVE_REQUEST_REJECTED, | ||||
SAVE_TASK_NOT_CREATED) | SAVE_TASK_NOT_CREATED) | ||||
@istest | |||||
@patch('swh.web.common.origin_save.scheduler') | @patch('swh.web.common.origin_save.scheduler') | ||||
def save_request_pending(self, mock_scheduler): | def test_save_request_pending(self, mock_scheduler): | ||||
origin_url = 'https://unkwownforge.com/user/repo' | origin_url = 'https://unkwownforge.com/user/repo' | ||||
self.check_created_save_request_status(mock_scheduler, origin_url, | self.check_created_save_request_status(mock_scheduler, origin_url, | ||||
None, SAVE_REQUEST_PENDING, | None, SAVE_REQUEST_PENDING, | ||||
SAVE_TASK_NOT_CREATED) | SAVE_TASK_NOT_CREATED) | ||||
self.check_save_request_status(mock_scheduler, origin_url, | self.check_save_request_status(mock_scheduler, origin_url, | ||||
SAVE_REQUEST_PENDING, | SAVE_REQUEST_PENDING, | ||||
SAVE_TASK_NOT_CREATED) | SAVE_TASK_NOT_CREATED) | ||||
@istest | |||||
@patch('swh.web.common.origin_save.scheduler') | @patch('swh.web.common.origin_save.scheduler') | ||||
def save_request_succeed(self, mock_scheduler): | def test_save_request_succeed(self, mock_scheduler): | ||||
origin_url = 'https://github.com/Kitware/CMake' | origin_url = 'https://github.com/Kitware/CMake' | ||||
self.check_created_save_request_status(mock_scheduler, origin_url, | self.check_created_save_request_status(mock_scheduler, origin_url, | ||||
None, SAVE_REQUEST_ACCEPTED, | None, SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED) | SAVE_TASK_NOT_YET_SCHEDULED) | ||||
self.check_save_request_status(mock_scheduler, origin_url, | self.check_save_request_status(mock_scheduler, origin_url, | ||||
SAVE_REQUEST_ACCEPTED, | SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_SCHEDULED, | SAVE_TASK_SCHEDULED, | ||||
scheduler_task_status='next_run_scheduled') # noqa | scheduler_task_status='next_run_scheduled') # noqa | ||||
self.check_save_request_status(mock_scheduler, origin_url, | self.check_save_request_status(mock_scheduler, origin_url, | ||||
SAVE_REQUEST_ACCEPTED, | SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_SCHEDULED, | SAVE_TASK_SCHEDULED, | ||||
scheduler_task_status='completed', | scheduler_task_status='completed', | ||||
visit_date=None) # noqa | visit_date=None) # noqa | ||||
visit_date = datetime.now() + timedelta(hours=1) | visit_date = datetime.now() + timedelta(hours=1) | ||||
self.check_save_request_status(mock_scheduler, origin_url, | self.check_save_request_status(mock_scheduler, origin_url, | ||||
SAVE_REQUEST_ACCEPTED, | SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_SUCCEED, | SAVE_TASK_SUCCEED, | ||||
scheduler_task_status='completed', | scheduler_task_status='completed', | ||||
visit_date=visit_date) # noqa | visit_date=visit_date) # noqa | ||||
@istest | |||||
@patch('swh.web.common.origin_save.scheduler') | @patch('swh.web.common.origin_save.scheduler') | ||||
def save_request_failed(self, mock_scheduler): | def test_save_request_failed(self, mock_scheduler): | ||||
origin_url = 'https://gitlab.com/inkscape/inkscape' | origin_url = 'https://gitlab.com/inkscape/inkscape' | ||||
self.check_created_save_request_status(mock_scheduler, origin_url, | self.check_created_save_request_status(mock_scheduler, origin_url, | ||||
None, SAVE_REQUEST_ACCEPTED, | None, SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED) | SAVE_TASK_NOT_YET_SCHEDULED) | ||||
self.check_save_request_status(mock_scheduler, origin_url, | self.check_save_request_status(mock_scheduler, origin_url, | ||||
SAVE_REQUEST_ACCEPTED, | SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_SCHEDULED, | SAVE_TASK_SCHEDULED, | ||||
scheduler_task_status='next_run_scheduled') # noqa | scheduler_task_status='next_run_scheduled') # noqa | ||||
self.check_save_request_status(mock_scheduler, origin_url, | self.check_save_request_status(mock_scheduler, origin_url, | ||||
SAVE_REQUEST_ACCEPTED, | SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_FAILED, | SAVE_TASK_FAILED, | ||||
scheduler_task_status='disabled') # noqa | scheduler_task_status='disabled') # noqa | ||||
@istest | |||||
@patch('swh.web.common.origin_save.scheduler') | @patch('swh.web.common.origin_save.scheduler') | ||||
def create_save_request_only_when_needed(self, mock_scheduler): | def test_create_save_request_only_when_needed(self, mock_scheduler): | ||||
origin_url = 'https://gitlab.com/webpack/webpack' | origin_url = 'https://gitlab.com/webpack/webpack' | ||||
SaveOriginRequest.objects.create(origin_type='git', | SaveOriginRequest.objects.create(origin_type='git', | ||||
origin_url=origin_url, | origin_url=origin_url, | ||||
status=SAVE_REQUEST_ACCEPTED, # noqa | status=SAVE_REQUEST_ACCEPTED, # noqa | ||||
loading_task_id=56) | loading_task_id=56) | ||||
self.check_created_save_request_status(mock_scheduler, origin_url, | self.check_created_save_request_status(mock_scheduler, origin_url, | ||||
'next_run_not_scheduled', | 'next_run_not_scheduled', | ||||
Show All 31 Lines |