diff --git a/exercicios/para-casa/Biblioteca.py b/exercicios/para-casa/Biblioteca.py new file mode 100644 index 0000000..e51f58b --- /dev/null +++ b/exercicios/para-casa/Biblioteca.py @@ -0,0 +1,73 @@ +''' +## Sistema de gerenciamento de biblioteca +Criar um sistema de gerenciamento de biblioteca usando TDD com as funcionalidades: +- Adicionar livros +- Listar livros +- Emprestar livros + +Criar método exibir_livros +- O método deve ter ao menos 1 (um) teste associado +- O método deve não tem parâmetro além do self (contém apenas o self obrigatório) +- O método deve exibir todos os livros que foram adicionados (dica retorne a lista e valide se contém todos os livros adicionados) + +Criar método emprestar_livro +- O método deve ter ao menos 1 (um) teste associado +- O método deve receber como parâmetro o nome do livro a ser emprestado +- O método deve marcar o valor de esta_emprestado como True +''' + +class Livro: + def __init__(self, nome, autor): + self.nome = nome + self.autor = autor + self.esta_emprestado = False + +class Biblioteca: + def __init__(self): + self.livros = [] + + def adicionar_livro(self, livro: Livro): + if (not isinstance(livro, Livro)): + raise TypeError(f"Esperado Livro, obtido valor {livro} do tipo {type(livro)}") + self.livros.append(livro) + return f"O {livro_objeto.nome}, do(a) autor(a) {livro_objeto.autor} foi adicionado ao catálogo da biblioteca." + + #Criar método exibir_livros + def exibir_livro(self): + return [livro.nome for livro in self.livros] + + #Criar método emprestar_livro + def emprestar_livro(self, livro: Livro): + if livro in self.livros: + if livro.esta_emprestado: + return f"{livro.nome} já está emprestado." + else: + livro.esta_emprestado = True + return f"{livro.nome} foi emprestado a você." + else: + return f"Livro não existente no catálogo." + +nome_livro = "O mito da beleza" +autor_livro = "Naomi Wolf" + +# Instanciando o objeto livro_objeto da classe Livro, passando as variáveis nome_livro e autor_livro +livro_objeto = Livro(nome = nome_livro, autor = autor_livro) +print(f"Criamos o objeto livro_objeto da classe Livro com os valores nome = {livro_objeto.nome} e autor = {livro_objeto.autor}\n") + +# Instanciando o objeto biblioteca_objeto da classe Biblioteca +biblioteca_objeto = Biblioteca() + +# Cadastrando o livro criado anteriormente no objeto livro_objeto +# passamos o objeto livro_objeto para o método adicionar_livro do objeto biblioteca_objeto +# que por sua vez adiciona o objeto livro_objeto na lista de livros +biblioteca_objeto.adicionar_livro(livro_objeto) + +# Exibe o livro adicionado ao acervo +for livro in biblioteca_objeto.livros: + print(f"O livro {livro.nome} do(a) autor(a) {livro.autor} foi adicionado ao acervo") + +print(f"A lista de livros contidos na biblioteca é:\n{biblioteca_objeto.exibir_livro()}") + +print(biblioteca_objeto.emprestar_livro(livro_objeto)) + +biblioteca_objeto.emprestar_livro(livro_objeto) 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/testBiblioteca.py b/exercicios/para-casa/testBiblioteca.py new file mode 100644 index 0000000..0dfacd2 --- /dev/null +++ b/exercicios/para-casa/testBiblioteca.py @@ -0,0 +1,79 @@ +import unittest +from Biblioteca import Biblioteca +from Biblioteca import Livro + +class TestLivro(unittest.TestCase): + + def test_init_deve_passar(self): + #Arrange + nome = "Calibã e a bruxa" + autor = "Silvia Federici" + #Act + livro = Livro(nome, autor) + #Assert + self.assertEqual(nome, livro.nome) + self.assertEqual(autor, livro.autor) + self.assertEqual(False, livro.esta_emprestado) + +class TestBiblioteca(unittest.TestCase): + + def setUp(self): + self.biblioteca = Biblioteca() + + #Testa se livros é do tipo lista + def test_init_deve_passar(self): + #Assert + self.assertIsInstance(self.biblioteca.livros, list) + + #Testa se 1 livro foi adicionado à lista de livros + def test_adicionar_livro_deve_passar(self): + #Arrange + nome_livro = "O mito da beleza" + autor_livro = "Naomi Wolf" + livro = Livro(nome_livro, autor_livro) + #Act + self.biblioteca.adicionar_livro(livro) + #Assert + self.assertEqual(1, len(self.biblioteca.livros)) + + #Testa se o sistema vai bloquear a inserção de números no lugar de objetos. + def test_adicionar_livro_nao_deve_inserir_numero(self): + # Arrange + livro = 1988 + # Act / Assert + with self.assertRaises(TypeError): + self.biblioteca.adicionar_livro(livro) + + #Testa se o método exibir_livros vai retornar uma lista + def test_exibir_livros_deve_passar(self): + # Arrange + self.biblioteca.livros = ["Livro 1", "Livro 2"] + lista = self.biblioteca.livros + #Act + self.biblioteca.exibir_livro() + # Assert + self.assertEqual(lista, ["Livro 1", "Livro 2"]) + + def test_emprestar_livro_deve_passar(self): + # Arrange + nome = "O mito da beleza" + autor = "Naomi Wolf" + livro = Livro(nome, autor) + self.biblioteca.livros = ["O mito da beleza", "Torto Arado"] + lista_livros = self.biblioteca.livros + # Act + self.biblioteca.emprestar_livro(livro) + # Assert + self.assertTrue(livro.nome in lista_livros) + + def test_emprestar_livro_inexistente_deve_passar(self): + # Arrange + nome = "Livro inexistente" + autor = "Ninguém" + livro = Livro(nome, autor) + self.biblioteca.livros = ["O mito da beleza", "Torto Arado"] + lista_livros = self.biblioteca.livros + #Act + self.biblioteca.emprestar_livro(livro) + # Assert + self.assertTrue(livro.nome not in lista_livros)