From 9d90af4a3da3e20cdbbcaaf7ec5091b7ad0a04dd Mon Sep 17 00:00:00 2001 From: Basraah Date: Wed, 13 Sep 2017 20:16:07 +1000 Subject: [PATCH] Fixes #865 & adds unit tests --- eveonline/tasks.py | 4 +- eveonline/tests.py | 1 - eveonline/tests/__init__.py | 0 eveonline/tests/test_tasks.py | 125 ++++++++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+), 3 deletions(-) delete mode 100644 eveonline/tests.py create mode 100644 eveonline/tests/__init__.py create mode 100644 eveonline/tests/test_tasks.py diff --git a/eveonline/tasks.py b/eveonline/tasks.py index 1694ec04..42fc64c0 100644 --- a/eveonline/tasks.py +++ b/eveonline/tasks.py @@ -36,7 +36,7 @@ def refresh_api(api): EveManager.create_character_obj(c, api.user, api.api_id) current_chars = EveCharacter.objects.filter(api_id=api.api_id) for c in current_chars: - if not int(c.character_id) in [c.id for c in characters]: + if not int(c.character_id) in [d.id for d in characters]: logger.info("Character %s no longer found on API ID %s" % (c, api.api_id)) c.delete() except evelink.api.APIError as e: @@ -60,7 +60,7 @@ def refresh_api(api): api.api_id, e.required_mask, e.api_mask), level="danger") still_valid = False except EveApiManager.ApiServerUnreachableError as e: - logger.warn("Error updating API %s\n%s" % (api.api_id, str(e))) + logger.warning("Error updating API %s\n%s" % (api.api_id, str(e))) finally: if not still_valid: EveManager.delete_characters_by_api_id(api.api_id, api.user.id) diff --git a/eveonline/tests.py b/eveonline/tests.py deleted file mode 100644 index a39b155a..00000000 --- a/eveonline/tests.py +++ /dev/null @@ -1 +0,0 @@ -# Create your tests here. diff --git a/eveonline/tests/__init__.py b/eveonline/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/eveonline/tests/test_tasks.py b/eveonline/tests/test_tasks.py new file mode 100644 index 00000000..f6f1b74a --- /dev/null +++ b/eveonline/tests/test_tasks.py @@ -0,0 +1,125 @@ +from __future__ import unicode_literals + +try: + # Py3 + from unittest import mock +except ImportError: + # Py2 + import mock + +from django.test import TestCase + +from alliance_auth.tests.auth_utils import AuthUtils +from eveonline.providers import Character, Alliance, Corporation +from eveonline.managers import EveManager +from eveonline import tasks +from eveonline.models import EveApiKeyPair, EveCharacter +from services.managers.eve_api_manager import EveApiManager + +MODULE_PATH = 'eveonline.tasks' + + +class EveOnlineTasksTestCase(TestCase): + def setUp(self): + self.user = AuthUtils.create_member('joebloggs') + self.api_key = EveApiKeyPair.objects.create(api_id='0118999', + api_key='hunter2', + user=self.user, + sso_verified=True) + + @mock.patch(MODULE_PATH + '.EveApiManager.validate_api') + @mock.patch(MODULE_PATH + '.EveManager.get_characters_from_api') + def test_refresh_api_characters(self, get_characters_from_api, validate_api): + # Arrange + provider = mock.MagicMock() + + provider.get_alliance.return_value = Alliance(provider, 22222, 'Test Alliance', 'TEST', [11111], 11111) + provider.get_corp.return_value = Corporation(provider, 11111, 'Test Corp', 'HERP', 12345, [12345, 23456], 22222) + + mock_api_data = [ + Character(provider, 12345, 'testchar1', 11111, 22222), + Character(provider, 23456, 'Will beAdded', 11111, 22222) + ] + + get_characters_from_api.return_value = mock_api_data + validate_api.return_value = True + + EveManager.create_character_obj(mock_api_data[0], self.user, '0118999') + EveManager.create_character_obj(Character(provider, 34567, 'deletedcharacter', 11111, 22222), + self.user, '0118999') + + # Act + tasks.refresh_api(self.api_key) + + # Assert + self.assertTrue(EveCharacter.objects.filter(character_id='12345').exists()) + self.assertTrue(EveCharacter.objects.filter(character_id='23456').exists()) + self.assertFalse(EveCharacter.objects.filter(character_id='34567').exists()) + + args, kwargs = validate_api.call_args + self.assertEqual(args[0], self.api_key.api_id) + self.assertEqual(args[1], self.api_key.api_key) + self.assertEqual(args[2], self.api_key.user) + + @mock.patch(MODULE_PATH + '.EveApiManager.validate_api') + @mock.patch(MODULE_PATH + '.EveManager') + def test_refresh_api_evelink_exception(self, evemanager, validate_api): + import evelink + + validate_api.side_effect = evelink.api.APIError() + + tasks.refresh_api(self.api_key) + + self.assertTrue(validate_api.called) + self.assertFalse(evemanager.get_characters_from_api.called) + self.assertFalse(evemanager.delete_characters_by_api_id.called) + self.assertFalse(evemanager.delete_api_key_pair.called) + + @mock.patch(MODULE_PATH + '.EveApiManager.validate_api') + @mock.patch(MODULE_PATH + '.EveManager') + def test_refresh_api_invalid(self, evemanager, validate_api): + validate_api.side_effect = EveApiManager.ApiInvalidError(self.api_key.api_id) + + tasks.refresh_api(self.api_key) + + self.assertTrue(validate_api.called) + self.assertFalse(evemanager.get_characters_from_api.called) + self.assertTrue(evemanager.delete_characters_by_api_id.called) + self.assertTrue(evemanager.delete_api_key_pair.called) + + @mock.patch(MODULE_PATH + '.EveApiManager.validate_api') + @mock.patch(MODULE_PATH + '.EveManager') + def test_refresh_api_accountvalidationerror(self, evemanager, validate_api): + validate_api.side_effect = EveApiManager.ApiAccountValidationError(self.api_key.api_id) + + tasks.refresh_api(self.api_key) + + self.assertTrue(validate_api.called) + self.assertFalse(evemanager.get_characters_from_api.called) + self.assertTrue(evemanager.delete_characters_by_api_id.called) + self.assertTrue(evemanager.delete_api_key_pair.called) + + @mock.patch(MODULE_PATH + '.EveApiManager.validate_api') + @mock.patch(MODULE_PATH + '.EveManager') + def test_refresh_api_maskvalidationerror(self, evemanager, validate_api): + validate_api.side_effect = EveApiManager.ApiMaskValidationError('12345', '1111', self.api_key.api_id) + + tasks.refresh_api(self.api_key) + + self.assertTrue(validate_api.called) + self.assertFalse(evemanager.get_characters_from_api.called) + self.assertTrue(evemanager.delete_characters_by_api_id.called) + self.assertTrue(evemanager.delete_api_key_pair.called) + + @mock.patch(MODULE_PATH + '.EveApiManager.validate_api') + @mock.patch(MODULE_PATH + '.EveManager') + def test_refresh_api_invalid(self, evemanager, validate_api): + validate_api.side_effect = EveApiManager.ApiServerUnreachableError(self.api_key.api_id) + + tasks.refresh_api(self.api_key) + + self.assertTrue(validate_api.called) + self.assertFalse(evemanager.get_characters_from_api.called) + # Lets hope we never see that again + self.assertFalse(evemanager.delete_characters_by_api_id.called) + self.assertFalse(evemanager.delete_api_key_pair.called)