def test_coalition_newsfeed(self): """ Newsfeeds describes everything. """ self.p.name = "p1" self.p.save() self.p2.name = "p2" self.p2.save() v2 = MDCVoteOrder(player=self.p2, coalition=MDCVoteOrder.BANK) v2.save() # Give priority to player 1 s = Share(corporation=self.c, player=self.p, turn=self.g.current_turn) s.save() s2 = Share(corporation=self.c2, player=self.p, turn=self.g.current_turn) s2.save() self.g.resolve_current_turn() ns = Newsfeed.objects.last().content self.assertIn(self.p.name, ns) self.assertIn(self.p2.name, ns) self.assertIn(s.corporation.base_corporation.name, ns) self.assertIn(s2.corporation.base_corporation.name, ns) self.assertIn(self.v.get_coalition_display(), ns) self.assertIn(v2.get_coalition_display(), ns) self.assertIn("3 voix", ns) self.assertIn("1 voix", ns)
def test_coalition_newsfeed(self): """ Newsfeeds describes everything. """ self.p.name = "p1" self.p.save() self.p2.name = "p2" self.p2.save() v2 = MDCVoteOrder( player=self.p2, coalition=MDCVoteOrder.BANK ) v2.save() # Give priority to player 1 s = Share(corporation=self.c, player=self.p, turn=self.g.current_turn) s.save() s2 = Share(corporation=self.c2, player=self.p, turn=self.g.current_turn) s2.save() self.g.resolve_current_turn() ns = Newsfeed.objects.last().content self.assertIn(self.p.name, ns) self.assertIn(self.p2.name, ns) self.assertIn(s.corporation.base_corporation.name, ns) self.assertIn(s2.corporation.base_corporation.name, ns) self.assertIn(self.v.get_coalition_display(), ns) self.assertIn(v2.get_coalition_display(), ns) self.assertIn("3 voix", ns) self.assertIn("1 voix", ns)
def test_one_top_holder(self): """ Test that a top holder's vote is correctly weighed """ s = Share(corporation=self.c, player=self.p, turn=self.g.current_turn) s.save() self.assertEqual(self.v.get_weight(), 2) self.assertEqual(self.v.get_friendly_corporations(), [self.c])
def test_share_creation_automatically_set_turn(self): """ Share should be created at current turn """ s = Share(corporation=self.g.corporation_set.get( base_corporation_slug="renraku"), player=self.p) s.save() self.assertEqual(s.turn, self.g.current_turn)
def test_share_creation_automatically_set_turn(self): """ Share should be created at current turn """ s = Share( corporation=self.g.corporation_set.get(base_corporation_slug="renraku"), player=self.p ) s.save() self.assertEqual(s.turn, self.g.current_turn)
def test_share_cant_be_updated(self): """ Share should be created at current turn """ s = Share(corporation=self.g.corporation_set.get( base_corporation_slug="renraku"), player=self.p) s.save() self.g.current_turn += 1 self.g.save() self.assertRaises(IntegrityError, s.save)
def test_one_top_holder(self): """ Test that a top holder's vote is correctly weighed """ s = Share( corporation=self.c, player=self.p, turn=self.g.current_turn ) s.save() self.assertEqual(self.v.get_weight(), 2) self.assertEqual(self.v.get_friendly_corporations(), [self.c])
def test_share_cant_be_updated(self): """ Share should be created at current turn """ s = Share( corporation=self.g.corporation_set.get(base_corporation_slug="renraku"), player=self.p ) s.save() self.g.current_turn += 1 self.g.save() self.assertRaises(IntegrityError, s.save)
def test_dividend_task_applied_medium_corporation(self): """ The player should get dividend for previous shares """ s = Share( player=self.p, corporation=self.medium_corporation ) s.save() money = self.reload(self.p).money self.g.resolve_current_turn() # We expect dividend on this share expected = money + DividendTask.SHARE_BASE_VALUE * self.reload(self.medium_corporation).assets self.assertEqual(self.reload(self.p).money, int(expected))
def test_dividend_task_applied_last_corporation(self): """ The player should get dividend for previous shares, with malus if corporation is last """ s = Share( player=self.p, corporation=self.last_corporation ) s.save() money = self.reload(self.p).money self.g.resolve_current_turn() # We expect dividend on this share, taking into account the fact that this corporation is the last. expected = money + DividendTask.SHARE_BASE_VALUE * self.reload(self.last_corporation).assets * DividendTask.LAST_BONUS self.assertEqual(self.reload(self.p).money, int(expected))
def test_top_holder_two_corporations(self): """ Test when a player is the top holder in two corporations """ s = Share( corporation=self.c, player=self.p, ) s.save() s2 = Share( corporation=self.c2, player=self.p, ) s2.save() self.assertEqual(self.v.get_weight(), 3) self.assertItemsEqual(self.v.get_friendly_corporations(), [self.c, self.c2])
def test_equality_case(self): """ Test when two players have the same amount of shares """ s = Share( corporation=self.c, player=self.p, ) s.save() p2 = Player(game=self.g) p2.save() s2 = Share( corporation=self.c, player=p2, ) s2.save() self.assertEqual(self.v.get_weight(), 1)
def test_complex_dividend_task(self): """ The player should get dividend for previous shares, with malus if corporation is last """ s = Share( player=self.p, corporation=self.medium_corporation ) s.save() s2 = Share( player=self.p, corporation=self.medium_corporation ) s2.save() s3 = Share( player=self.p, corporation=self.medium_corporation ) s3.save() money = self.reload(self.p).money self.g.resolve_current_turn() # We expect dividend on all shares expected = money + 3 * DividendTask.SHARE_BASE_VALUE * self.reload(self.medium_corporation).assets self.assertEqual(self.reload(self.p).money, int(expected))
class CitizenshipSignalsTest(EngineTestCase): def setUp(self): super(CitizenshipSignalsTest, self).setUp() self.s = Share( player=self.p, corporation=self.c ) self.s.save() def test_get_citizenship_first_time_does_not_create_remove_citizenship_event(self): """ When you get citizenship for the first time, you should only fire the event of add_citizenship """ # create the function that will catch the signal @receiver(game_event) def catch_game_event(sender, instance, event_type, **kwargs): if event_type == 'ADD_CITIZENSHIP': self.g.add_citizenship_was_called = True elif event_type == 'REMOVE_CITIZENSHIP': raise Exception("Should not happen") # Change citizenship self.o = CitizenshipOrder( player=self.p, corporation=self.c ) self.o.clean() self.o.save() self.g.resolve_current_turn() self.assertTrue(self.g.add_citizenship_was_called) # disconnect receiver game_event.disconnect(catch_game_event)
class OrdersTest(EngineTestCase): def setUp(self): super(OrdersTest, self).setUp() self.s = Share( player=self.p, corporation=self.c ) self.s.save() self.o = CitizenshipOrder( player=self.p, corporation=self.c ) self.o.clean() self.o.save() def test_citizenship_is_affected(self): """ Check if the citizenship is created """ self.g.resolve_current_turn() self.assertEqual(self.reload(self.p).citizenship.corporation, self.c)
class SignalsTest(EngineTestCase): def setUp(self): super(SignalsTest, self).setUp() self.s = Share( player=self.p, corporation=self.c ) self.s.save() self.o = CitizenShipOrder( player=self.p, corporation=self.c ) self.o.clean() self.o.save() def test_cant_create_order_twice(self): """ Order can't be created twice """ o2 = CitizenShipOrder( player=self.p, corporation=self.c ) self.assertRaises(ValidationError, o2.clean) def test_cant_get_citizenship_without_share(self): """ You need at least one share to get citizenship """ self.s.delete() self.o.delete() self.assertRaises(ValidationError, self.o.clean)
class DIncPartyLineTest(EngineTestCase): def setUp(self): """ p is top shareholder in c, p2 is top shareholder in c2, p3 is top shareholder in c3, """ super(DIncPartyLineTest, self).setUp() self.p2 = Player(game=self.g) self.p2.save() self.p3 = Player(game=self.g) self.p3.save() self.s = Share(corporation=self.c, player=self.p, turn=self.g.current_turn) self.s.save() self.s2 = Share(corporation=self.c2, player=self.p2, turn=self.g.current_turn) self.s2.save() self.s3 = Share(corporation=self.c3, player=self.p3, turn=self.g.current_turn) self.s3.save() def set_turn_line(self, L1, L2, L3): """ A little helper to set the Line each player has voted for this turn """ v = DIncVoteOrder(player=self.p, coalition=L1) v.save() v2 = DIncVoteOrder(player=self.p2, coalition=L2) v2.save() v3 = DIncVoteOrder(player=self.p3, coalition=L3) v3.save() def test_dinc_CPUB_line_effects(self): """ Test what happens when the CPUB party line is chosen """ initial_assets = self.c.assets initial_assets2 = self.c2.assets initial_assets3 = self.c3.assets self.set_turn_line(DIncVoteOrder.CPUB, DIncVoteOrder.CPUB, DIncVoteOrder.RSEC) self.g.resolve_current_turn() self.assertEqual(self.reload(self.c).assets, initial_assets + 1) self.assertEqual(self.reload(self.c2).assets, initial_assets2 + 1) self.assertEqual(self.reload(self.c3).assets, initial_assets3 - 1) def test_dinc_RSEC_good_effects(self): """ Test what happens when the RSEC party line is chosen """ self.set_turn_line(DIncVoteOrder.CONS, DIncVoteOrder.RSEC, DIncVoteOrder.RSEC) self.g.resolve_current_turn() dso = DataStealOrder( stealer_corporation=self.c2, player=self.p2, target_corporation_market=self.c.corporation_markets.first(), additional_percents=5, ) dso.save() # Reduction on first run self.assertEqual( dso.get_cost(), max(0, dso.LAUNCH_COST + dso.BASE_COST * dso.additional_percents - dso.INFLUENCE_BONUS) ) dso2 = DataStealOrder( stealer_corporation=self.c2, player=self.p2, target_corporation_market=self.c.corporation_markets.first(), additional_percents=5, ) dso2.save() # No reduction on second run self.assertEqual(dso2.get_cost(), max(0, dso2.LAUNCH_COST + dso2.BASE_COST * dso2.additional_percents)) def test_dinc_RSEC_last_turn(self): """ Should not reduce price of a run """ while self.g.current_turn < self.g.total_turn - 1: self.g.resolve_current_turn() self.set_turn_line(DIncVoteOrder.CONS, DIncVoteOrder.RSEC, DIncVoteOrder.RSEC) self.g.resolve_current_turn() dso3 = DataStealOrder( stealer_corporation=self.c2, player=self.p2, target_corporation_market=self.c.corporation_markets.first(), additional_percents=5, ) dso3.save() # Reduction on first run self.assertEqual(dso3.get_cost(), dso3.LAUNCH_COST + dso3.BASE_COST * dso3.additional_percents) def test_dinc_RSEC_bad_effects_apply_on_CONS(self): """ Test what happens when the RSEC party line is chosen """ self.set_turn_line(DIncVoteOrder.CONS, DIncVoteOrder.RSEC, DIncVoteOrder.RSEC) self.g.resolve_current_turn() common_corporation_market = self.c.get_common_corporation_market(self.c2) dso = DataStealOrder( stealer_corporation=self.c2, player=self.p, target_corporation_market=common_corporation_market, additional_percents=5, ) dso.save() begin_assets_stealer = dso.stealer_corporation.assets self.g.resolve_current_turn() # Test that the run fail self.assertEqual(self.reload(dso.stealer_corporation).assets, begin_assets_stealer) def test_dinc_RSEC_bad_effects_do_not_apply_on_CPUB(self): """ Test what happens when the RSEC party line is chosen """ self.set_turn_line(DIncVoteOrder.CPUB, DIncVoteOrder.RSEC, DIncVoteOrder.RSEC) self.g.resolve_current_turn() common_corporation_market = self.c.get_common_corporation_market(self.c2) dso = DataStealOrder( stealer_corporation=self.c2, player=self.p, target_corporation_market=common_corporation_market, additional_percents=5, ) dso.save() begin_assets_stealer = dso.stealer_corporation.assets self.g.resolve_current_turn() # Test that the run fail self.assertNotEqual(self.reload(dso.stealer_corporation).assets, begin_assets_stealer) def test_dinc_RSEC_bad_effects_do_not_apply_on_RSEC(self): """ Test what happens when the RSEC party line is chosen """ self.set_turn_line(DIncVoteOrder.CPUB, DIncVoteOrder.RSEC, DIncVoteOrder.RSEC) self.g.resolve_current_turn() common_corporation_market = self.c.get_common_corporation_market(self.c2) dso = DataStealOrder( stealer_corporation=self.c2, player=self.p2, target_corporation_market=common_corporation_market, additional_percents=5, ) dso.save() begin_assets_stealer = dso.stealer_corporation.assets self.g.resolve_current_turn() # Test that the run fail self.assertNotEqual(self.reload(dso.stealer_corporation).assets, begin_assets_stealer)
class MDCPartyLineTest(EngineTestCase): def setUp(self): """ p is top shareholder in c, p2 is top shareholder in c2, p3 is top shareholder in c3, """ super(MDCPartyLineTest, self).setUp() self.p2 = Player(game=self.g) self.p2.save() self.p3 = Player(game=self.g, ) self.p3.save() self.s = Share(corporation=self.c, player=self.p, turn=self.g.current_turn) self.s.save() self.s2 = Share(corporation=self.c2, player=self.p2, turn=self.g.current_turn) self.s2.save() self.s3 = Share(corporation=self.c3, player=self.p3, turn=self.g.current_turn) self.s3.save() def set_turn_line(self, L1, L2, L3): """ A little helper to set the Line each player has voted for this turn """ v = MDCVoteOrder(player=self.p, coalition=L1) v.save() v2 = MDCVoteOrder(player=self.p2, coalition=L2) v2.save() v3 = MDCVoteOrder(player=self.p3, coalition=L3) v3.save() def test_mdc_CPUB_line_effects(self): """ Test what happens when the CPUB party line is chosen """ initial_assets = self.c.assets initial_assets2 = self.c2.assets initial_assets3 = self.c3.assets self.set_turn_line(MDCVoteOrder.CPUB, MDCVoteOrder.CPUB, MDCVoteOrder.DEVE) self.g.resolve_current_turn() self.assertEqual(self.reload(self.c).assets, initial_assets + 1) self.assertEqual(self.reload(self.c2).assets, initial_assets2 + 1) self.assertEqual(self.reload(self.c3).assets, initial_assets3 - 1) def test_mdc_DEVE_line_effects(self): """ Test what happens when the CPUB party line is chosen """ initial_assets = self.c.assets initial_assets2 = self.c2.assets initial_assets3 = self.c3.assets self.set_turn_line(MDCVoteOrder.CPUB, MDCVoteOrder.DEVE, MDCVoteOrder.DEVE) self.g.resolve_current_turn() self.assertEqual(self.reload(self.c).assets, initial_assets - 1) self.assertEqual(self.reload(self.c2).assets, initial_assets2 + 1) self.assertEqual(self.reload(self.c3).assets, initial_assets3 + 1) def test_mdc_CCIB_line_positive_effects(self): """ Test what happens to voters of the CCIB party line when it is chosen """ self.set_turn_line(MDCVoteOrder.CCIB, MDCVoteOrder.CCIB, MDCVoteOrder.TRAN) self.g.resolve_current_turn() dso = DataStealOrder( stealer_corporation=self.c2, player=self.p, target_corporation=self.c, additional_percents=5, ) dso.save() # 20% malus self.assertEqual( dso.get_raw_probability(), dso.additional_percents * 10 + dso.BASE_SUCCESS_PROBABILITY - 20) # Other have no bonus dso2 = DataStealOrder( stealer_corporation=self.c, player=self.p, target_corporation=self.c3, additional_percents=5, ) dso2.save() self.assertEqual( dso2.get_raw_probability(), dso2.additional_percents * 10 + dso2.BASE_SUCCESS_PROBABILITY) def test_mdc_CCIB_line_negative_effects(self): """ Test what happens when the CCIB party line is chosen to players who voted for transparency """ self.set_turn_line(MDCVoteOrder.CCIB, MDCVoteOrder.CCIB, MDCVoteOrder.TRAN) self.g.resolve_current_turn() # Player 3 has voted transparency, so he shouldn't be able to have a protection run po = ProtectionOrder( player=self.p3, protected_corporation=self.c, defense=ProtectionOrder.SABOTAGE, ) self.assertRaises(OrderNotAvailable, po.clean) # Player 1 still can po2 = ProtectionOrder( player=self.p, protected_corporation=self.c, defense=ProtectionOrder.SABOTAGE, ) po2.clean() def test_mdc_TRAN_line_effects(self): """ Test what happens when the TRAN party line is chosen """ self.set_turn_line(MDCVoteOrder.CCIB, MDCVoteOrder.TRAN, MDCVoteOrder.TRAN) self.g.resolve_current_turn() dso = DataStealOrder( stealer_corporation=self.c2, player=self.p, target_corporation=self.c, additional_percents=5, ) dso.save() # 20% bonus self.assertEqual( dso.get_raw_probability(), dso.additional_percents * 10 + dso.BASE_SUCCESS_PROBABILITY - 20) dso2 = DataStealOrder( stealer_corporation=self.c2, player=self.p2, target_corporation=self.c, additional_percents=5, ) dso2.save() # 20% malus self.assertEqual( dso2.get_raw_probability(), dso2.additional_percents * 10 + dso2.BASE_SUCCESS_PROBABILITY + 20) def test_mdc_BANK_line_positive_effect(self): """ Test what happens when BANK party line is chosen to people who voted it """ self.set_turn_line(MDCVoteOrder.BANK, MDCVoteOrder.BANK, MDCVoteOrder.DERE) self.c.update_assets(10) self.g.resolve_current_turn() # should fail, because c is first rank o = CorporationSpeculationOrder(player=self.p, corporation=self.c2, rank=1, investment=5) o.save() o.resolve() self.assertEqual(o.on_win_ratio, 2) # Default self.assertEqual(o.on_loss_ratio, 0) # 1 - 1 self.assertEqual(self.reload(self.p).money, self.initial_money) def test_mdc_BANK_line_negative_effect(self): """ Test what happens when BANK party line is chosen to people who voted deregulation """ self.set_turn_line(MDCVoteOrder.BANK, MDCVoteOrder.BANK, MDCVoteOrder.DERE) self.g.resolve_current_turn() # Player 3 has voted DERE, so he shouldn't be able to speculate o = CorporationSpeculationOrder(player=self.p3, corporation=self.c3, rank=1, investment=1) self.assertRaises(OrderNotAvailable, o.clean) # Check that player 1 still can o2 = CorporationSpeculationOrder(player=self.p, corporation=self.c3, rank=1, investment=1) o2.clean() def test_mdc_DERE_line_positive_effect(self): """ Test what happens when the DERE party line is chosen for players who voted for it """ self.set_turn_line(MDCVoteOrder.BANK, MDCVoteOrder.DERE, MDCVoteOrder.DERE) self.g.resolve_current_turn() o = CorporationSpeculationOrder(player=self.p2, corporation=self.c, rank=1, investment=5) o.save() o.resolve() self.assertEqual(o.on_win_ratio, 3) # 2 + 1 self.assertEqual(o.on_loss_ratio, 1) # Default self.assertEqual( self.reload(self.p2).money, self.initial_money + o.investment * 3) def test_mdc_DERE_line_negative_effect(self): """ Test what happens when the DERE party line is chosen for detractors """ self.set_turn_line(MDCVoteOrder.BANK, MDCVoteOrder.DERE, MDCVoteOrder.DERE) self.g.resolve_current_turn() # Player 1 has voted BANK, so he shouldn't be able to speculate o = CorporationSpeculationOrder(player=self.p, corporation=self.c3, rank=1, investment=5) self.assertRaises(OrderNotAvailable, o.clean) # Check that player 3 still can o2 = CorporationSpeculationOrder(player=self.p3, corporation=self.c3, rank=1, investment=5) o2.clean()
class MDCPartyLineTest(EngineTestCase): def setUp(self): """ p is top shareholder in c, p2 is top shareholder in c2, p3 is top shareholder in c3, """ super(MDCPartyLineTest, self).setUp() self.p2 = Player(game=self.g) self.p2.save() self.p3 = Player(game=self.g, ) self.p3.save() self.s = Share( corporation=self.c, player=self.p, turn=self.g.current_turn ) self.s.save() self.s2 = Share( corporation=self.c2, player=self.p2, turn=self.g.current_turn ) self.s2.save() self.s3 = Share( corporation=self.c3, player=self.p3, turn=self.g.current_turn ) self.s3.save() def set_turn_line(self, L1, L2, L3): """ A little helper to set the Line each player has voted for this turn """ v = MDCVoteOrder( player=self.p, coalition=L1 ) v.save() v2 = MDCVoteOrder( player=self.p2, coalition=L2 ) v2.save() v3 = MDCVoteOrder( player=self.p3, coalition=L3 ) v3.save() def test_mdc_CPUB_line_effects(self): """ Test what happens when the CPUB party line is chosen """ initial_assets = self.c.assets initial_assets2 = self.c2.assets initial_assets3 = self.c3.assets self.set_turn_line(MDCVoteOrder.CPUB, MDCVoteOrder.CPUB, MDCVoteOrder.DEVE) self.g.resolve_current_turn() self.assertEqual(self.reload(self.c).assets, initial_assets + 1) self.assertEqual(self.reload(self.c2).assets, initial_assets2 + 1) self.assertEqual(self.reload(self.c3).assets, initial_assets3 - 1) def test_mdc_DEVE_line_effects(self): """ Test what happens when the CPUB party line is chosen """ initial_assets = self.c.assets initial_assets2 = self.c2.assets initial_assets3 = self.c3.assets self.set_turn_line(MDCVoteOrder.CPUB, MDCVoteOrder.DEVE, MDCVoteOrder.DEVE) self.g.resolve_current_turn() self.assertEqual(self.reload(self.c).assets, initial_assets - 1) self.assertEqual(self.reload(self.c2).assets, initial_assets2 + 1) self.assertEqual(self.reload(self.c3).assets, initial_assets3 + 1) def test_mdc_CCIB_line_positive_effects(self): """ Test what happens to voters of the CCIB party line when it is chosen """ self.set_turn_line(MDCVoteOrder.CCIB, MDCVoteOrder.CCIB, MDCVoteOrder.TRAN) self.g.resolve_current_turn() dso = DataStealOrder( stealer_corporation=self.c2, player=self.p, target_corporation=self.c, additional_percents=5, ) dso.save() # 20% malus self.assertEqual(dso.get_raw_probability(), dso.additional_percents * 10 + dso.BASE_SUCCESS_PROBABILITY - 20) # Other have no bonus dso2 = DataStealOrder( stealer_corporation=self.c, player=self.p, target_corporation=self.c3, additional_percents=5, ) dso2.save() self.assertEqual(dso2.get_raw_probability(), dso2.additional_percents * 10 + dso2.BASE_SUCCESS_PROBABILITY) def test_mdc_CCIB_line_negative_effects(self): """ Test what happens when the CCIB party line is chosen to players who voted for transparency """ self.set_turn_line(MDCVoteOrder.CCIB, MDCVoteOrder.CCIB, MDCVoteOrder.TRAN) self.g.resolve_current_turn() # Player 3 has voted transparency, so he shouldn't be able to have a protection run po = ProtectionOrder( player=self.p3, protected_corporation=self.c, defense=ProtectionOrder.SABOTAGE, ) self.assertRaises(OrderNotAvailable, po.clean) # Player 1 still can po2 = ProtectionOrder( player=self.p, protected_corporation=self.c, defense=ProtectionOrder.SABOTAGE, ) po2.clean() def test_mdc_TRAN_line_effects(self): """ Test what happens when the TRAN party line is chosen """ self.set_turn_line(MDCVoteOrder.CCIB, MDCVoteOrder.TRAN, MDCVoteOrder.TRAN) self.g.resolve_current_turn() dso = DataStealOrder( stealer_corporation=self.c2, player=self.p, target_corporation=self.c, additional_percents=5, ) dso.save() # 20% bonus self.assertEqual(dso.get_raw_probability(), dso.additional_percents * 10 + dso.BASE_SUCCESS_PROBABILITY - 20) dso2 = DataStealOrder( stealer_corporation=self.c2, player=self.p2, target_corporation=self.c, additional_percents=5, ) dso2.save() # 20% malus self.assertEqual(dso2.get_raw_probability(), dso2.additional_percents * 10 + dso2.BASE_SUCCESS_PROBABILITY + 20) def test_mdc_BANK_line_positive_effect(self): """ Test what happens when BANK party line is chosen to people who voted it """ self.set_turn_line(MDCVoteOrder.BANK, MDCVoteOrder.BANK, MDCVoteOrder.DERE) self.c.update_assets(10) self.g.resolve_current_turn() # should fail, because c is first rank o = CorporationSpeculationOrder( player=self.p, corporation=self.c2, rank=1, investment=5 ) o.save() o.resolve() self.assertEqual(o.on_win_ratio, 2) # Default self.assertEqual(o.on_loss_ratio, 0) # 1 - 1 self.assertEqual(self.reload(self.p).money, self.initial_money) def test_mdc_BANK_line_negative_effect(self): """ Test what happens when BANK party line is chosen to people who voted deregulation """ self.set_turn_line(MDCVoteOrder.BANK, MDCVoteOrder.BANK, MDCVoteOrder.DERE) self.g.resolve_current_turn() # Player 3 has voted DERE, so he shouldn't be able to speculate o = CorporationSpeculationOrder( player=self.p3, corporation=self.c3, rank=1, investment=1 ) self.assertRaises(OrderNotAvailable, o.clean) # Check that player 1 still can o2 = CorporationSpeculationOrder( player=self.p, corporation=self.c3, rank=1, investment=1 ) o2.clean() def test_mdc_DERE_line_positive_effect(self): """ Test what happens when the DERE party line is chosen for players who voted for it """ self.set_turn_line(MDCVoteOrder.BANK, MDCVoteOrder.DERE, MDCVoteOrder.DERE) self.g.resolve_current_turn() o = CorporationSpeculationOrder( player=self.p2, corporation=self.c, rank=1, investment=5 ) o.save() o.resolve() self.assertEqual(o.on_win_ratio, 3) # 2 + 1 self.assertEqual(o.on_loss_ratio, 1) # Default self.assertEqual(self.reload(self.p2).money, self.initial_money + o.investment * 3) def test_mdc_DERE_line_negative_effect(self): """ Test what happens when the DERE party line is chosen for detractors """ self.set_turn_line(MDCVoteOrder.BANK, MDCVoteOrder.DERE, MDCVoteOrder.DERE) self.g.resolve_current_turn() # Player 1 has voted BANK, so he shouldn't be able to speculate o = CorporationSpeculationOrder( player=self.p, corporation=self.c3, rank=1, investment=5 ) self.assertRaises(OrderNotAvailable, o.clean) # Check that player 3 still can o2 = CorporationSpeculationOrder( player=self.p3, corporation=self.c3, rank=1, investment=5 ) o2.clean()
class SignalsTest(EngineTestCase): def setUp(self): super(SignalsTest, self).setUp() self.s = Share( player=self.p, corporation=self.c ) self.s.save() self.o = CitizenshipOrder( player=self.p, corporation=self.c ) self.o.clean() self.o.save() def test_cant_create_order_twice(self): """ Order can't be created twice """ o2 = CitizenshipOrder( player=self.p, corporation=self.c ) self.assertRaises(ValidationError, o2.clean) def test_cant_get_citizenship_without_share(self): """ You need at least one share to get citizenship """ self.s.delete() self.o.delete() self.assertRaises(ValidationError, self.o.clean) def test_get_citizenship_second_time_create_remove_citizenship_event(self): """ When you already have a citizenship and you change it, two events must be triggered """ # New turn because you can't change your citizenship twice in same turn self.g.resolve_current_turn() # create the function that will catch the signal @receiver(game_event) def catch_game_event(sender, instance, event_type, **kwargs): if event_type == 'ADD_CITIZENSHIP': self.g.add_citizenship_was_called = True elif event_type == 'REMOVE_CITIZENSHIP': self.g.remove_citizenship_was_called = True # Buy a share to have the new nationality self.s = Share( player=self.p, corporation=self.c2 ) self.s.save() # Change citizenship self.o = CitizenshipOrder( player=self.p, corporation=self.c2 ) self.o.clean() self.o.save() self.g.resolve_current_turn() self.assertTrue(self.g.add_citizenship_was_called) self.assertTrue(self.g.remove_citizenship_was_called) # disconnect receiver game_event.disconnect(catch_game_event)