def test_field_input_over_ideal_workload(self):
        settlement = Settlement.objects.get(name="Small Valley")
        buildings = Building.objects.get(
            type=Building.GRAIN_FIELD, settlement=settlement
        )
        buildings.quantity = 100
        buildings.save()

        for i in range(20):
            NPC.objects.create(
                name="foo",
                male=False,
                able=True,
                age_months=20*12,
                residence=None,
                origin=settlement,
                location=settlement,
                workplace=buildings,
                unit=None,
                trained_soldier=False,
                skill_fighting=0
            )

        turn_processor = TurnProcessor(settlement.tile.world)
        turn_processor.do_building_production(buildings)

        buildings.refresh_from_db()
        self.assertEqual(buildings.quantity, 100)
        self.assertEqual(buildings.worker.count(), 20)
        self.assertEqual(
            buildings.field_production_counter,
            112
        )
    def test_guild_input(self):
        settlement = Settlement.objects.get(name="Small Valley")
        guild = Building.objects.get(
            type=Building.GUILD, settlement=settlement
        )

        for i in range(10):
            NPC.objects.create(
                name="foo",
                male=False,
                able=True,
                age_months=20*12,
                residence=None,
                origin=settlement,
                location=settlement,
                workplace=guild,
                unit=None,
                trained_soldier=False,
                skill_fighting=0
            )

        turn_processor = TurnProcessor(settlement.tile.world)
        turn_processor.do_building_production(guild)

        guild.refresh_from_db()
        self.assertEqual(guild.quantity, 1)
        self.assertEqual(guild.worker.count(), 10)
        self.assertEqual(guild.field_production_counter, 10)
Beispiel #3
0
 def test_population_generation_in_empty_settlement(self):
     settlement = Settlement.objects.get(name="Small Fynkah")
     settlement.npc_set.all().delete()
     settlement.update_population()
     self.assertEqual(settlement.population, 0)
     processor = TurnProcessor(settlement.tile.world)
     processor.do_settlement_population_changes(settlement)
     self.assertEqual(settlement.population, 5)
Beispiel #4
0
    def test_tax_countdown(self):
        state = Organization.objects.get(name="Small Kingdom")
        state.tax_countdown = 7
        state.save()

        turn_processor = TurnProcessor(state.world)
        turn_processor.do_taxes()

        state.refresh_from_db()
        self.assertEqual(state.tax_countdown, 6)
Beispiel #5
0
 def test_guild_default(self):
     initialize_settlement(self.settlement)
     turn_processor = TurnProcessor(self.settlement.tile.world)
     turn_processor.do_settlement_job_updates(self.settlement)
     self.assertEqual(
         self.settlement.guilds_setting, Settlement.GUILDS_KEEP)
     self.assertTrue(
         self.settlement.get_residents().filter(
             workplace__type=Building.GRAIN_FIELD).exists())
     self.assertFalse(
         self.settlement.get_residents().filter(
             workplace__type=Building.GUILD).exists())
    def test_reset_production(self):
        settlement = Settlement.objects.get(name="Small Valley")
        buildings = Building.objects.get(
            type=Building.GRAIN_FIELD, settlement=settlement
        )
        buildings.field_production_counter = 1000
        buildings.save()
        settlement.tile.world.current_turn = 8
        settlement.tile.world.save()

        turn_processor = TurnProcessor(settlement.tile.world)
        turn_processor.do_building_production(buildings)

        buildings.refresh_from_db()
        self.assertEqual(buildings.field_production_counter, 0)
Beispiel #7
0
 def test_guild_promote(self):
     self.settlement.guilds_setting = Settlement.GUILDS_PROMOTE
     self.settlement.save()
     initialize_settlement(self.settlement)
     turn_processor = TurnProcessor(self.settlement.tile.world)
     turn_processor.do_settlement_job_updates(self.settlement)
     self.assertTrue(
         self.settlement.get_residents().filter(
             workplace__type=Building.GRAIN_FIELD).exists())
     self.assertTrue(
         self.settlement.get_residents().filter(
             workplace__type=Building.GUILD).exists())
     self.assertEqual(
         self.settlement.get_residents().filter(
             workplace__type=Building.GUILD).count(), 10)
Beispiel #8
0
    def test_conquest_success(self):
        tile = Tile.objects.get(name="More mountains")
        conqueror = Organization.objects.get(id=105)
        tile_event = TileEvent.objects.create(tile=tile,
                                              type=TileEvent.CONQUEST,
                                              organization=conqueror,
                                              counter=100000,
                                              start_turn=0)
        processor = TurnProcessor(tile.world)
        processor.do_conquests()

        tile.refresh_from_db()
        self.assertEqual(tile.controlled_by, conqueror)
        tile_event.refresh_from_db()
        self.assertEqual(tile_event.end_turn, 0)
        self.assertNotEqual(tile_event.end_turn, None)
Beispiel #9
0
    def test_basic_tax(self):
        settlement = Settlement.objects.get(name="Small Valley")
        guild = settlement.building_set.get(type=Building.GUILD)
        guild.field_production_counter = 100
        guild.save()

        turn_processor = TurnProcessor(settlement.tile.world)
        turn_processor.do_taxes()

        state = settlement.tile.controlled_by.get_violence_monopoly()
        self.assertEqual(state.tax_countdown, 12)

        char1 = Character.objects.get(id=4)
        self.assertEqual(char1.cash, 10000 + 100 * 6 / 2)
        char2 = Character.objects.get(id=8)
        self.assertEqual(char2.cash, 10000 + 100 * 6 / 2)
Beispiel #10
0
 def test_battle_with_barbarians(self):
     world = World.objects.get(id=2)
     turn_processor = TurnProcessor(world)
     unit_of_kingrom_member = WorldUnit.objects.get(id=4)
     initialize_unit(unit_of_kingrom_member)
     kingdom_member = unit_of_kingrom_member.owner_character
     settlement = kingdom_member.location
     initialize_settlement(settlement)
     generate_barbarian_unit(30, settlement)
     turn_processor.trigger_battles()
     self.assertTrue(settlement.tile.get_current_battles().exists())
     battle = settlement.tile.get_current_battles()[0]
     start_battle(battle)
     battle_tick(battle)
     generate_barbarian_unit(30, settlement)
     battle_joins(battle)
     battle_tick(battle)
Beispiel #11
0
    def test_travel_to_other_tile(self):
        response = self.client.post(reverse('world:travel'),
                                    data={'target_settlement_id': 1002},
                                    follow=True)
        self.assertRedirects(response, reverse('world:travel'))

        character = Character.objects.get(id=1)
        self.assertEqual(character.location_id, 1001)
        self.assertEqual(character.hours_in_turn_left, 15 * 24)
        self.assertEqual(character.travel_destination_id, 1002)

        turn_processor = TurnProcessor(character.world)
        turn_processor.do_travels()

        character.refresh_from_db()
        self.assertEqual(character.location_id, 1002)
        self.assertEqual(character.hours_in_turn_left, 15 * 24 - 52)
        self.assertEqual(character.travel_destination_id, None)
    def test_field_output_after_ideal_input(self):
        settlement = Settlement.objects.get(name="Small Valley")
        buildings = Building.objects.get(
            type=Building.GRAIN_FIELD, settlement=settlement
        )
        buildings.quantity = 100
        buildings.field_production_counter = 1000
        buildings.save()
        settlement.tile.world.current_turn = 6
        settlement.tile.world.save()

        for i in range(10):
            NPC.objects.create(
                name="foo",
                male=False,
                able=True,
                age_months=20*12,
                residence=None,
                origin=settlement,
                location=settlement,
                workplace=buildings,
                unit=None,
                trained_soldier=False,
                skill_fighting=0
            )

        turn_processor = TurnProcessor(settlement.tile.world)
        turn_processor.do_building_production(buildings)

        buildings.refresh_from_db()
        self.assertEqual(buildings.quantity, 100)
        self.assertEqual(buildings.worker.count(), 10)
        self.assertEqual(
            buildings.field_production_counter,
            math.floor(1000 * 6/7)
        )
        bushel_object = settlement.get_default_granary().inventoryitem_set.get(
            type=InventoryItem.GRAIN
        )
        self.assertEqual(bushel_object.quantity, math.floor(100 * 1/7 * 2.4))
Beispiel #13
0
    def test_guild_restrict(self):
        initialize_settlement(self.settlement)
        turn_processor = TurnProcessor(self.settlement.tile.world)
        turn_processor.do_settlement_job_updates(self.settlement)
        guild = self.settlement.building_set.get(type=Building.GUILD)
        for worker in list(self.settlement.get_residents().filter(
                workplace__type=Building.GRAIN_FIELD))[:30]:
            worker.workplace = guild
            worker.save()
        self.assertEqual(
            self.settlement.get_residents().filter(
                workplace__type=Building.GUILD).count(), 30)

        self.settlement.guilds_setting = Settlement.GUILDS_RESTRICT
        self.settlement.save()
        turn_processor.do_settlement_job_updates(self.settlement)
        self.assertTrue(
            self.settlement.get_residents().filter(
                workplace__type=Building.GRAIN_FIELD).exists())
        self.assertTrue(
            self.settlement.get_residents().filter(
                workplace__type=Building.GUILD).exists())
        self.assertTrue(
            0 <
            self.settlement.get_residents().filter(
                workplace__type=Building.GUILD).count() <= 20)
Beispiel #14
0
    def test_battle_create_from_units_with_allies_joining_during_battle2(self):
        self.unit_of_commonwealth.location_id = 1001
        self.unit_of_commonwealth.save()

        turn_processor = TurnProcessor(World.objects.get(id=2))
        turn_processor.trigger_battles()

        self.assertTrue(Battle.objects.exists())

        self.battle = Battle.objects.get(id=1)

        self.assertEqual(self.battle.battleside_set.count(), 2)

        self.assertTrue(
            BattleOrganization.objects.filter(
                side__battle=self.battle, organization=self.kingdom).exists())
        self.assertTrue(
            BattleOrganization.objects.filter(
                side__battle=self.battle, organization=self.horde).exists())
        self.assertFalse(
            BattleOrganization.objects.filter(
                side__battle=self.battle,
                organization=self.commonwealth).exists())
        self.assertEqual(BattleOrganization.objects.count(), 2)

        self.assertEqual(
            self.unit_of_commonwealth.owner_character.
            get_battle_participating_in(), None)

        self.assertTrue(
            BattleOrganization.objects.get(organization=self.kingdom).side.z !=
            BattleOrganization.objects.get(organization=self.horde).side.z)

        self.assertTrue(BattleCharacter.objects.exists())
        self.assertTrue(
            BattleCharacter.objects.filter(
                battle_organization__organization=self.kingdom, ).exists())
        self.assertTrue(
            BattleCharacter.objects.filter(
                battle_organization__organization=self.horde, ).exists())
        self.assertFalse(
            BattleCharacter.objects.filter(
                battle_organization__organization=self.commonwealth,
            ).exists())
        self.assertEqual(BattleCharacter.objects.count(), 2)

        self.assertTrue(BattleUnit.objects.exists())
        self.assertTrue(
            BattleUnit.objects.filter(world_unit=self.unit_of_warrior,
                                      starting_manpower=30).exists())
        self.assertFalse(
            BattleUnit.objects.filter(world_unit=self.unit_of_commonwealth,
                                      starting_manpower=30).exists())
        self.assertTrue(
            BattleUnit.objects.filter(world_unit=self.unit_of_warrior2,
                                      starting_manpower=60).exists())
        self.assertTrue(
            BattleUnit.objects.filter(world_unit=self.unit_of_kingdom,
                                      starting_manpower=100).exists())
        self.assertEqual(BattleUnit.objects.count(), 3)

        response = self.client.get(self.battle.get_absolute_url(), follow=True)
        self.assertEqual(response.status_code, 200)

        start_battle(self.battle)
        battle_tick(self.battle)

        self.unit_of_commonwealth.location_id = 1007
        self.unit_of_commonwealth.save()

        turn_processor.battle_joins()

        self.assertTrue(
            BattleOrganization.objects.filter(
                side__battle=self.battle,
                organization=self.commonwealth).exists())
        self.assertEqual(BattleOrganization.objects.count(), 3)

        self.assertTrue(
            BattleOrganization.objects.get(
                organization=self.commonwealth).side.z !=
            BattleOrganization.objects.get(organization=self.horde).side.z)

        self.assertTrue(
            BattleCharacter.objects.filter(
                battle_organization__organization=self.commonwealth,
            ).exists())
        self.assertEqual(BattleCharacter.objects.count(), 3)

        self.assertTrue(BattleUnit.objects.exists())
        self.assertTrue(
            BattleUnit.objects.filter(world_unit=self.unit_of_warrior,
                                      starting_manpower=30).exists())
        self.assertTrue(
            BattleUnit.objects.filter(world_unit=self.unit_of_commonwealth,
                                      starting_manpower=30).exists())
        self.assertTrue(
            BattleUnit.objects.filter(world_unit=self.unit_of_warrior2,
                                      starting_manpower=60).exists())
        self.assertTrue(
            BattleUnit.objects.filter(world_unit=self.unit_of_kingdom,
                                      starting_manpower=100).exists())
        self.assertEqual(BattleUnit.objects.count(), 4)

        self.assertEqual(
            self.unit_of_commonwealth.owner_character.
            get_battle_participating_in(), self.battle)

        battle_tick(self.battle)