Example #1
0
	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()
Example #2
0
    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])
Example #3
0
    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)
Example #4
0
	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))
Example #5
0
	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)
Example #6
0
    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)
Example #7
0
	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])
Example #8
0
	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)
Example #9
0
    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)
Example #10
0
	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()
Example #11
0
	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))
Example #12
0
	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))
Example #13
0
	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))
Example #14
0
	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))
Example #15
0
	def setUp(self):

		super(CitizenshipSignalsTest, self).setUp()

		self.s = Share(
			player=self.p,
			corporation=self.c
		)
		self.s.save()
Example #16
0
    def test_share_integrity(self):
        """
		Share corporation must be part of the same game as the player
		"""
        g2 = Game()
        g2.save()

        s = Share(corporation=g2.corporation_set.get(
            base_corporation_slug="renraku"),
                  player=self.p)

        self.assertRaises(IntegrityError, s.save)
Example #17
0
	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)
Example #18
0
    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()
Example #19
0
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)
Example #20
0
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)
Example #21
0
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)
Example #22
0
	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()
Example #23
0
    def test_coalition_resolution_message(self):
        """
		Beneficiary and victims get a note in resolution message
		"""
        v2 = MDCVoteOrder(player=self.p2, coalition=MDCVoteOrder.BANK)
        v2.save()

        # Give priority to player 1
        Share(corporation=self.c, player=self.p,
              turn=self.g.current_turn).save()

        self.g.resolve_current_turn()

        self.assertIn("MDC a suivi", self.p.message_set.get().content)
        self.assertIn(u"MDC a rejoint la coalition opposée",
                      self.p2.message_set.get().content)
Example #24
0
    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])
Example #25
0
    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)
Example #26
0
	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)
Example #27
0
	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])
Example #28
0
	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)
Example #29
0
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()
Example #30
0
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)
Example #31
0
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)
Example #32
0
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()
Example #33
0
	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))