from django.test import TestCase
from rek.models import Usuario, Formulario, PaginaPrincipal, Seccion, DatosPersonales, Informacion, Respuesta

# Create your tests here.


class UsuarioTest(TestCase):

    def test_usuario(self):
        Usuario(numDatos=3).save()

        usuarios = Usuario.objects.all()
        self.assertEquals(usuarios.count(), 1)

        usuario_db = usuarios[0]
        self.assertEquals(usuario_db.numDatos, 3)


class FormTest(TestCase):

    def test_form(self):
        Formulario(admin='rek', titulo='formulario 1', numSecciones=5, numRespuestas=0).save()
        Formulario(admin='rek', titulo='formulario 2', numSecciones=2, numRespuestas=1).save()

        forms = Formulario.objects.all()
        self.assertEquals(forms.count(), 2)

        form_db_1 = forms[0]
        self.assertEquals(form_db_1.titulo, 'formulario 1')
        self.assertEquals(form_db_1.numSecciones, 5)

        form_db_2 = forms[1]
        self.assertEquals(form_db_2.titulo, 'formulario 2')
        self.assertEquals(form_db_2.numRespuestas, 1)


class PaginaPrincipalTest(TestCase):

    def test_pagina(self):
        f = Formulario(admin='rek', titulo='recording contexts', numSecciones=2, numRespuestas=0)
        f.save()

        PaginaPrincipal(formulario=f, titulo='laboratori de fonetica', subtitulo='Primer experimento que se realiza.', cuerpo='').save()

        pagines = PaginaPrincipal.objects.all()
        self.assertEquals(pagines.count(), 1)

        pagina_db = pagines[0]
        self.assertEquals(pagina_db.titulo, 'laboratori de fonetica')
        self.assertEquals(pagina_db.subtitulo, 'Primer experimento que se realiza.')
        self.assertEquals(pagina_db.formulario.numSecciones, 2)


class SeccionTest(TestCase):

    def test_seccion(self):
        f = Formulario(admin='rek', titulo='recording contexts', numSecciones=2, numRespuestas=0)
        f.save()

        Seccion(formulario=f,
                    tipoContexto='audio',
                    texto='Repite el audio.',
                    audio='19826',
                    imagen=None,
                    posicion=1).save()

        Seccion(formulario=f,
                    tipoContexto='texto',
                    texto='Repite la palabra pato 5 veces.',
                    audio='19829',
                    imagen=None,
                    posicion=2).save()

        secciones = Seccion.objects.all()
        self.assertEquals(secciones.count(), 2)

        seccion_db_1 = secciones[0]
        self.assertEquals(seccion_db_1.texto, 'Repite el audio.')
        self.assertEquals(seccion_db_1.imagen, None)
        self.assertEquals(seccion_db_1.formulario.admin, 'rek')

        seccion_db_2 = secciones[1]
        self.assertEquals(seccion_db_2.tipoContexto, 'texto')
        self.assertEquals(seccion_db_2.audio, '19829')
        self.assertEquals(seccion_db_2.posicion, 2)


class DatosPersonalesTest(TestCase):

    def test_datos(self):
        f = Formulario(admin='rek', titulo='recording contexts', numSecciones=2, numRespuestas=0)
        f.save()

        DatosPersonales(formulario=f, numDatos=3).save()


        datos = DatosPersonales.objects.all()
        self.assertEquals(datos.count(), 1)

        datos_db = datos[0]
        self.assertEquals(datos_db.numDatos, 3)
        self.assertEquals(datos_db.formulario.numRespuestas, 0)


class InformacionTest(TestCase):

    def test_info(self):
        f = Formulario(admin='rek', titulo='recording contexts', numSecciones=2, numRespuestas=0)
        f.save()

        dp = DatosPersonales(formulario=f, numDatos=1)
        dp.save()

        Informacion(datosPersonales=dp,
                            tipo='texto',
                            pregunta='Nombre?',
                            posicion=0).save()


        infos = Informacion.objects.all()
        self.assertEquals(infos.count(), 1)

        info_db = infos[0]
        self.assertEquals(info_db.pregunta, 'Nombre?')
        self.assertEquals(info_db.datosPersonales.formulario.titulo, 'recording contexts')


class RespuestaTest(TestCase):

    def test_respuesta(self):
        f = Formulario(admin='rek', titulo='recording contexts', numSecciones=2, numRespuestas=0)
        f.save()

        s1 = Seccion(formulario=f,
                    tipoContexto='audio',
                    texto='Repite el audio.',
                    audio='19826',
                    imagen=None,
                    posicion=1)
        s1.save()

        u = Usuario(numDatos=1)
        u.save()

        Respuesta(seccion=s1,
                        audio='23456',
                        usuario=u).save()

        respuestas = Respuesta.objects.all()
        self.assertEquals(respuestas.count(), 1)

        respuesta_db = respuestas[0]
        self.assertEquals(respuesta_db.audio, '23456')
        self.assertEquals(respuesta_db.usuario.numDatos, 1)
        self.assertEquals(respuesta_db.seccion.texto, 'Repite el audio.')
