Example #1
0
    def test_givenMonsterWantsToMoveIntoAnOccupiedPosition_whenPlayingTurn_thenMonsterDoesntMove(
            self):
        monster = NormalMonster(SOME_POSITION, SOME_ENERGY, RANGE_OF_MOTION,
                                MONSTER_NAME)
        self.monsters_mock.move.side_effect = PositionAlreadyOccupied

        monster.play_turn(self.monsters_mock, WorldElements(set()))

        self.monsters_mock.move.assert_called_once()
Example #2
0
    def test_givenMonsterDoesntHaveEnoughEnergyToMove_whenPlayingTurn_thenMonsterDies(
            self):
        monster = NormalMonster(SOME_POSITION, SOME_ENERGY, RANGE_OF_MOTION,
                                MONSTER_NAME)
        self.monsters_mock.move.side_effect = NotEnoughEnergyToMove

        monster.play_turn(self.monsters_mock, WorldElements(set()))

        self.monsters_mock.remove.assert_called_once_with(monster)
Example #3
0
    def test_givenNoFoodsSurroundingMonster_whenPlayingTurn_thenMonsterMovesAnyWhere(
            self):
        monster = NormalMonster(SOME_POSITION, SOME_ENERGY, RANGE_OF_MOTION,
                                MONSTER_NAME)

        monster.play_turn(self.monsters_mock, WorldElements(set()))

        self.monsters_mock.move.assert_called_once_with(
            monster, Not(Position(0, 0)), SOME_ENERGY)
Example #4
0
    def test_givenFoodSurroundingMonster_whenPlayingTurn_thenMonsterMoveTowardFood(
            self):
        food = Food(SOME_POSITION + DELTA_POSITION_WITHIN_RANGE, SOME_ENERGY)
        monster = NormalMonster(SOME_POSITION, SOME_ENERGY, RANGE_OF_MOTION,
                                MONSTER_NAME)

        monster.play_turn(self.monsters_mock, WorldElements({food}))

        expected_movement = food.delta_position_from(monster.position)
        self.monsters_mock.move.assert_called_once_with(
            monster, expected_movement, SOME_ENERGY)
Example #5
0
    def test_givenMonsterDoesntHaveChanceToReproduce_whenPlayingTurn_thenMonsterDoesntReproduces(
            self, generate_fraction):
        generate_fraction.return_value = 2 * SOME_REPRODUCTION_PROBABILITY
        enough_energy_to_reproduce = Energy(10 - 1)
        monster = NormalMonster(
            SOME_POSITION,
            enough_energy_to_reproduce,
            RANGE_OF_MOTION,
            MONSTER_NAME,
            SOME_REPRODUCTION_PROBABILITY,
        )

        monster.play_turn(self.monsters_mock, WorldElements(set()))

        self.monsters_mock.add.assert_not_called()
Example #6
0
    def test_givenNoFoodsAtMonsterPosition_whenPlayingTurn_thenMonsterDoesnGainEnergy(
            self, generate_fraction):
        generate_fraction.return_value = 2 * SOME_REPRODUCTION_PROBABILITY
        food = Food(SOME_POSITION + SOME_POSITION, SOME_ENERGY)
        monster_energy = Energy(SOME_ENERGY_VALUE)
        monster = NormalMonster(
            SOME_POSITION,
            monster_energy,
            RANGE_OF_MOTION,
            MONSTER_NAME,
            SOME_REPRODUCTION_PROBABILITY,
        )

        monster.play_turn(self.monsters_mock, WorldElements({food}))

        expected_energy = Energy(SOME_ENERGY_VALUE)
        self.assertEqual(expected_energy, monster_energy)