Example #1
0
class ControllerTestCase(unittest.TestCase):
    def setUp(self):
        self.con = Controller(test=True)

    def tearDown(self):
        self.con.close_db()
        self.con.drop_db()

    def crear_partida(self):
        return self.con.crear_partida('El bosque', 'En un bosque oscuro...')

    def crear_equipo(self):
        return self.con.crear_equipo(
            nombre='Hacha',
            descripcion='Hacha guerrera muy antigua',
            valor=4,
            id_mod=1,  # ataque
        )

    def crear_equipo2(self):
        return self.con.crear_equipo(
            nombre='Escudo de cartón',
            descripcion='Si se moja adiós',
            valor=-1,
            id_mod=2,  # defensa
        )

    def crear_equipom1(self):
        mod_magia = self.con.get_mod(9)
        return self.con.crear_equipo(
            nombre='Báculo de napalm',
            descripcion='Magia abrasadora',
            valor=4,
            id_mod=mod_magia.id,
        )

    def crear_equipom2(self):
        mod_magia = self.con.get_mod(9)
        return self.con.crear_equipo(
            nombre='Cardo borriquero',
            descripcion='Dicen que da suerte',
            valor=1,
            id_mod=mod_magia.id,
        )

    def crear_equipo_con_unidades(self):
        equipo_slave = self.con.crear_equipo(
            nombre='Carcaj',
            descripcion='Para llevar las flechas',
            unidades=20)

        equipo_master = self.con.crear_equipo(
            nombre='Arco',
            descripcion='Hecho con guita y maera',
            valor=1,
            id_mod=1,  # ataque
            equipo_asociado=equipo_slave.id)

        return equipo_master, equipo_slave

    def crear_personaje(self, nombre=None):
        datos = {
            'nombre': 'Salvajius',
            'profesion': 'Pescadero',
            'raza': 1,  # Humano
            'pueblo': 'Londaer',
            'fuerza': 4,
            'agilidad': 4,
            'inteligencia': 4,
            'carisma': 4,
            'combate': 4,
            'conocimientos': 4,
            'latrocinio': 4,
            'magia': 4,
            'sociales': 4,
            'partida': 1,
        }

        personaje = self.con.crear_personaje(datos)
        return personaje

    def crear_adversario(self):
        datos = {
            'nombre': 'Gork',
            'profesion': 'Artillero',
            'raza': 6,  # Goblin
            'pueblo': 'Morgul',
            'fuerza': 2,
            'agilidad': 2,
            'inteligencia': 2,
            'carisma': 1,
            'combate': 2,
            'conocimientos': 1,
            'latrocinio': 5,
            'magia': 1,
            'sociales': 1,
            'partida': 1,
        }

        adversario = self.con.crear_personaje(datos)
        return adversario

    def test_partida(self):
        # gets
        partidas = self.con.get_partidas()
        self.assertEqual(len(partidas), 0)

        # create and gets
        self.crear_partida()
        partidas = self.con.get_partidas()
        self.assertEqual(len(partidas), 1)

        # get
        partida = self.con.get_partida(1)
        self.assertEqual(partidas[0], partida)

        # edit
        self.con.editar_partida(1, 'La gruta', 'Dentro de una gruta...')
        partida = self.con.get_partida(1)
        self.assertEqual(partida.nombre, 'La gruta')

        # delete
        self.con.borrar_partida(partida.id)
        partidas = self.con.get_partidas()
        self.assertEqual(len(partidas), 0)

    def test_equipo(self):
        # gets
        equipos = self.con.get_equipos()
        self.assertEqual(len(equipos), 0)

        # create and gets
        self.crear_equipo()
        equipos = self.con.get_equipos()
        self.assertEqual(len(equipos), 1)

        # get
        equipo = self.con.get_equipo(1)
        self.assertEqual(equipos[0], equipo)

        # edit
        self.con.editar_equipo(id_equipo=1,
                               nombre='Toalla de playa',
                               descripcion='Raspa a jierro')
        equipo = self.con.get_equipo(1)
        self.assertEqual(equipo.nombre, 'Toalla de playa')

        # delete
        self.con.borrar_equipo(equipo.id)
        equipos = self.con.get_equipos()
        self.assertEqual(len(equipos), 0)

        # equipo dependiente
        equipo_master, equipo_slave = self.crear_equipo_con_unidades()
        self.assertEqual(equipo_master.equipo_asociado, equipo_slave)

    def test_personaje(self):
        # gets
        personajes = self.con.get_personajes()
        self.assertEqual(len(personajes), 0)

        # create and gets
        self.crear_partida()
        self.crear_equipo()
        self.crear_personaje()
        personajes = self.con.get_personajes(1)  # id_partida
        self.assertEqual(len(personajes), 1)

        # get
        personaje = self.con.get_personaje(1)
        self.assertEqual(personajes[0], personaje)

        # edit
        datos = {
            'nombre': 'Nunambaril',
        }
        personaje = self.con.editar_personaje(1, datos)
        self.assertEqual(personaje.nombre, 'Nunambaril')

        # delete
        self.con.borrar_personaje(personaje.id)
        personajes = self.con.get_personajes()
        self.assertEqual(len(personajes), 0)

    def test_personaje_partida(self):
        # create and gets
        partida = self.crear_partida()
        personaje = self.crear_personaje()

        # personaje_en_partida
        pj_en_partida = self.con.personaje_en_partida(personaje.id, partida.id)
        self.assertTrue(pj_en_partida,
                        "El personaje debe existir en la partida")

        partida2 = self.con.crear_partida('La sombra',
                                          'La vuelta de la sombra...')
        pj_en_partida = self.con.personaje_en_partida(personaje.id,
                                                      partida2.id)
        self.assertFalse(pj_en_partida,
                         "El personaje no debe existir en la partida")

        # get_personajes_disponibles
        pj_disponibles = self.con.get_personajes_disponibles(partida2.id)
        self.assertEqual(pj_disponibles, [personaje])

        pj_disponibles = self.con.get_personajes_disponibles(partida.id)
        self.assertEqual(pj_disponibles, [])

        # asignar_personaje_partida
        self.con.asignar_personaje_partida(personaje.id, partida2.id)
        pj_en_partida = self.con.personaje_en_partida(personaje.id,
                                                      partida2.id)
        self.assertTrue(pj_en_partida,
                        "El personaje debe existir en la partida")

        # get_partidas_personaje
        partidas_pj = self.con.get_partidas_personaje(personaje.id)
        self.assertTrue(
            len(partidas_pj) == 2, "El personaje existe en 2 partidas")
        puede = self.con.puede_quitar_pj_partida(personaje.id)
        self.assertTrue(puede)

        # quitar_personaje_partida
        self.con.quitar_personaje_partida(personaje.id, partida2.id)
        pj_en_partida = self.con.personaje_en_partida(personaje.id,
                                                      partida2.id)
        self.assertFalse(pj_en_partida,
                         "El personaje no debe existir en la partida")
        puede = self.con.puede_quitar_pj_partida(personaje.id)
        self.assertFalse(puede)

        pjs_partida1 = self.con.get_personajes(partida.id)
        self.assertEqual(pjs_partida1, [personaje])

        pj_disponibles = self.con.get_personajes_disponibles(partida2.id)
        self.assertEqual(pj_disponibles, [personaje])
        pj_disponibles = self.con.get_personajes_disponibles(partida.id)
        self.assertEqual(pj_disponibles, [])

        # probamos con 2 jugadores
        adversario = self.crear_adversario()
        pj_disponibles = self.con.get_personajes_disponibles(partida.id)
        self.assertEqual(pj_disponibles, [])
        pj_disponibles = self.con.get_personajes_disponibles(partida2.id)
        self.assertEqual(pj_disponibles, [personaje, adversario])

        self.con.asignar_personaje_partida(adversario.id, partida2.id)
        pj_disponibles = self.con.get_personajes_disponibles(partida2.id)
        self.assertEqual(pj_disponibles, [personaje])

    def test_asignar_robar(self):
        self.crear_partida()
        equipo = self.crear_equipo()
        personaje = self.crear_personaje()

        equipos = self.con.get_equipos_personaje(personaje.id)
        self.assertEqual(len(equipos), 0)

        rel = self.con.asignar_equipo(personaje.id, equipo.id)
        equipos = self.con.get_equipos_personaje(personaje.id)
        self.assertEqual(len(equipos), 1)

        self.con.desasignar_equipo(rel.id)
        equipos = self.con.get_equipos_personaje(personaje.id)
        self.assertEqual(len(equipos), 0)

    def test_tirada_sin(self):
        self.crear_partida()
        personaje = self.crear_personaje()
        dificultad = self.con.get_dificultad(1)

        # create cuerda
        mod_agilidad = self.con.get_mod(4)
        equipo = self.con.crear_equipo(
            'Cuerda',
            'Sirve para escalar',
            4,
            mod_agilidad.id,
        )

        self.con.asignar_equipo(personaje.id, equipo.id)

        ret_tirada = self.con.tirada_sin_oposicion(personaje.id, dificultad.id,
                                                   mod_agilidad.id)

        # debería de lograrlo
        self.assertTrue(ret_tirada['resultado'])

    def test_tirada_con(self):
        self.crear_partida()
        personaje = self.crear_personaje()
        adversario = self.crear_adversario()

        # create libro
        mod_inteligencia = self.con.get_mod(4)
        equipo = self.con.crear_equipo(
            'Libro',
            'Te hace mas inteligente',
            4,
            mod_inteligencia.id,
        )

        self.con.asignar_equipo(personaje.id, equipo.id)

        ret_tirada = self.con.tirada_con_oposicion(personaje.id, adversario.id,
                                                   mod_inteligencia.id, 2)

        # debería de lograrlo
        self.assertTrue(ret_tirada['resultado'])

    def test_iniciativa(self):
        self.crear_partida()
        personaje = self.crear_personaje()
        adversario = self.crear_adversario()
        mod_agilidad = self.con.get_mod(4)
        mod_magia = self.con.get_mod(9)

        equipo1 = self.con.crear_equipo(
            'Zapatos de puma',
            'Superágil al instante',
            4,
            mod_agilidad.id,
        )

        equipom1 = self.con.crear_equipo(
            'Báculo de napalm',
            'Magia abrasadora',
            4,
            mod_magia.id,
        )

        self.con.asignar_equipo(personaje.id, equipo1.id)
        self.con.asignar_equipo(personaje.id, equipom1.id)

        equipo2 = self.con.crear_equipo(
            'Zapatos de plomo',
            'Clavado al suelo',
            -4,
            mod_agilidad.id,
        )

        equipom2 = self.con.crear_equipo(
            'Cardo borriquero',
            'Dicen que da suerte',
            0,
            mod_magia.id,
        )

        self.con.asignar_equipo(adversario.id, equipo2.id)
        self.con.asignar_equipo(adversario.id, equipom2.id)

        # iniciativa normal
        ret_tirada = self.con.iniciativa(
            personaje.id,
            adversario.id,
        )

        # debería de empezar el pj
        self.assertTrue(ret_tirada['resultado'])

        # iniciativa magica
        ret_tirada = self.con.iniciativa(
            personaje.id,
            adversario.id,
            True,
            4,
            -4,
        )

        # debería de empezar el pj
        self.assertTrue(ret_tirada['resultado'])

    def test_combate(self):
        self.crear_partida()
        personaje = self.crear_personaje()
        adversario = self.crear_adversario()

        equipo1 = self.crear_equipo()
        equipo2 = self.crear_equipo2()
        equipom1 = self.crear_equipom1()
        equipom2 = self.crear_equipom2()

        self.con.asignar_equipo(personaje.id, equipo1.id)
        self.con.asignar_equipo(personaje.id, equipom1.id)
        self.con.asignar_equipo(adversario.id, equipo2.id)
        self.con.asignar_equipo(adversario.id, equipom2.id)

        # combate normal
        ret_tirada = self.con.combate(
            personaje.id,
            adversario.id,
            magia=False,
            bonus_ata=2,  # got higher ground
            bonus_def=-2,
        )

        # debería de golpear el pj
        self.assertTrue(ret_tirada['resultado'] > 0)

        # combate mágico
        ret_tirada = self.con.combate(
            personaje.id,
            adversario.id,
            magia=True,
            bonus_ata=2,  # got higher ground
            bonus_def=-2,
        )

        # debería de golpear el pj
        self.assertTrue(ret_tirada['resultado'] > 0)

    def test_equipo_m(self):
        self.crear_partida()
        personaje = self.crear_personaje()
        adversario = self.crear_adversario()

        equipo1 = self.crear_equipo()
        equipo2 = self.crear_equipo2()
        equipom1 = self.crear_equipom1()
        equipom2 = self.crear_equipom2()

        self.con.asignar_equipo(personaje.id, equipo1.id)
        self.con.asignar_equipo(personaje.id, equipom1.id)
        self.con.asignar_equipo(adversario.id, equipo2.id)
        self.con.asignar_equipo(adversario.id, equipom2.id)

        mod_magia = self.con.get_mod(9)

        magia_pjvalue = self.con.bonus_mod_personaje(mod_magia, personaje)
        magia_pnjvalue = self.con.bonus_mod_personaje(mod_magia, adversario)

        self.assertEqual(magia_pjvalue, 4)
        self.assertEqual(magia_pnjvalue, 1)