mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 12:30:15 +02:00
Add caching and better error handling Move fleetup templates into fleetup app Move fleetup urls into fleetup app Fix button overflow and url Add manager unit tests Fix python3 compatibility
510 lines
14 KiB
Python
510 lines
14 KiB
Python
from __future__ import unicode_literals
|
|
|
|
try:
|
|
# Py3
|
|
from unittest import mock
|
|
except ImportError:
|
|
# Py2
|
|
import mock
|
|
|
|
import requests_mock
|
|
import json
|
|
import datetime
|
|
|
|
from django.test import TestCase
|
|
|
|
from fleetup.managers import FleetUpManager
|
|
|
|
|
|
class FleetupManagerTestCase(TestCase):
|
|
def setUp(self):
|
|
pass
|
|
|
|
def test__request_cache_key(self):
|
|
|
|
cache_key = FleetUpManager._request_cache_key('testurl')
|
|
|
|
self.assertEqual('FLEETUP_ENDPOINT_a39562b6ef5b858220be13d2adb61d3f10cf8d61',
|
|
cache_key)
|
|
|
|
@mock.patch('fleetup.managers.cache')
|
|
@requests_mock.Mocker()
|
|
def test_get_endpoint(self, cache, m):
|
|
url = "http://example.com/test/endpoint/"
|
|
json_data = {'data': "123456", 'CachedUntilUTC': '/Date(1493896236163)/', 'Success': True}
|
|
m.register_uri('GET', url,
|
|
text=json.dumps(json_data))
|
|
|
|
cache.get.return_value = None # No cached value
|
|
|
|
# Act
|
|
result = FleetUpManager.get_endpoint(url)
|
|
|
|
# Assert
|
|
self.assertTrue(cache.get.called)
|
|
self.assertTrue(cache.set.called)
|
|
args, kwargs = cache.set.call_args
|
|
self.assertDictEqual(json_data, args[1])
|
|
|
|
self.assertDictEqual(json_data, result)
|
|
|
|
@mock.patch('fleetup.managers.cache')
|
|
@requests_mock.Mocker()
|
|
def test_get_endpoint_error(self, cache, m):
|
|
url = "http://example.com/test/endpoint/"
|
|
json_data = {'data': [], 'Success': False}
|
|
m.register_uri('GET', url,
|
|
text=json.dumps(json_data),
|
|
status_code=400)
|
|
|
|
cache.get.return_value = None # No cached value
|
|
|
|
# Act
|
|
result = FleetUpManager.get_endpoint(url)
|
|
|
|
# Assert
|
|
self.assertTrue(cache.get.called)
|
|
self.assertFalse(cache.set.called)
|
|
self.assertIsNone(result)
|
|
|
|
@mock.patch('fleetup.managers.FleetUpManager.get_endpoint')
|
|
def test_get_fleetup_members(self, get_endpoint):
|
|
|
|
get_endpoint.return_value = {"Data": [
|
|
{
|
|
'UserId': 1234,
|
|
'EveCharName': 'test_name',
|
|
'EveCharId': 5678,
|
|
'Corporation': 'test_corporation',
|
|
}
|
|
]}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_members()
|
|
|
|
# Asset
|
|
self.assertTrue(get_endpoint.called)
|
|
args, kwargs = get_endpoint.call_args
|
|
self.assertEqual(args[0],
|
|
FleetUpManager.BASE_URL + '/GroupCharacters/' +
|
|
FleetUpManager.GROUP_ID)
|
|
expected_result = {
|
|
1234: {
|
|
'user_id': 1234,
|
|
'char_name': 'test_name',
|
|
'char_id': 5678,
|
|
'corporation': 'test_corporation',
|
|
}
|
|
}
|
|
self.assertDictEqual(expected_result, result)
|
|
|
|
# Test None response
|
|
# Arrange
|
|
get_endpoint.return_value = None
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_members()
|
|
|
|
# Assert
|
|
self.assertIsNone(result)
|
|
|
|
# Test Empty response
|
|
# Arrange
|
|
get_endpoint.return_value = {'Data': []}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_members()
|
|
|
|
# Assert
|
|
self.assertDictEqual({}, result)
|
|
|
|
@mock.patch('fleetup.managers.FleetUpManager.get_endpoint')
|
|
def test_get_fleetup_operations(self, get_endpoint):
|
|
|
|
get_endpoint.return_value = {"Data": [
|
|
{
|
|
'Subject': 'test_operation',
|
|
'StartString': '2017-05-06 11:11:11',
|
|
'EndString': '2017-05-06 12:12:12',
|
|
'OperationId': 1234,
|
|
'Location': 'Jita',
|
|
'LocationInfo': '4-4',
|
|
'Details': 'This is a test operation',
|
|
'Url': 'http://example.com/1234',
|
|
'Doctrines': 'Foxcats',
|
|
'Organizer': 'Example FC'
|
|
}
|
|
]}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_operations()
|
|
self.maxDiff = None
|
|
# Asset
|
|
self.assertTrue(get_endpoint.called)
|
|
args, kwargs = get_endpoint.call_args
|
|
self.assertEqual(args[0],
|
|
FleetUpManager.BASE_URL + '/Operations/' +
|
|
FleetUpManager.GROUP_ID)
|
|
expected_result = {
|
|
'2017-05-06 11:11:11': {
|
|
'subject': 'test_operation',
|
|
'start': datetime.datetime(2017, 5, 6, 11, 11, 11),
|
|
'end': datetime.datetime(2017, 5, 6, 12, 12, 12),
|
|
'operation_id': 1234,
|
|
'location': 'Jita',
|
|
'location_info': '4-4',
|
|
'details': 'This is a test operation',
|
|
'url': 'http://example.com/1234',
|
|
'doctrine': 'Foxcats',
|
|
'organizer': 'Example FC'
|
|
}
|
|
}
|
|
self.assertDictEqual(expected_result, result)
|
|
|
|
# Test None response
|
|
# Arrange
|
|
get_endpoint.return_value = None
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_operations()
|
|
|
|
# Assert
|
|
self.assertIsNone(result)
|
|
|
|
# Test Empty response
|
|
# Arrange
|
|
get_endpoint.return_value = {'Data': []}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_operations()
|
|
|
|
# Assert
|
|
self.assertDictEqual({}, result)
|
|
|
|
@mock.patch('fleetup.managers.FleetUpManager.get_endpoint')
|
|
def test_get_fleetup_timers(self, get_endpoint):
|
|
|
|
get_endpoint.return_value = {"Data": [
|
|
{
|
|
'ExpiresString': '2017-05-06 11:11:11',
|
|
'SolarSystem': 'Jita',
|
|
'Planet': '4',
|
|
'Moon': '4',
|
|
'Owner': 'Caldari Navy',
|
|
'Type': 'Caldari Station',
|
|
'TimerType': 'Armor',
|
|
'Notes': 'Burn Jita?'
|
|
}
|
|
]}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_timers()
|
|
|
|
# Asset
|
|
self.assertTrue(get_endpoint.called)
|
|
args, kwargs = get_endpoint.call_args
|
|
self.assertEqual(args[0],
|
|
FleetUpManager.BASE_URL + '/Timers/' +
|
|
FleetUpManager.GROUP_ID)
|
|
expected_result = {
|
|
'2017-05-06 11:11:11': {
|
|
'expires': datetime.datetime(2017, 5, 6, 11, 11, 11),
|
|
'solarsystem': 'Jita',
|
|
'planet': '4',
|
|
'moon': '4',
|
|
'owner': 'Caldari Navy',
|
|
'type': 'Caldari Station',
|
|
'timer_type': 'Armor',
|
|
'notes': 'Burn Jita?'
|
|
}
|
|
}
|
|
self.assertDictEqual(expected_result, result)
|
|
|
|
# Test None response
|
|
# Arrange
|
|
get_endpoint.return_value = None
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_timers()
|
|
|
|
# Assert
|
|
self.assertIsNone(result)
|
|
|
|
# Test Empty response
|
|
# Arrange
|
|
get_endpoint.return_value = {'Data': []}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_timers()
|
|
|
|
# Assert
|
|
self.assertDictEqual({}, result)
|
|
|
|
@mock.patch('fleetup.managers.FleetUpManager.get_endpoint')
|
|
def test_get_fleetup_doctrines(self, get_endpoint):
|
|
|
|
get_endpoint.return_value = {"Data": [
|
|
{
|
|
'TestData': True
|
|
}
|
|
]}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_doctrines()
|
|
|
|
# Asset
|
|
self.assertTrue(get_endpoint.called)
|
|
args, kwargs = get_endpoint.call_args
|
|
self.assertEqual(args[0],
|
|
FleetUpManager.BASE_URL + '/Doctrines/' +
|
|
FleetUpManager.GROUP_ID)
|
|
expected_result = {
|
|
'fleetup_doctrines': [{
|
|
'TestData': True
|
|
}]
|
|
}
|
|
self.assertDictEqual(expected_result, result)
|
|
|
|
# Test None response
|
|
# Arrange
|
|
get_endpoint.return_value = None
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_doctrines()
|
|
|
|
# Assert
|
|
self.assertIsNone(result)
|
|
|
|
# Test Empty response
|
|
# Arrange
|
|
get_endpoint.return_value = {'Data': []}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_doctrines()
|
|
|
|
# Assert
|
|
self.assertDictEqual({"fleetup_doctrines": []}, result)
|
|
|
|
@mock.patch('fleetup.managers.FleetUpManager.get_endpoint')
|
|
def test_get_fleetup_doctrine(self, get_endpoint):
|
|
|
|
get_endpoint.return_value = {"Data": [
|
|
{
|
|
'TestData': True
|
|
}
|
|
]}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_doctrine(1234)
|
|
|
|
# Asset
|
|
self.assertTrue(get_endpoint.called)
|
|
args, kwargs = get_endpoint.call_args
|
|
self.assertEqual(args[0],
|
|
FleetUpManager.BASE_URL + '/DoctrineFittings/1234')
|
|
expected_result = {
|
|
'fitting_doctrine': {'Data': [{
|
|
'TestData': True
|
|
}]}
|
|
}
|
|
self.assertDictEqual(expected_result, result)
|
|
|
|
# Test None response
|
|
# Arrange
|
|
get_endpoint.return_value = None
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_doctrine(1234)
|
|
|
|
# Assert
|
|
self.assertIsNone(result)
|
|
|
|
# Test Empty response
|
|
# Arrange
|
|
get_endpoint.return_value = {'Data': []}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_doctrine(1234)
|
|
|
|
# Assert
|
|
self.assertDictEqual({"fitting_doctrine": {'Data': []}}, result)
|
|
|
|
@mock.patch('fleetup.managers.FleetUpManager.get_endpoint')
|
|
def test_get_fleetup_fittings(self, get_endpoint):
|
|
|
|
get_endpoint.return_value = {"Data": [
|
|
{
|
|
'FittingId': 1234,
|
|
'Name': 'Foxcat',
|
|
'EveTypeId': 17726,
|
|
'HullType': 'Battleship',
|
|
'ShipType': 'Apocalypse Navy Issue',
|
|
'EstPrice': 500000000,
|
|
'Faction': 'Amarr',
|
|
'Categories': ["Armor", "Laser"],
|
|
'LastUpdatedString': '2017-05-06 11:11:11',
|
|
}
|
|
]}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_fittings()
|
|
|
|
# Asset
|
|
self.assertTrue(get_endpoint.called)
|
|
expected_result = {
|
|
1234: {
|
|
'fitting_id': 1234,
|
|
'name': 'Foxcat',
|
|
'icon_id': 17726,
|
|
'hull': 'Battleship',
|
|
'shiptype': 'Apocalypse Navy Issue',
|
|
'estimated': 500000000,
|
|
'faction': 'Amarr',
|
|
'categories': ["Armor", "Laser"],
|
|
'last_update': datetime.datetime(2017, 5, 6, 11, 11, 11)
|
|
}
|
|
}
|
|
self.assertDictEqual(expected_result, result)
|
|
|
|
# Test None response
|
|
# Arrange
|
|
get_endpoint.return_value = None
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_fittings()
|
|
|
|
# Assert
|
|
self.assertIsNone(result)
|
|
|
|
# Test Empty response
|
|
# Arrange
|
|
get_endpoint.return_value = {'Data': []}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_fittings()
|
|
|
|
# Assert
|
|
self.assertDictEqual({}, result)
|
|
|
|
@mock.patch('fleetup.managers.FleetUpManager.get_endpoint')
|
|
def test_get_fleetup_fitting(self, get_endpoint):
|
|
|
|
get_endpoint.return_value = {"Data":
|
|
{
|
|
'FittingData': [{}]
|
|
}
|
|
}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_fitting(1234)
|
|
|
|
# Asset
|
|
self.assertTrue(get_endpoint.called)
|
|
args, kwargs = get_endpoint.call_args
|
|
self.assertEqual(args[0], FleetUpManager.BASE_URL + '/Fitting/1234')
|
|
expected_result = {
|
|
'fitting_data': {
|
|
'FittingData': [{}]
|
|
}
|
|
}
|
|
self.assertDictEqual(expected_result, result)
|
|
|
|
# Test None response
|
|
# Arrange
|
|
get_endpoint.return_value = None
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_fitting(1234)
|
|
|
|
# Assert
|
|
self.assertIsNone(result)
|
|
|
|
# Test Empty response
|
|
# Arrange
|
|
get_endpoint.return_value = {'Data': {}}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_fitting(1234)
|
|
|
|
# Assert
|
|
self.assertDictEqual({"fitting_data": {}}, result)
|
|
|
|
@mock.patch('fleetup.managers.FleetUpManager.get_endpoint')
|
|
def test_get_fleetup_doctrineid(self, get_endpoint):
|
|
|
|
get_endpoint.return_value = {
|
|
"Data": {
|
|
'Doctrines': [{'DoctrineId': 4567}]
|
|
}
|
|
}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_doctrineid(1234)
|
|
|
|
# Asset
|
|
self.assertTrue(get_endpoint.called)
|
|
args, kwargs = get_endpoint.call_args
|
|
self.assertEqual(args[0], FleetUpManager.BASE_URL + '/Fitting/1234')
|
|
|
|
self.assertEqual(4567, result)
|
|
|
|
# Test None response
|
|
# Arrange
|
|
get_endpoint.return_value = None
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_doctrineid(1234)
|
|
|
|
# Assert
|
|
self.assertIsNone(result)
|
|
|
|
# Test Empty response
|
|
# Arrange
|
|
get_endpoint.return_value = {'Data': {}}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_doctrineid(1234)
|
|
|
|
# Assert
|
|
self.assertDictEqual({}, result)
|
|
|
|
@mock.patch('fleetup.managers.FleetUpManager.get_endpoint')
|
|
def test_get_fleetup_fitting_eft(self, get_endpoint):
|
|
|
|
get_endpoint.return_value = {
|
|
"Data": {
|
|
'FittingData': '[Apocalypse Navy Issue, Foxcat]'
|
|
}
|
|
}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_fitting_eft(1234)
|
|
|
|
# Asset
|
|
self.assertTrue(get_endpoint.called)
|
|
args, kwargs = get_endpoint.call_args
|
|
self.assertEqual(args[0], FleetUpManager.BASE_URL + '/Fitting/1234/eft')
|
|
|
|
self.assertDictEqual({"fitting_eft": '[Apocalypse Navy Issue, Foxcat]'},
|
|
result)
|
|
|
|
# Test None response
|
|
# Arrange
|
|
get_endpoint.return_value = None
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_fitting_eft(1234)
|
|
|
|
# Assert
|
|
self.assertIsNone(result)
|
|
|
|
# Test Empty response
|
|
# Arrange
|
|
get_endpoint.return_value = {'Data': {}}
|
|
|
|
# Act
|
|
result = FleetUpManager.get_fleetup_fitting_eft(1234)
|
|
|
|
# Assert
|
|
self.assertDictEqual({"fitting_eft": {}}, result)
|