From 3670491ae8366824a8f60f901082a8d14f74454d Mon Sep 17 00:00:00 2001 From: freitascarla Date: Wed, 27 Sep 2023 20:08:28 -0300 Subject: [PATCH] envio projeto guiado 2 --- exercicios/para-casa/Biblioteca.py | 88 +++++++ exercicios/para-casa/Livro.py | 13 + exercicios/para-casa/___init__.py | 0 exercicios/para-casa/testeBiblioteca.py | 334 ++++++++++++++++++++++++ exercicios/para-casa/testeLivro.py | 32 +++ 5 files changed, 467 insertions(+) create mode 100644 exercicios/para-casa/Biblioteca.py create mode 100644 exercicios/para-casa/Livro.py create mode 100644 exercicios/para-casa/___init__.py create mode 100644 exercicios/para-casa/testeBiblioteca.py create mode 100644 exercicios/para-casa/testeLivro.py diff --git a/exercicios/para-casa/Biblioteca.py b/exercicios/para-casa/Biblioteca.py new file mode 100644 index 0000000..4dd26f3 --- /dev/null +++ b/exercicios/para-casa/Biblioteca.py @@ -0,0 +1,88 @@ +from Livro import Livro + +class Biblioteca: + + def __init__(self): # método construtor da classe + """Classe Biblioteca (tem como propriedade uma lista de livros)""" + + # raise NotImplementedError # levantando uma excessão para sinalizar que a classe não foi implementada + + self.acervo = [] + """acervo (lista): propriedade da classe Biblioteca""" + + def adicionar_livro(self, livro:Livro): # parâmetro livro do tipo classe Livro + """Método para adiconar um livro ao acervo da Biblioteca""" + + if not (isinstance(livro, Livro)): + # se a propriedade livro não for igual a classe Livro apresente mensagem de erro + raise TypeError (f"Esperado livro valor {livro} do tipo {type(livro)}") + + self.acervo.append(livro) + # adicona o livro ao acervo da Biblioteca + + def exibir_acervo(self, livro:Livro): + """Método para exibir o acervo de livros da Biblioteca""" + + for livro in self.acervo: + return livro + # para cada livro contido no acervo da Biblioteca: exiba os livros + + def remover_livro(self, livro:Livro): + """Método para remover um livro do acervo da Biblioteca""" + + # para acessar os atributos da classe livro: livro_nomeatributo + + if livro.tituloLivro in self.acervo and livro.estaEmprestado == False: + # se o livro a ser excluído pertence ao acervo da Biblioteca e não está emprestado: remova o livro e informe ao usuário + self.acervo.remove(livro.tituloLivro) + return (f"O livro {livro.tituloLivro} foi removido com sucesso!") + + elif livro.estaEmprestado == True: + # se o livro pertence ao acervo da Biblioteca e está emprestado: não remova e informe ao usuário + return (f"O livro {livro.tituloLivro} está emprestado. Portanto, não pode ser removido do acervo.") + + else: + livro.tituloLivro in self.acervo and livro.tituloLivro not in self.acervo + # se o livro não pertence ao acervo da Biblioteca: informe ao usuário + return (f"O livro {livro.tituloLivro} não foi encontrado no acervo da Biblioteca.") + + def pesquisar_livro(self, livro:Livro): + """Método para pesquisar um livro no acervo da Biblioteca""" + + if livro.tituloLivro in self.acervo: + # se o livro pertence ao acervo da Biblioteca: informe ao usuário os seus atributos + return (f"Livro:{livro.tituloLivro}\nAutor:{livro.autorLivro}\nAno:{livro.anoLivro}\nStatus?{livro.estaEmprestado}") + + else: + livro.tituloLivro not in self.acervo + # se o livro não faz parte do acervo da Biblioteca: informe ao usuário + return ("Livro não encontrado.") + + def emprestar_livro(self, livro:Livro): + """Método para emprestar um livro do acervo da Biblioteca""" + + if livro.tituloLivro in self.acervo and livro.estaEmprestado == False: + # se o livro pertence ao acervo da Biblioteca e não está emprestado: empreste o livro + return livro.estaEmprestado == True + + else: + livro.tituloLivro in self.acervo and livro.estaEmprestado == True + # se o livro pertence ao acervo da Biblioteca e está emprestado: informe ao usuário + return (f"O livro {livro.tituloLivro} já se encontra emprestado.") + + def devolver_livro(self, livro:Livro): + """Método para devolver um livro emprestado ao acervo da Biblioteca""" + + if livro.tituloLivro in self.acervo and livro.estaEmprestado == True: + # se o livro devolvido pertence ao acervo da Biblioteca e está emprestado: disponibilize no acervo + return livro.estaEmprestado == False + + elif livro.tituloLivro in self.acervo and livro.estaEmprestado == False: + # se o livro devolvido pertence ao acervo da Biblioteca mas consta como disponível: existe um problema + return ("!Procure a gerência para verificar essa situção!") + + else: + livro.tituloLivro not in self.acervo + # se o livro não pertence ao acervo da Biblioteca: informe ao usuário + return ("Livro não encontrado") + \ No newline at end of file diff --git a/exercicios/para-casa/Livro.py b/exercicios/para-casa/Livro.py new file mode 100644 index 0000000..50a5241 --- /dev/null +++ b/exercicios/para-casa/Livro.py @@ -0,0 +1,13 @@ +class Livro: + + def __init__(self, titulo_livro, autor_livro, ano_livro): # método construtor da classe + """Classe Livro (tem como atributos: nome do livro, autor do livro e status do livro)""" + + self.tituloLivro = titulo_livro + """nome (str): propriedade da classe Livro""" + self.autorLivro = autor_livro + """autor (str): propriedade da classe Livro""" + self.anoLivro = ano_livro + """ano (str): propriedade da classe Livro""" + self.estaEmprestado = False # por padrão, quando o livro é adicionado, ele não está emprestado + """status (bool): propriedade da classe Livro""" diff --git a/exercicios/para-casa/___init__.py b/exercicios/para-casa/___init__.py new file mode 100644 index 0000000..e69de29 diff --git a/exercicios/para-casa/testeBiblioteca.py b/exercicios/para-casa/testeBiblioteca.py new file mode 100644 index 0000000..30545a3 --- /dev/null +++ b/exercicios/para-casa/testeBiblioteca.py @@ -0,0 +1,334 @@ +# importando biblioteca e classe de testes +from unittest import TestCase + +# importando o código fonte +from Biblioteca import Biblioteca +from Livro import Livro + +class TesteBiblioteca(TestCase): + # declarando a classe de testes e informando a classe de teste do unittest como argumento + + def teste_init_deve_passar(self): # definindo o primeiro teste (como nomear: teste_nomedoteste_oquedevefazer) + # verifica se a classe Biblioteca é inicilizada corretamente + + # arrange / act + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + # assert + self.assertIsInstance(biblioteca.acervo, list) + # testa se a propriedade acervo da classe Biblioteca tem o formato de lista + + def teste_adicionar_livro_deve_passar(self): + # verifica se um livro é adiconado à Biblioteca + + #arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = 1998 + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + #act + biblioteca.adicionar_livro(livro) + # executando ação de adicionar livro ao acervo da Biblioteca + + #assert + self.assertEqual(1, len(biblioteca.acervo)) + # testa se o livro foi adicionado ao acervo da Biblioteca + # espera-se que o tamanho da lista seja 1 porque um livro foi adicionado à lista vazia + + def teste_adicionar_livro_nao_deve_inserir_numero(self): + # verifica se a propriedade livro não recebe valores numéricos + + # arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + livro = 1988 + # criando a variável para executar o teste + + # act / assert + with self.assertRaises(TypeError): + biblioteca.adicionar_livro(livro) + # testa se o livro adicionado tem valores inválidos + + def teste_exibir_acervo_deve_passar(self): + # verifica se o acervo de livros é exibido + + #arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = "1998" + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + biblioteca.adicionar_livro(livro) + # adicionado o livro ao acervo da Biblioteca + + acervo_livros = [livro] + # criando a variável acervo_livros que recebe os livros adicionados + + # act + biblioteca.exibir_acervo(acervo_livros) + # executando a ação de exibir o acervo + + # assert + self.assertEqual(1, len(acervo_livros)) + #testa se o livro foi adicionado à variável acervo_livro + self.assertEqual(acervo_livros, biblioteca.acervo) + # testa se todos os livros adicionados fazem arte do acervo da Biblioteca + + def teste_remover_livro_deve_passar(self): + # verifica se um livro é removido do acervo + + # arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = "1998" + esta_emprestado = False + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + biblioteca.adicionar_livro(livro) + # adicionado o livro ao acervo da Biblioteca + + # act + biblioteca.remover_livro(livro) + # executando ação de remover um livro da biblioteca + + # assert + self.assertIn(livro, biblioteca.acervo) + # testa se o livro faz paste do acervo da Biblioteca + self.assertFalse(esta_emprestado, biblioteca.acervo) + #testa se o livro não está emprestado e pode ser removido + + def teste_remover_livro_emprestado_nao_deve_passar(self): + # verifica se um livro emprestado não é removido + + # arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = "1998" + esta_emprestado = True + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + biblioteca.adicionar_livro(livro) + # adicionado o livro ao acervo da Biblioteca + + # act + biblioteca.remover_livro(livro) + # executando a ação de remover livro + + # assert + self.assertIn(livro, biblioteca.acervo) + # testa se o livro pertence ao acervo da biblioteca + self.assertTrue(esta_emprestado, biblioteca.acervo) + # testa se o livro está emprestado e não pode ser removido + + def teste_pesquisar_livro_deve_passar(self): + # verifica se ao pesquisar o método retorna o livro pesquisado + + # arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = "1998" + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + biblioteca.adicionar_livro(livro) + # adicionado o livro ao acervo da Biblioteca + + # act + biblioteca.pesquisar_livro(livro) + # executando a ação de pesquisar livro + + # assert + self.assertIn(livro, biblioteca.acervo) + # testa se o livro pesquisado está no acervo da Biblioteca + + def teste_pesquisar_livro_nao_cadastrado_nao_deve_passar(self): + # verifica se ao pesquisar um livro não cadastrado o método informa que o livro não foi encontrado + + # arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = "1998" + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + # act + biblioteca.pesquisar_livro(livro) + # executando a ação de pesquisar livro + + # assert + self.assertNotIn(livro, biblioteca.acervo) + # testa se o livro pesquisado não pertence ao acervo da Biblioteca + + def teste_emprestar_livro_deve_passar(self): + # verifica se o livro pode ser emprestado + + # arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = "1998" + esta_emprestado = False + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + biblioteca.adicionar_livro(livro) + # adicionado o livro ao acervo da Biblioteca + + # act + biblioteca.emprestar_livro(livro) + # executando a ação de emprestar livro + + #assert + self.assertIn(livro, biblioteca.acervo) + #testa se o livro pertence ao acervo + self.assertFalse(esta_emprestado) + # testa se o livro está disponívelno acervo para ser emprestado + + def teste_emprestar_livro_emprestado_nao_deve_passar(self): + # verifica se o livro não pode ser emprestado + + # arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = "1998" + esta_emprestado = True + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + biblioteca.adicionar_livro(livro) + # adicionado o livro ao acervo da Biblioteca + + # act + biblioteca.emprestar_livro(livro) + # executando a ação de emprestar livro + + #assert + self.assertIn(livro, biblioteca.acervo) + #testa se o livro pertence ao acervo + self.assertTrue(esta_emprestado) + # testa se o livro já está emprestado + + def teste_devolver_livro_deve_passar(self): + # verifica se o livro pode ser devolvido + + # arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = "1998" + esta_emprestado = True + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + biblioteca.adicionar_livro(livro) + # adicionado o livro ao acervo da Biblioteca + + # act + biblioteca.devolver_livro(livro) + # executando a ação de devolver livro + + # assert + self.assertTrue(livro in biblioteca.acervo and esta_emprestado) + # testa se o livro pertence ao acervo da biblioteca e está emprestado podendo ser devolvido + + def teste_devolver_livro_nao_emprestado_nao_deve_passar(self): + # verifica se o livro a ser devolvido consta como não emprestado + + # arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = "1998" + esta_emprestado = False + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + biblioteca.adicionar_livro(livro) + # adicionado o livro ao acervo da Biblioteca + + # act + biblioteca.devolver_livro(livro) + # executando a ação de devolver livro + + # act + self.assertIn(livro, biblioteca.acervo) + # testa se o livro pertence ao acervo da Biblioteca + self.assertFalse(esta_emprestado) + # testa se o livro consta como não emprestado não podendo ser devolvido + + def teste_devolver_livro_nao_cadastrado_nao_deve_passar(self): + # verifica se o livro foi devolvido faz parte do acervo + + # arrange + biblioteca = Biblioteca() + # criando a variável biblioteca que chama a classe Biblioteca + + titulo_livro = "Capitu" + autor_livro = "Machado de Assis" + ano_livro = "1998" + # criando as variáveis para executar os testes + + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável que chama a classe Livro + + # act + biblioteca.devolver_livro(livro) + # executando a ação de devolver livro + + # assert + self.assertNotIn(livro, biblioteca.acervo) + # testa se o livro não pertence ao acervo da biblioteca diff --git a/exercicios/para-casa/testeLivro.py b/exercicios/para-casa/testeLivro.py new file mode 100644 index 0000000..d9a1156 --- /dev/null +++ b/exercicios/para-casa/testeLivro.py @@ -0,0 +1,32 @@ +# importando biblioteca e classe de testes +from unittest import TestCase + +# importando o código fonte +from Livro import Livro + +# declarando a classe de testes e informando a classe de teste do unittest como argumento +class TesteLivro(TestCase): + + def teste_init_deve_passar(self): + # verifica se a classe Livro é inicilizada corretamente + + # arrange + titulo_livro = "O Calor das Coisas" + autor_livro = "Nélida Piñon" + ano_livro = 1998 + # criando as variáveis para executar os testes + + # act + livro = Livro(titulo_livro, autor_livro, ano_livro) + # criando a variável livro que chama a classe Livro + # e que recebe as propriedades da classe Livro + + # assert + self.assertEqual(titulo_livro, livro.tituloLivro) + # testa se a variável nome é igual a propriedade nome da classe Livro + self.assertEqual(autor_livro, livro.autorLivro) + # testa se a variável autor é igual a propriedade autor da classe Livro + self.assertEqual(ano_livro, livro.anoLivro) + # testa se a variável ano é igual a propriedade ano da classe Livro + self.assertEqual(False, livro.estaEmprestado) + # testa se o livro adicionado está com o status padrão de "não emprestado" \ No newline at end of file