Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/views/test_origin_save.py
Show All 25 Lines | class SaveApiTestCase(WebTestCase, APITestCase): | ||||
@classmethod | @classmethod | ||||
def setUpTestData(cls): # noqa: N802 | 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') | ||||
def test_invalid_origin_type(self): | def test_invalid_visit_type(self): | ||||
url = reverse('api-1-save-origin', | url = reverse('api-1-save-origin', | ||||
url_args={'origin_type': 'foo', | url_args={'visit_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.assertEqual(response.status_code, 400) | self.assertEqual(response.status_code, 400) | ||||
def test_invalid_origin_url(self): | def test_invalid_origin_url(self): | ||||
url = reverse('api-1-save-origin', | url = reverse('api-1-save-origin', | ||||
url_args={'origin_type': 'git', | url_args={'visit_type': 'git', | ||||
'origin_url': 'bar'}) | 'origin_url': 'bar'}) | ||||
response = self.client.post(url) | response = self.client.post(url) | ||||
self.assertEqual(response.status_code, 400) | self.assertEqual(response.status_code, 400) | ||||
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, | ||||
Show All 29 Lines | def check_created_save_request_status(self, mock_scheduler, origin_url, | ||||
}, | }, | ||||
'args': [] | 'args': [] | ||||
}, | }, | ||||
'status': 'next_run_not_scheduled', | 'status': 'next_run_not_scheduled', | ||||
'id': 1, | 'id': 1, | ||||
}] | }] | ||||
url = reverse('api-1-save-origin', | url = reverse('api-1-save-origin', | ||||
url_args={'origin_type': 'git', | url_args={'visit_type': 'git', | ||||
'origin_url': origin_url}) | 'origin_url': origin_url}) | ||||
with patch('swh.web.common.origin_save._get_visit_info_for_save_request') as mock_visit_date: # noqa | with patch('swh.web.common.origin_save._get_visit_info_for_save_request') as mock_visit_date: # noqa | ||||
mock_visit_date.return_value = (visit_date, None) | mock_visit_date.return_value = (visit_date, None) | ||||
response = self.client.post(url) | response = self.client.post(url) | ||||
if expected_request_status != SAVE_REQUEST_REJECTED: | if expected_request_status != SAVE_REQUEST_REJECTED: | ||||
self.assertEqual(response.status_code, 200) | self.assertEqual(response.status_code, 200) | ||||
Show All 22 Lines | def check_save_request_status(self, mock_scheduler, origin_url, | ||||
}, | }, | ||||
'args': [] | 'args': [] | ||||
}, | }, | ||||
'status': scheduler_task_status, | 'status': scheduler_task_status, | ||||
'id': 1, | 'id': 1, | ||||
}] | }] | ||||
url = reverse('api-1-save-origin', | url = reverse('api-1-save-origin', | ||||
url_args={'origin_type': 'git', | url_args={'visit_type': 'git', | ||||
'origin_url': origin_url}) | 'origin_url': origin_url}) | ||||
with patch('swh.web.common.origin_save._get_visit_info_for_save_request') as mock_visit_date: # noqa | with patch('swh.web.common.origin_save._get_visit_info_for_save_request') as mock_visit_date: # noqa | ||||
mock_visit_date.return_value = (visit_date, None) | mock_visit_date.return_value = (visit_date, None) | ||||
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] | ||||
▲ Show 20 Lines • Show All 65 Lines • ▼ Show 20 Lines | def test_save_request_failed(self, mock_scheduler): | ||||
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 | ||||
@patch('swh.web.common.origin_save.scheduler') | @patch('swh.web.common.origin_save.scheduler') | ||||
def test_create_save_request_only_when_needed(self, mock_scheduler): | def test_create_save_request_only_when_needed(self, mock_scheduler): | ||||
origin_url = 'https://github.com/webpack/webpack' | origin_url = 'https://github.com/webpack/webpack' | ||||
SaveOriginRequest.objects.create(origin_type='git', | SaveOriginRequest.objects.create(visit_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', | ||||
SAVE_REQUEST_ACCEPTED, | SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED) | SAVE_TASK_NOT_YET_SCHEDULED) | ||||
sors = list(SaveOriginRequest.objects.filter(origin_type='git', | sors = list(SaveOriginRequest.objects.filter(visit_type='git', | ||||
origin_url=origin_url)) | origin_url=origin_url)) | ||||
self.assertEqual(len(sors), 1) | self.assertEqual(len(sors), 1) | ||||
self.check_created_save_request_status(mock_scheduler, origin_url, | self.check_created_save_request_status(mock_scheduler, origin_url, | ||||
'next_run_scheduled', | 'next_run_scheduled', | ||||
SAVE_REQUEST_ACCEPTED, | SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_SCHEDULED) | SAVE_TASK_SCHEDULED) | ||||
sors = list(SaveOriginRequest.objects.filter(origin_type='git', | sors = list(SaveOriginRequest.objects.filter(visit_type='git', | ||||
origin_url=origin_url)) | origin_url=origin_url)) | ||||
self.assertEqual(len(sors), 1) | self.assertEqual(len(sors), 1) | ||||
visit_date = datetime.now(tz=timezone.utc) + timedelta(hours=1) | visit_date = datetime.now(tz=timezone.utc) + timedelta(hours=1) | ||||
self.check_created_save_request_status(mock_scheduler, origin_url, | self.check_created_save_request_status(mock_scheduler, origin_url, | ||||
'completed', | 'completed', | ||||
SAVE_REQUEST_ACCEPTED, | SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED, | SAVE_TASK_NOT_YET_SCHEDULED, | ||||
visit_date=visit_date) | visit_date=visit_date) | ||||
sors = list(SaveOriginRequest.objects.filter(origin_type='git', | sors = list(SaveOriginRequest.objects.filter(visit_type='git', | ||||
origin_url=origin_url)) | origin_url=origin_url)) | ||||
self.assertEqual(len(sors), 2) | self.assertEqual(len(sors), 2) | ||||
self.check_created_save_request_status(mock_scheduler, origin_url, | self.check_created_save_request_status(mock_scheduler, origin_url, | ||||
'disabled', | 'disabled', | ||||
SAVE_REQUEST_ACCEPTED, | SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED) | SAVE_TASK_NOT_YET_SCHEDULED) | ||||
sors = list(SaveOriginRequest.objects.filter(origin_type='git', | sors = list(SaveOriginRequest.objects.filter(visit_type='git', | ||||
origin_url=origin_url)) | origin_url=origin_url)) | ||||
self.assertEqual(len(sors), 3) | self.assertEqual(len(sors), 3) | ||||
def test_get_save_requests_unknown_origin(self): | def test_get_save_requests_unknown_origin(self): | ||||
unknown_origin_url = 'https://gitlab.com/foo/bar' | unknown_origin_url = 'https://gitlab.com/foo/bar' | ||||
url = reverse('api-1-save-origin', | url = reverse('api-1-save-origin', | ||||
url_args={'origin_type': 'git', | url_args={'visit_type': 'git', | ||||
'origin_url': unknown_origin_url}) | 'origin_url': unknown_origin_url}) | ||||
response = self.client.get(url) | response = self.client.get(url) | ||||
self.assertEqual(response.status_code, 404) | self.assertEqual(response.status_code, 404) | ||||
self.assertEqual(response.data, { | self.assertEqual(response.data, { | ||||
'exception': 'NotFoundExc', | 'exception': 'NotFoundExc', | ||||
'reason': ('No save requests found for origin with type ' | 'reason': ('No save requests found for visit of type ' | ||||
'git and url %s.') % unknown_origin_url | 'git on origin with url %s.') % unknown_origin_url | ||||
}) | }) |