Example #1
0
def cria_curso_com_materias():
    curso = Curso(curso_nome_1)
    curso.atualiza_materias(Materia(materia_nome_1))
    curso.atualiza_materias(Materia(materia_nome_2))
    curso.atualiza_materias(Materia(materia_nome_3))
    yield curso
    curso = None
Example #2
0
def _cria_curso(argumentos):
    nome_parametro = "--nome"
    materias_parametro = "--materias"
    numero_argumentos = 8
    if nome_parametro in argumentos and materias_parametro in argumentos \
            and len(argumentos) == numero_argumentos:
        try:
            nome = _pega_valor(argumentos, nome_parametro)
            materia_1 = _pega_valor(argumentos, materias_parametro)
            materia_2 = _pega_valor(argumentos, materias_parametro, 2)
            materia_3 = _pega_valor(argumentos, materias_parametro, 3)

            curso = Curso(nome)
            controller_curso = Controller(curso, bd)
            controller_curso.salva()
            registro = controller_curso.pega_registro_por_nome(nome)
            curso_id = registro.pega_id()

            controller = Controller(Materia(None), bd)
            for materia in [materia_1, materia_2, materia_3]:
                registro = controller.pega_registro_por_nome(materia)
                materia_id = registro.pega_id()
                curso.atualiza_materias(Materia(materia))

                Controller(AssociaCursoMateria(curso_id, materia_id),
                           bd).salva()
            print(f"Curso de {curso.pega_nome()} criado.")
        except Exception:
            raise
    else:
        raise ListaParametrosInvalida(LISTA_PARAMETROS_INVALIDA)
Example #3
0
 def _cria_curso(self, curso=curso, 
                     materia_1=materia_1, 
                     materia_2=materia_2, 
                     materia_3=materia_3):
     curso_1 = Curso(curso)
     curso_1.atualiza_materias(Materia(materia_1))
     curso_1.atualiza_materias(Materia(materia_2))
     curso_1.atualiza_materias(Materia(materia_3))
     return curso_1
 def test_coordenador_curso_2_nao_pode_listar_alunos_curso_1(self):
     expected = {"alunos": []}
     aluno = Aluno("maria")
     curso = Curso("fisica")
     curso.atualiza_materias(Materia("optica"))
     curso.atualiza_materias(Materia("mecanica"))
     curso.atualiza_materias(Materia("eletrica"))
     coordenador_2 = CoordenadorCurso(curso)
     aluno.inscreve_curso(self.curso)
     actual = coordenador_2.listar_detalhe_alunos()
     assert actual == expected
Example #5
0
 def test_curso_deve_ter_todas_materias_com_nomes_diferentes(self):
     curso = Curso("mat")
     curso.atualiza_materias(Materia("alg"))
     curso.atualiza_materias(Materia("calc"))
     with pytest.raises(
             Exception,
             match="O curso não pode ter duas matérias com mesmo nome."):
         curso.atualiza_materias(Materia("alg"))
Example #6
0
 def test_coordenador_geral_lista_detalhes_novo_curso(self):
     nome = "mario"
     curso = "patologia"
     aluno = Aluno(nome)
     materias = {"virus": 6}
     expected = {
         "alunos": [{
             "nome": nome,
             "coeficiente rendimento": 6,
             "materias": materias,
             "curso": curso
         }]
     }
     coordenador = CoordenadorGeral()
     curso_novo = Curso(curso)
     curso_novo.atualiza_materias(Materia("bacterias"))
     curso_novo.atualiza_materias(Materia("virus"))
     curso_novo.atualiza_materias(Materia("vermes"))
     aluno.inscreve_curso(curso_novo)
     aluno.atualiza_materias_cursadas(materias)
     actual = coordenador.listar_detalhe_alunos()
     assert actual == expected
    def test_faculdade_com_dois_alunos_aprovados_e_um_reprovado_no_curso(self):
        '''
        Faculdade de exatas. Tem 3 alunos e 5 cursos. Dois alunos fazem matérias iguais e um não faz
        nenhuma matéria com os demais.
        '''
        CatalogoCurso.limpa_catalogo()
        pedro = Aluno("Pedro")
        jose = Aluno("Jose")
        tiago = Aluno("Tiago")
        coordenador_geral = CoordenadorGeral()

        fisica = Curso("Fisica")
        fisica.atualiza_materias(Materia("Ótica"))
        fisica.atualiza_materias(Materia("Mecânica"))
        fisica.atualiza_materias(Materia("Elátrica"))
        coordenador_fisica = CoordenadorGeral(fisica)

        matematica = Curso("Matematica")
        matematica.atualiza_materias(Materia("Geometria"))
        matematica.atualiza_materias(Materia("Cálculo"))
        matematica.atualiza_materias(Materia("Algebra"))
        coordenador_matematica = CoordenadorGeral(matematica)

        informatica = Curso("Informatica")
        informatica.atualiza_materias(Materia("Programação"))
        informatica.atualiza_materias(Materia("Dados"))
        informatica.atualiza_materias(Materia("Hardware"))
        coordenador_informatica = CoordenadorGeral(informatica)

        engenharia_civil = Curso("Engenharia Civil")
        engenharia_civil.atualiza_materias(Materia("Estrutura"))
        engenharia_civil.atualiza_materias(Materia("Concreto armado"))
        engenharia_civil.atualiza_materias(Materia("Hidráulica"))
        coordenador_engenharia_civil = CoordenadorGeral(engenharia_civil)

        eletronica = Curso("Eletrônica")
        eletronica.atualiza_materias(Materia("Robótica"))
        eletronica.atualiza_materias(Materia("Chips"))
        eletronica.atualiza_materias(Materia("Circuitos"))
        coordenador_eletronica = CoordenadorGeral(eletronica)

        pedro.inscreve_curso(eletronica)
        jose.inscreve_curso(eletronica)
        tiago.inscreve_curso(engenharia_civil)

        print("\nPrimeiro semestre")
        pedro.atualiza_materias_cursadas({"Robótica": 10})
        jose.atualiza_materias_cursadas({"Robótica": 6})
        tiago.atualiza_materias_cursadas({"Concreto armado": 8})

        print("\nRelatório geral")
        print(coordenador_geral.listar_detalhe_alunos())
        print("\nRelatório dos cursos")
        print(coordenador_eletronica.listar_detalhe_alunos())
        print(coordenador_engenharia_civil.listar_detalhe_alunos())
        print(coordenador_fisica.listar_detalhe_alunos())
        print(coordenador_informatica.listar_detalhe_alunos())
        print(coordenador_matematica.listar_detalhe_alunos())

        print("\nSegundo semestre")
        pedro.atualiza_materias_cursadas({"Chips": 9})
        jose.atualiza_materias_cursadas({"Robótica": 9})
        tiago.atualiza_materias_cursadas({"Estrutura": 0})

        print("\nRelatório geral")
        print(coordenador_geral.listar_detalhe_alunos())
        print("\nRelatório dos cursos")
        print(coordenador_eletronica.listar_detalhe_alunos())
        print(coordenador_engenharia_civil.listar_detalhe_alunos())
        print(coordenador_fisica.listar_detalhe_alunos())
        print(coordenador_informatica.listar_detalhe_alunos())
        print(coordenador_matematica.listar_detalhe_alunos())

        print("\nTerceiro semestre")
        pedro.atualiza_materias_cursadas({"Circuitos": 7})
        jose.atualiza_materias_cursadas({"Chips": 9})
        tiago.atualiza_materias_cursadas({"Estrutura": 10})

        print("\nRelatório geral")
        print(coordenador_geral.listar_detalhe_alunos())
        print("\nRelatório dos cursos")
        print(coordenador_eletronica.listar_detalhe_alunos())
        print(coordenador_engenharia_civil.listar_detalhe_alunos())
        print(coordenador_fisica.listar_detalhe_alunos())
        print(coordenador_informatica.listar_detalhe_alunos())
        print(coordenador_matematica.listar_detalhe_alunos())
        pedro.calcula_situacao()
        jose.calcula_situacao()
        tiago.calcula_situacao()
        print(pedro.pega_situacao())
        print(jose.pega_situacao())
        print(tiago.pega_situacao())

        print("\nQuarto semestre")
        jose.atualiza_materias_cursadas({"Circuitos": 9.7})
        tiago.atualiza_materias_cursadas({"Hidráulica": 3})

        print("\nRelatório geral")
        print(coordenador_geral.listar_detalhe_alunos())
        print("\nRelatório dos cursos")
        print(coordenador_eletronica.listar_detalhe_alunos())
        print(coordenador_engenharia_civil.listar_detalhe_alunos())
        print(coordenador_fisica.listar_detalhe_alunos())
        print(coordenador_informatica.listar_detalhe_alunos())
        print(coordenador_matematica.listar_detalhe_alunos())
        pedro.calcula_situacao()
        jose.calcula_situacao()
        tiago.calcula_situacao()
        print(pedro.pega_situacao())
        print(jose.pega_situacao())
        print(tiago.pega_situacao())
Example #8
0
class TestCoordenadorGeral:
    def setup_method(self, cria_banco):
        self.catalogo = CatalogoCurso()
        self.catalogo.limpa_catalogo()
        self.curso_1 = Curso("direito")
        self.curso_1.atualiza_materias(Materia("civil"))
        self.curso_1.atualiza_materias(Materia("penal"))
        self.curso_1.atualiza_materias(Materia("filosofia"))
        self.curso_2 = Curso("agricola")
        self.curso_2.atualiza_materias(Materia("solos"))
        self.curso_2.atualiza_materias(Materia("plantas"))
        self.curso_2.atualiza_materias(Materia("animais"))
        self.curso_3 = Curso("engenharia")
        self.curso_3.atualiza_materias(Materia("estrutura"))
        self.curso_3.atualiza_materias(Materia("mecanica"))
        self.curso_3.atualiza_materias(Materia("concreto"))

    def teardown_method(self, method):
        self.catalogo.limpa_catalogo()
        self.curso_1 = None
        self.curso_2 = None
        self.curso_3 = None

    def test_define_id_retorna_coordenador_com_id_atualizado(self):
        expected = 1
        coordenador = CoordenadorGeral().define_id(expected)
        actual = coordenador.pega_id()
        assert actual == expected

    def test_coordenador_geral_lista_detalhes_novo_curso(self):
        nome = "mario"
        curso = "patologia"
        aluno = Aluno(nome)
        materias = {"virus": 6}
        expected = {
            "alunos": [{
                "nome": nome,
                "coeficiente rendimento": 6,
                "materias": materias,
                "curso": curso
            }]
        }
        coordenador = CoordenadorGeral()
        curso_novo = Curso(curso)
        curso_novo.atualiza_materias(Materia("bacterias"))
        curso_novo.atualiza_materias(Materia("virus"))
        curso_novo.atualiza_materias(Materia("vermes"))
        aluno.inscreve_curso(curso_novo)
        aluno.atualiza_materias_cursadas(materias)
        actual = coordenador.listar_detalhe_alunos()
        assert actual == expected

    def test_coordenador_geral_lista_detalhe_2_cursos_2_alunos_com_notas(self):
        nome_1 = "joao"
        nome_2 = "maria"
        materias_1 = {"penal": 3}
        materias_2 = {"plantas": 3, "solos": 3}
        cr = 3
        expected = {
            "alunos": [{
                "nome": nome_1,
                "coeficiente rendimento": cr,
                "materias": materias_1,
                "curso": self.curso_1.pega_nome()
            }, {
                "nome": nome_2,
                "coeficiente rendimento": cr,
                "materias": materias_2,
                "curso": self.curso_2.pega_nome()
            }]
        }
        aluno_1 = Aluno(nome_1)
        aluno_2 = Aluno(nome_2)
        aluno_1.inscreve_curso(self.curso_1)
        aluno_2.inscreve_curso(self.curso_2)
        aluno_1.atualiza_materias_cursadas(materias_1)
        aluno_2.atualiza_materias_cursadas(materias_2)
        coordenador = CoordenadorGeral()
        actual = coordenador.listar_detalhe_alunos()
        assert actual == expected

    def test_coordenador_geral_lista_detalhes_quando_2_cursos_com_alunos(self):
        nome_1 = "joao"
        nome_2 = "maria"
        expected = {
            "alunos": [{
                "nome": nome_1,
                "coeficiente rendimento": 0,
                "materias": {},
                "curso": self.curso_1.pega_nome()
            }, {
                "nome": nome_2,
                "coeficiente rendimento": 0,
                "materias": {},
                "curso": self.curso_2.pega_nome()
            }]
        }
        aluno_1 = Aluno(nome_1)
        aluno_2 = Aluno(nome_2)
        aluno_1.inscreve_curso(self.curso_1)
        aluno_2.inscreve_curso(self.curso_2)
        coordenador = CoordenadorGeral()
        actual = coordenador.listar_detalhe_alunos()
        assert actual == expected

    def test_coordenador_geral_lista_detalhes_quando_dois_cursos(self):
        expected = {"alunos": []}
        coordenador = CoordenadorGeral()
        actual = coordenador.listar_detalhe_alunos()
        assert actual == expected

    def test_coordenador_geral_lista_detalhes_quando_dois_alunos(self):
        nome_1 = "joao"
        nome_2 = "maria"
        expected = {
            "alunos": [{
                "nome": nome_1,
                "coeficiente rendimento": 0,
                "materias": {},
                "curso": self.curso_1.pega_nome()
            }, {
                "nome": nome_2,
                "coeficiente rendimento": 0,
                "materias": {},
                "curso": self.curso_1.pega_nome()
            }]
        }
        aluno_1 = Aluno(nome_1)
        aluno_2 = Aluno(nome_2)
        aluno_1.inscreve_curso(self.curso_1)
        aluno_2.inscreve_curso(self.curso_1)
        coordenador = CoordenadorGeral()
        actual = coordenador.listar_detalhe_alunos()
        assert actual == expected

    def test_coordenador_geral_lista_detalhes_alunos_quando_um_aluno(self):
        nome = "maria"
        materias = {"civil": 6}
        cr = 6
        expected = {
            "alunos": [{
                "nome": nome,
                "materias": materias,
                "coeficiente rendimento": cr,
                "curso": self.curso_1.pega_nome()
            }]
        }
        aluno = Aluno("maria")
        aluno.inscreve_curso(self.curso_1)
        aluno.atualiza_materias_cursadas(materias)
        coordenador = CoordenadorGeral()
        actual = coordenador.listar_detalhe_alunos()
        assert actual == expected
Example #9
0
class TestCurso:
    def test_curso_pode_ser_cancelado(self, cria_curso_com_materias):
        expected = SituacaoCurso.cancelado
        curso = cria_curso_com_materias
        curso.define_situacao(SituacaoCurso.cancelado)
        actual = curso.pega_situacao()
        assert actual == expected

    def test_cursos_devem_ter_nomes_diferentes_se_mesma_unidade(self):
        unidade = Unidade(unidade_nome_1)
        curso_1 = Curso(curso_nome_1)
        curso_2 = Curso(curso_nome_1)
        expected = "Curso já existente na unidade {}".format(unidade_nome_1)
        curso_1.define_unidade(unidade)
        with pytest.raises(Exception, match=expected):
            curso_2.define_unidade(unidade)

    def test_cursos_podem_ter_nomes_iguais_se_unidades_diferentes(self):
        unidade = Unidade(unidade_nome_1)
        curso_1 = Curso(curso_nome_1)
        curso_2 = Curso(curso_nome_2)
        expected = unidade_nome_1
        curso_1.define_unidade(unidade)
        curso_2.define_unidade(unidade)
        actual = curso_1.pega_unidade()
        assert actual == expected

    def setup_method(self, method):
        self.curso = Curso("Administra")
        self.curso.atualiza_materias(Materia("Política"))
        self.curso.atualiza_materias(Materia("Trabalho"))
        self.curso.atualiza_materias(Materia("Pessoas"))

    def teardown_method(self, method):
        self.curso = None

    def test_nome_curso_deve_ter_no_maximo_dez_letras(self):
        with pytest.raises(
                Exception,
                match=f"Nome do curso deve ter no máximao 10 letras."):
            Curso("AAAAAAAAAA_")

    def test_curso_nao_deve_adicionar_aluno_sem_nome(self):
        with pytest.raises(
                Exception,
                match=
                f"Não foi possível adicionar o aluno ao curso de {self.curso.pega_nome()}"
        ):
            self.curso.adiciona_aluno("")

    def test_curso_deve_ter_todas_materias_com_nomes_diferentes(self):
        curso = Curso("mat")
        curso.atualiza_materias(Materia("alg"))
        curso.atualiza_materias(Materia("calc"))
        with pytest.raises(
                Exception,
                match="O curso não pode ter duas matérias com mesmo nome."):
            curso.atualiza_materias(Materia("alg"))

    def test_curso_com_quantidade_materia_diferente_tres_retorna_uma_excecao(
            self):
        gerenciador_curso = GerenciadorCurso()
        curso = Curso("jornalismo")
        gerenciador_curso.atualiza_cursos(curso)
        gerenciador_curso.atualiza_cursos(curso)
        gerenciador_curso.atualiza_cursos(curso)
        cursos = gerenciador_curso.pega_lista_cursos()
        materia_1 = Materia("mat")
        materia_2 = Materia("bio")
        cursos[0].atualiza_materias(materia_1)
        cursos[0].atualiza_materias(materia_2)
        with pytest.raises(
                Exception,
                match="Número mínimo que matérias é três. Adicione mais 1."):
            cursos[0].pega_lista_materias()

    def test_os_cursos_podem_ter_nomes_iguais(self):
        curso_1 = Curso("adm")
        curso_2 = Curso("adm")
        actual_1 = curso_1.pega_nome()
        actual_2 = curso_2.pega_nome()
        assert actual_1 == actual_2

    def test_todo_curso_deve_ter_nome(self):
        expected = "administra"
        curso = Curso(nome=expected)
        actual = curso.pega_nome()
        assert actual == expected

    def test_curso_deve_ter_identificador_unico(self):
        curso_1 = Curso("adm")
        curso_2 = Curso("mad")
        actual_1 = curso_1.pega_identificador_unico()
        actual_2 = curso_2.pega_identificador_unico()
        assert actual_1 != actual_2

    def test_cada_curso_deve_ter_tres_materias(self):
        expected = 3
        gerenciador_curso = GerenciadorCurso()
        curso = Curso("med")
        gerenciador_curso.atualiza_cursos(curso)
        gerenciador_curso.atualiza_cursos(curso)
        gerenciador_curso.atualiza_cursos(curso)
        cursos = gerenciador_curso.pega_lista_cursos()
        cursos[0].atualiza_materias(Materia("mat"))
        cursos[0].atualiza_materias(Materia("adm"))
        cursos[0].atualiza_materias(Materia("med"))
        # deve ser ignorado
        cursos[0].atualiza_materias(Materia("vet"))
        actual = len(cursos[0].pega_lista_materias())
        assert actual == expected

    def test_numero_cursos_deve_ser_tres(self):
        expected = 3
        self.gerenciador_curso = GerenciadorCurso()
        self.curso = Curso("vet")
        self.gerenciador_curso.atualiza_cursos(self.curso)
        self.gerenciador_curso.atualiza_cursos(self.curso)
        self.gerenciador_curso.atualiza_cursos(self.curso)
        # deve ser ignorado
        self.gerenciador_curso.atualiza_cursos(self.curso)
        actual = len(self.gerenciador_curso.pega_lista_cursos())
        assert actual == expected
class TestCoordenador:
    coordenador = None

    def setup_method(self, method):
        self.catalogo = CatalogoCurso()
        self.catalogo.limpa_catalogo()
        self.curso = Curso("direito")
        self.curso.atualiza_materias(Materia("civil"))
        self.curso.atualiza_materias(Materia("penal"))
        self.curso.atualiza_materias(Materia("filosofia"))
        self.coordenador = CoordenadorCurso(self.curso)

    def tear_down(self, method):
        self.catalogo.limpa_catalogo()
        self.curso = None
        self.coordenador = None

    def test_coordenador_nao_pode_coordenar_curso_cancelado(
            self, cria_curso_cancelado):
        curso = cria_curso_cancelado
        with pytest.raises(
                Exception,
                match="O coordenador não pode se associar a um curso cancelado"
        ):
            CoordenadorCurso(curso)

    def test_coordenador_pode_listar_info_todos_alunos_dos_cursos(
            self, cria_curso_com_materias):
        nome_1 = "diogo"
        nome_2 = "miguel"
        curso_1 = cria_curso_com_materias
        curso_1_nome = curso_1.pega_nome()
        curso_2 = self.curso
        curso_2_nome = curso_2.pega_nome()
        materias_1 = {materia_nome_1: 1.0}
        materias_2 = {"civil": 8.0, "penal": 8.0}
        cr_1 = 1.0
        cr_2 = 8.0
        coordenador = CoordenadorCurso(curso_1)
        coordenador.adiciona_cursos(curso_2)
        expected = {
            "alunos": [
                {
                    "nome": nome_1,
                    "materias": materias_1,
                    "coeficiente rendimento": cr_1,
                    "curso": curso_1_nome
                },
                {
                    "nome": nome_2,
                    "materias": materias_2,
                    "coeficiente rendimento": cr_2,
                    "curso": curso_2_nome
                },
            ]
        }
        self._cria_aluno_no_curso(nome_1, curso_1, materias_1)
        self._cria_aluno_no_curso(nome_2, curso_2, materias_2)
        actual = coordenador.listar_detalhe_alunos()
        assert actual == expected

    def test_coordenador_pode_coordenar_mais_de_um_curso(
            self, cria_curso_com_materias):
        curso_1 = cria_curso_com_materias
        curso_2 = cria_curso_com_materias
        curso_3 = cria_curso_com_materias
        expected = curso_3
        cursos = [curso_2, curso_3]
        cursos.append(curso_1)
        coordenador = CoordenadorCurso(curso_1)
        coordenador.adiciona_cursos(cursos)
        actual = coordenador.pega_lista_cursos()
        assert expected in actual

    def test_coordenador_curso_2_nao_pode_listar_alunos_curso_1(self):
        expected = {"alunos": []}
        aluno = Aluno("maria")
        curso = Curso("fisica")
        curso.atualiza_materias(Materia("optica"))
        curso.atualiza_materias(Materia("mecanica"))
        curso.atualiza_materias(Materia("eletrica"))
        coordenador_2 = CoordenadorCurso(curso)
        aluno.inscreve_curso(self.curso)
        actual = coordenador_2.listar_detalhe_alunos()
        assert actual == expected

    def test_coordenador_curso_pode_listar_alunos_do_curso_com_dois_aluno(
            self):
        nome_1 = "diogo"
        nome_2 = "miguel"
        materias_1 = {"civil": 1}
        materias_2 = {"penal": 8, "civil": 8}
        cr_1 = 1
        cr_2 = 8
        expected = {
            "alunos": [
                {
                    "nome": nome_1,
                    "materias": materias_1,
                    "coeficiente rendimento": cr_1,
                    "curso": self.curso.pega_nome()
                },
                {
                    "nome": nome_2,
                    "materias": materias_2,
                    "coeficiente rendimento": cr_2,
                    "curso": self.curso.pega_nome()
                },
            ]
        }
        self._cria_aluno_no_curso(nome_1, self.curso, materias_1)
        self._cria_aluno_no_curso(nome_2, self.curso, materias_2)
        actual = self.coordenador.listar_detalhe_alunos()
        assert actual == expected

    def test_coordenador_curso_pode_listar_alunos_do_curso_com_um_aluno(self):
        nome = "marcos"
        materias = {"civil": 5}
        cr = 5
        expected = {
            "alunos": [{
                "nome": nome,
                "materias": materias,
                "coeficiente rendimento": cr,
                "curso": self.curso.pega_nome()
            }]
        }
        self._cria_aluno_no_curso(nome, self.curso, materias)
        actual = self.coordenador.listar_detalhe_alunos()
        assert actual == expected

    def test_coordenador_curso_pode_listar_alunos_curso_quando_zero_alunos(
            self):
        expected = {"alunos": []}
        actual = self.coordenador.listar_detalhe_alunos()
        assert actual == expected

    def _cria_aluno_no_curso(self, nome_aluno, curso, materias):
        aluno = Aluno(nome_aluno)
        aluno.inscreve_curso(curso)
        aluno.atualiza_materias_cursadas(materias)