def test_disabling_not_side_effect(self): # Setup src_attr = self.mkattr() tgt_attr = self.mkattr() modifier = self.mkmod(affectee_filter=ModAffecteeFilter.item, affectee_domain=ModDomain.self, affectee_attr_id=tgt_attr.id, operator=ModOperator.post_mul, affector_attr_id=src_attr.id) effect = self.mkeffect(category_id=EffectCategoryId.passive, modifiers=[modifier]) fit = Fit() item = Booster( self.mktype(attrs={ tgt_attr.id: 100, src_attr.id: 1.2 }, effects=[effect]).id) fit.boosters.add(item) self.assertAlmostEqual(item.attrs[tgt_attr.id], 120) # Verification with self.assertRaises(NoSuchSideEffectError): item.set_side_effect_status(effect.id, False) self.assertNotIn(effect.id, item.side_effects) self.assertAlmostEqual(item.attrs[tgt_attr.id], 120) # Cleanup self.assert_solsys_buffers_empty(fit.solar_system) self.assert_log_entries(0)
def test_enabling(self): # Setup chance_attr = self.mkattr() src_attr = self.mkattr() tgt_attr = self.mkattr() modifier = self.mkmod(affectee_filter=ModAffecteeFilter.item, affectee_domain=ModDomain.self, affectee_attr_id=tgt_attr.id, operator=ModOperator.post_mul, affector_attr_id=src_attr.id) effect = self.mkeffect(category_id=EffectCategoryId.passive, fitting_usage_chance_attr_id=chance_attr.id, modifiers=[modifier]) fit = Fit() item = Booster( self.mktype(attrs={ chance_attr.id: 0.5, tgt_attr.id: 100, src_attr.id: 1.2 }, effects=[effect]).id) fit.boosters.add(item) self.assertAlmostEqual(item.attrs[tgt_attr.id], 100) # Action item.set_side_effect_status(effect.id, True) # Verification self.assertIs(item.side_effects[effect.id].status, True) self.assertAlmostEqual(item.attrs[tgt_attr.id], 120) # Cleanup self.assert_solsys_buffers_empty(fit.solar_system) self.assert_log_entries(0)
def test_enabling(self): # Setup chance_attr = self.mkattr() src_attr = self.mkattr() tgt_attr = self.mkattr() modifier = self.mkmod( affectee_filter=ModAffecteeFilter.item, affectee_domain=ModDomain.self, affectee_attr_id=tgt_attr.id, operator=ModOperator.post_mul, affector_attr_id=src_attr.id) effect = self.mkeffect( category_id=EffectCategoryId.passive, fitting_usage_chance_attr_id=chance_attr.id, modifiers=[modifier]) fit = Fit() item = Booster(self.mktype( attrs={ chance_attr.id: 0.5, tgt_attr.id: 100, src_attr.id: 1.2}, effects=[effect]).id) fit.boosters.add(item) self.assertAlmostEqual(item.attrs[tgt_attr.id], 100) # Action item.set_side_effect_status(effect.id, True) # Verification self.assertIs(item.side_effects[effect.id].status, True) self.assertAlmostEqual(item.attrs[tgt_attr.id], 120) # Cleanup self.assert_solsys_buffers_empty(fit.solar_system) self.assert_log_entries(0)
def test_disabling_not_side_effect(self): # Setup src_attr = self.mkattr() tgt_attr = self.mkattr() modifier = self.mkmod( affectee_filter=ModAffecteeFilter.item, affectee_domain=ModDomain.self, affectee_attr_id=tgt_attr.id, operator=ModOperator.post_mul, affector_attr_id=src_attr.id) effect = self.mkeffect( category_id=EffectCategoryId.passive, modifiers=[modifier]) fit = Fit() item = Booster(self.mktype( attrs={tgt_attr.id: 100, src_attr.id: 1.2}, effects=[effect]).id) fit.boosters.add(item) self.assertAlmostEqual(item.attrs[tgt_attr.id], 120) # Verification with self.assertRaises(NoSuchSideEffectError): item.set_side_effect_status(effect.id, False) self.assertNotIn(effect.id, item.side_effects) self.assertAlmostEqual(item.attrs[tgt_attr.id], 120) # Cleanup self.assert_solsys_buffers_empty(fit.solar_system) self.assert_log_entries(0)
def test_disabling_item_not_loaded(self): # Setup effect_id = self.allocate_effect_id() fit = Fit() item = Booster(self.allocate_type_id()) fit.boosters.add(item) # Verification with self.assertRaises(NoSuchSideEffectError): item.set_side_effect_status(effect_id, False) # Cleanup self.assert_solsys_buffers_empty(fit.solar_system) self.assert_log_entries(0)
def test_data(self): # Setup chance_attr1 = self.mkattr() chance_attr2 = self.mkattr() src_attr = self.mkattr() modifier = self.mkmod( affectee_filter=ModAffecteeFilter.item, affectee_domain=ModDomain.self, affectee_attr_id=chance_attr2.id, operator=ModOperator.post_percent, affector_attr_id=src_attr.id) effect1 = self.mkeffect( category_id=EffectCategoryId.passive, fitting_usage_chance_attr_id=chance_attr1.id) effect2 = self.mkeffect( category_id=EffectCategoryId.passive, fitting_usage_chance_attr_id=chance_attr2.id) effect3 = self.mkeffect( category_id=EffectCategoryId.passive, modifiers=[modifier]) fit = Fit() item = Booster(self.mktype( attrs={ chance_attr1.id: 0.5, chance_attr2.id: 0.1, src_attr.id: -25}, effects=(effect1, effect2, effect3)).id) fit.boosters.add(item) item.set_side_effect_status(effect2.id, True) # Verification side_effects = item.side_effects self.assertEqual(len(side_effects), 2) self.assertIn(effect1.id, side_effects) side_effect1 = side_effects[effect1.id] self.assertAlmostEqual(side_effect1.chance, 0.5) self.assertIs(side_effect1.status, False) self.assertIn(effect2.id, side_effects) side_effect2 = side_effects[effect2.id] self.assertAlmostEqual(side_effect2.chance, 0.075) self.assertIs(side_effect2.status, True) # Cleanup self.assert_solsys_buffers_empty(fit.solar_system) self.assert_log_entries(0)
def test_data(self): # Setup chance_attr1 = self.mkattr() chance_attr2 = self.mkattr() src_attr = self.mkattr() modifier = self.mkmod(affectee_filter=ModAffecteeFilter.item, affectee_domain=ModDomain.self, affectee_attr_id=chance_attr2.id, operator=ModOperator.post_percent, affector_attr_id=src_attr.id) effect1 = self.mkeffect(category_id=EffectCategoryId.passive, fitting_usage_chance_attr_id=chance_attr1.id) effect2 = self.mkeffect(category_id=EffectCategoryId.passive, fitting_usage_chance_attr_id=chance_attr2.id) effect3 = self.mkeffect(category_id=EffectCategoryId.passive, modifiers=[modifier]) fit = Fit() item = Booster( self.mktype(attrs={ chance_attr1.id: 0.5, chance_attr2.id: 0.1, src_attr.id: -25 }, effects=(effect1, effect2, effect3)).id) fit.boosters.add(item) item.set_side_effect_status(effect2.id, True) # Verification side_effects = item.side_effects self.assertEqual(len(side_effects), 2) self.assertIn(effect1.id, side_effects) side_effect1 = side_effects[effect1.id] self.assertAlmostEqual(side_effect1.chance, 0.5) self.assertIs(side_effect1.status, False) self.assertIn(effect2.id, side_effects) side_effect2 = side_effects[effect2.id] self.assertAlmostEqual(side_effect2.chance, 0.075) self.assertIs(side_effect2.status, True) # Cleanup self.assert_solsys_buffers_empty(fit.solar_system) self.assert_log_entries(0)
def test_persistence(self): # Here we check that when item type doesn't have effect which was # disabled anymore, everything runs as expected, and when this effect # appears again - it's disabled # Setup chance_attr1_id = self.allocate_attr_id('src1', 'src2') self.mkattr(src='src1', attr_id=chance_attr1_id) self.mkattr(src='src2', attr_id=chance_attr1_id) chance_attr2 = self.mkattr(src='src1') chance_attr3 = self.mkattr(src='src1') # 1st effect exists as side-effect in both sources effect1_id = self.allocate_effect_id('src1', 'src2') effect1_src1 = self.mkeffect( src='src1', effect_id=effect1_id, category_id=EffectCategoryId.passive, fitting_usage_chance_attr_id=chance_attr1_id) effect1_src2 = self.mkeffect( src='src2', effect_id=effect1_id, category_id=EffectCategoryId.passive, fitting_usage_chance_attr_id=chance_attr1_id) # 2nd effect exists as side-effect in src1, and as regular effect in # src2 effect2_id = self.allocate_effect_id('src1', 'src2') effect2_src1 = self.mkeffect( src='src1', effect_id=effect2_id, category_id=EffectCategoryId.passive, fitting_usage_chance_attr_id=chance_attr2.id) effect2_src2 = self.mkeffect(src='src2', effect_id=effect2_id, category_id=EffectCategoryId.passive) # 3rd effect exists as side-effect in src1 and doesn't exist in src2 at # all effect3_id = self.allocate_effect_id('src1', 'src2') effect3_src1 = self.mkeffect( src='src1', effect_id=effect3_id, category_id=EffectCategoryId.passive, fitting_usage_chance_attr_id=chance_attr3.id) item_type_id = self.allocate_type_id('src1', 'src2') self.mktype(src='src1', type_id=item_type_id, attrs={ chance_attr1_id: 0.2, chance_attr2.id: 0.3, chance_attr3.id: 0.4 }, effects=(effect1_src1, effect2_src1, effect3_src1)) self.mktype(src='src2', type_id=item_type_id, attrs={chance_attr1_id: 0.7}, effects=(effect1_src2, effect2_src2)) fit = Fit() item = Booster(item_type_id) fit.boosters.add(item) item.set_side_effect_status(effect1_id, True) item.set_side_effect_status(effect2_id, True) item.set_side_effect_status(effect3_id, True) # Action fit.solar_system.source = 'src2' # Verification side_effects = item.side_effects self.assertEqual(len(side_effects), 1) self.assertIn(effect1_id, side_effects) side_effect1 = side_effects[effect1_id] self.assertAlmostEqual(side_effect1.chance, 0.7) self.assertIs(side_effect1.status, True) # Action fit.solar_system.source = 'src1' # Verification side_effects = item.side_effects self.assertEqual(len(side_effects), 3) self.assertIn(effect1_id, side_effects) side_effect1 = side_effects[effect1_id] self.assertAlmostEqual(side_effect1.chance, 0.2) self.assertIs(side_effect1.status, True) self.assertIn(effect2_id, side_effects) side_effect2 = side_effects[effect2_id] self.assertAlmostEqual(side_effect2.chance, 0.3) self.assertIs(side_effect2.status, True) self.assertIn(effect3_id, side_effects) side_effect3 = side_effects[effect3_id] self.assertAlmostEqual(side_effect3.chance, 0.4) self.assertIs(side_effect3.status, True) # Cleanup self.assert_solsys_buffers_empty(fit.solar_system) self.assert_log_entries(0)