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
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)
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
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_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())
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
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)