"""Тесты выборочной загрузки задач Redmine.""" from unittest import TestCase from unittest.mock import Mock, patch import requests from api.redmine import RedmineAPI class RedmineAPITestCase(TestCase): """Проверяет запрос только необходимых приложению задач.""" def test_get_issues_requests_only_given_issue_ids(self): """Задачи загружаются отдельно и только по номерам тегов Clockify.""" redmine = RedmineAPI.__new__(RedmineAPI) redmine.get_issue = Mock(side_effect=lambda issue_id: issue_id) result = redmine.get_issues({60130, 51906}) self.assertEqual(result, [51906, 60130]) self.assertEqual( [call.args[0] for call in redmine.get_issue.call_args_list], [51906, 60130], ) def test_get_issues_skips_unavailable_issue(self): """Недоступная задача не мешает загрузить остальные указанные задачи.""" redmine = RedmineAPI.__new__(RedmineAPI) redmine.get_issue = Mock(side_effect=[51906, None]) self.assertEqual(redmine.get_issues({51906, 60130}), [51906]) @patch("api.redmine.requests.get") def test_get_issue_returns_none_on_timeout(self, get): """Сетевой таймаут одной задачи не прерывает обновление БД.""" get.side_effect = requests.ConnectTimeout("Redmine недоступен") redmine = RedmineAPI.__new__(RedmineAPI) redmine.base_url = "https://redmine.example/" redmine.issue = "issues/{id}.json" redmine.token = "token" self.assertIsNone(redmine.get_issue(38243))