diff --git a/_development/helpers_fits.py b/_development/helpers_fits.py index 0e41b9f6e..61db7a3ff 100644 --- a/_development/helpers_fits.py +++ b/_development/helpers_fits.py @@ -26,3 +26,41 @@ def KeepstarFit(DB, Gamedata, Saveddata): fit = Saveddata['Fit'](ship, "Keepstar Fit") return fit + + +# noinspection PyShadowingNames +@pytest.fixture +def CurseFit(DB, Gamedata, Saveddata): + print("Creating Curse - With Neuts") + item = DB['gamedata_session'].query(Gamedata['Item']).filter(Gamedata['Item'].name == "Curse").first() + ship = Saveddata['Ship'](item) + # setup fit + fit = Saveddata['Fit'](ship, "Curse - With Neuts") + + mod = Saveddata['Module'](DB['db'].getItem("Medium Energy Neutralizer II")) + mod.state = Saveddata['State'].ONLINE + + # Add 5 neuts + for _ in xrange(5): + fit.modules.append(mod) + + return fit + + +# noinspection PyShadowingNames +@pytest.fixture +def HeronFit(DB, Gamedata, Saveddata): + print("Creating Heron - RemoteSebo") + item = DB['gamedata_session'].query(Gamedata['Item']).filter(Gamedata['Item'].name == "Heron").first() + ship = Saveddata['Ship'](item) + # setup fit + fit = Saveddata['Fit'](ship, "Heron - RemoteSebo") + + mod = Saveddata['Module'](DB['db'].getItem("Remote Sensor Booster II")) + mod.state = Saveddata['State'].ONLINE + + # Add 5 neuts + for _ in xrange(4): + fit.modules.append(mod) + + return fit \ No newline at end of file diff --git a/tests/test_modules/test_eos/test_saveddata/test_fit_2.py b/tests/test_modules/test_eos/test_saveddata/test_fit_2.py new file mode 100644 index 000000000..632f01f32 --- /dev/null +++ b/tests/test_modules/test_eos/test_saveddata/test_fit_2.py @@ -0,0 +1,125 @@ +# TODO: Drop the `_2` from the file name once one of our fit files are renamed + +# Add root folder to python paths +# This must be done on every test in order to pass in Travis +import os +import sys +from copy import deepcopy + +script_dir = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(os.path.realpath(os.path.join(script_dir, '..', '..', '..', '..'))) + +# noinspection PyPackageRequirements +from _development.helpers import DBInMemory as DB, Gamedata, Saveddata +from _development.helpers_fits import RifterFit, KeepstarFit, HeronFit + + +def test_calculateModifiedAttributes(DB, RifterFit, KeepstarFit): + rifter_modifier_dicts = { + '_ModifiedAttributeDict__affectedBy' : 26, + '_ModifiedAttributeDict__forced' : 0, + '_ModifiedAttributeDict__intermediary' : 0, + '_ModifiedAttributeDict__modified' : 26, + '_ModifiedAttributeDict__multipliers' : 22, + '_ModifiedAttributeDict__overrides' : 0, + '_ModifiedAttributeDict__penalizedMultipliers': 0, + '_ModifiedAttributeDict__postIncreases' : 0, + '_ModifiedAttributeDict__preAssigns' : 0, + '_ModifiedAttributeDict__preIncreases' : 4, + } + + # Test before calculating attributes + for test_dict in rifter_modifier_dicts: + assert len(getattr(RifterFit.ship.itemModifiedAttributes, test_dict)) == 0 + + RifterFit.calculateModifiedAttributes() + + for test_dict in rifter_modifier_dicts: + assert len(getattr(RifterFit.ship.itemModifiedAttributes, test_dict)) == rifter_modifier_dicts[test_dict] + + # Keepstars don't have any basic skills that would change their attributes + keepstar_modifier_dicts = { + '_ModifiedAttributeDict__affectedBy' : 0, + '_ModifiedAttributeDict__forced' : 0, + '_ModifiedAttributeDict__intermediary' : 0, + '_ModifiedAttributeDict__modified' : 0, + '_ModifiedAttributeDict__multipliers' : 0, + '_ModifiedAttributeDict__overrides' : 0, + '_ModifiedAttributeDict__penalizedMultipliers': 0, + '_ModifiedAttributeDict__postIncreases' : 0, + '_ModifiedAttributeDict__preAssigns' : 0, + '_ModifiedAttributeDict__preIncreases' : 0, + } + + # Test before calculating attributes + for test_dict in keepstar_modifier_dicts: + assert len(getattr(KeepstarFit.ship.itemModifiedAttributes, test_dict)) == 0 + + KeepstarFit.calculateModifiedAttributes() + + for test_dict in keepstar_modifier_dicts: + assert len(getattr(KeepstarFit.ship.itemModifiedAttributes, test_dict)) == keepstar_modifier_dicts[test_dict] + +def test_calculateModifiedAttributes_withBooster(DB, RifterFit, HeronFit): + # TODO: This test is not currently functional or meaningful as projections are not happening correctly. + # This is true for all tested branches (master, dev, etc) + rifter_modifier_dicts = { + '_ModifiedAttributeDict__affectedBy' : 26, + '_ModifiedAttributeDict__forced' : 0, + '_ModifiedAttributeDict__intermediary' : 0, + '_ModifiedAttributeDict__modified' : 26, + '_ModifiedAttributeDict__multipliers' : 22, + '_ModifiedAttributeDict__overrides' : 0, + '_ModifiedAttributeDict__penalizedMultipliers': 0, + '_ModifiedAttributeDict__postIncreases' : 0, + '_ModifiedAttributeDict__preAssigns' : 0, + '_ModifiedAttributeDict__preIncreases' : 4, + } + + # Test before calculating attributes + for test_dict in rifter_modifier_dicts: + assert len(getattr(RifterFit.ship.itemModifiedAttributes, test_dict)) == 0 + + # Get base stats + max_target_range_1 = RifterFit.ship.getModifiedItemAttr('maxTargetRange') + scan_resolution_1 = RifterFit.ship.getModifiedItemAttr('scanResolution') + + RifterFit.clear() + RifterFit.calculateModifiedAttributes() + + # Get self calculated stats + max_target_range_2 = RifterFit.ship.getModifiedItemAttr('maxTargetRange') + scan_resolution_2 = RifterFit.ship.getModifiedItemAttr('scanResolution') + + RifterFit.clear() + # Project Heron fit onto Rifter + RifterFit._Fit__projectedFits[HeronFit.ID] = HeronFit + + # DB['saveddata_session'].commit() + # DB['saveddata_session'].flush() + # DB['saveddata_session'].refresh(HeronFit) + + RifterFit.calculateModifiedAttributes() + + # Get stats with projections + max_target_range_3 = RifterFit.ship.getModifiedItemAttr('maxTargetRange') + scan_resolution_3 = RifterFit.ship.getModifiedItemAttr('scanResolution') + + RifterFit.clear() + RifterFit.calculateModifiedAttributes(withBoosters=True) + + # Get stats with projections + max_target_range_4 = RifterFit.ship.getModifiedItemAttr('maxTargetRange') + scan_resolution_4 = RifterFit.ship.getModifiedItemAttr('scanResolution') + + RifterFit.clear() + HeronFit.calculateModifiedAttributes(targetFit=RifterFit, withBoosters=True) + RifterFit.calculateModifiedAttributes(withBoosters=True) + + # Get stats with projections + max_target_range_5 = RifterFit.ship.getModifiedItemAttr('maxTargetRange') + scan_resolution_5 = RifterFit.ship.getModifiedItemAttr('scanResolution') + + for test_dict in rifter_modifier_dicts: + assert len(getattr(RifterFit.ship.itemModifiedAttributes, test_dict)) == rifter_modifier_dicts[test_dict] +