From 078d44ec889939d0fe09e27a8356073344940169 Mon Sep 17 00:00:00 2001 From: larissalemos Date: Wed, 27 Sep 2023 20:21:43 -0300 Subject: [PATCH 1/2] S08 - Projeto Guiado - Larissa --- exercicios/para-casa/Biblioteca.py | 59 +++++++++++++++++ exercicios/para-casa/__init__.py | 0 exercicios/para-casa/testBiblioteca.py | 87 ++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 exercicios/para-casa/Biblioteca.py create mode 100644 exercicios/para-casa/__init__.py create mode 100644 exercicios/para-casa/testBiblioteca.py diff --git a/exercicios/para-casa/Biblioteca.py b/exercicios/para-casa/Biblioteca.py new file mode 100644 index 0000000..b3e9234 --- /dev/null +++ b/exercicios/para-casa/Biblioteca.py @@ -0,0 +1,59 @@ +''' +## 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) + + #Criar método exibir_livros + def exibir_livro(self): + return self.livros + + #Criar método emprestar_livro + def emprestar_livro(self, livro: Livro): + if livro.nome not in self.livros: + print(f"Livro não existente no catálogo.") + else: + if livro.esta_emprestado == True: + print(f"{livro.nome} já está emprestado.") + else: + livro.esta_emprestado = True + + +nome_livro = "O mito da beleza" +autor_livro = "Naomi Wolf" +livro_objeto = Livro(nome = nome_livro, autor = autor_livro) + +biblioteca_objeto = Biblioteca() + +print(biblioteca_objeto.livros) + +for livro in biblioteca_objeto.livros: + print(livro.nome) + print(livro.autor) \ No newline at end of file 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..d6123de --- /dev/null +++ b/exercicios/para-casa/testBiblioteca.py @@ -0,0 +1,87 @@ +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 test_init_deve_passar(self): + #Arrange / Act + biblioteca = Biblioteca() + + #Assert + self.assertIsInstance(biblioteca.livros, list) + + def test_adicionar_livro_deve_passar(self): + #Arrange + biblioteca = Biblioteca() + nome_livro = "O mito da beleza" + autor_livro = "Naomi Wolf" + livro = Livro(nome_livro, autor_livro) + + #Act + biblioteca.adicionar_livro(livro) + + #Assert + self.assertEqual(1, len(biblioteca.livros)) + + def test_adicionar_livro_nao_deve_inserir_numero(self): + # Arrange + biblioteca = Biblioteca() + livro = 1988 + + # Act / Assert + with self.assertRaises(TypeError): + biblioteca.adicionar_livro(livro) + + def test_exibir_livros_deve_passar(self): + # Arrange + self.biblioteca.livros = ["Lista de livors"] + lista = self.biblioteca.livros + + #Act + self.biblioteca.exibir_livros() + + # Assert + self.assertEqual(lista, ["Lista de livors"]) + + 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) From 62dc51e561e9c55a5e69801a68c78e6f351a3573 Mon Sep 17 00:00:00 2001 From: larissalemos Date: Thu, 28 Sep 2023 19:55:05 -0300 Subject: [PATCH 2/2] =?UTF-8?q?Corre=C3=A7=C3=B5es=20p=C3=B3s=20entrega=20?= =?UTF-8?q?-=20Larissa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exercicios/para-casa/Biblioteca.py | 36 ++++++++++++++++------- exercicios/para-casa/testBiblioteca.py | 40 +++++++++++--------------- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/exercicios/para-casa/Biblioteca.py b/exercicios/para-casa/Biblioteca.py index b3e9234..e51f58b 100644 --- a/exercicios/para-casa/Biblioteca.py +++ b/exercicios/para-casa/Biblioteca.py @@ -30,30 +30,44 @@ 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 self.livros + return [livro.nome for livro in self.livros] #Criar método emprestar_livro def emprestar_livro(self, livro: Livro): - if livro.nome not in self.livros: - print(f"Livro não existente no catálogo.") - else: - if livro.esta_emprestado == True: - print(f"{livro.nome} já está emprestado.") + 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() -print(biblioteca_objeto.livros) - +# 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(livro.nome) - print(livro.autor) \ No newline at end of file + 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/testBiblioteca.py b/exercicios/para-casa/testBiblioteca.py index d6123de..0dfacd2 100644 --- a/exercicios/para-casa/testBiblioteca.py +++ b/exercicios/para-casa/testBiblioteca.py @@ -3,72 +3,66 @@ 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 test_init_deve_passar(self): - #Arrange / Act - biblioteca = Biblioteca() + def setUp(self): + self.biblioteca = Biblioteca() + + #Testa se livros é do tipo lista + def test_init_deve_passar(self): #Assert - self.assertIsInstance(biblioteca.livros, list) + self.assertIsInstance(self.biblioteca.livros, list) + #Testa se 1 livro foi adicionado à lista de livros def test_adicionar_livro_deve_passar(self): #Arrange - biblioteca = Biblioteca() nome_livro = "O mito da beleza" autor_livro = "Naomi Wolf" livro = Livro(nome_livro, autor_livro) - #Act - biblioteca.adicionar_livro(livro) - + self.biblioteca.adicionar_livro(livro) #Assert - self.assertEqual(1, len(biblioteca.livros)) + 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 - biblioteca = Biblioteca() livro = 1988 - # Act / Assert with self.assertRaises(TypeError): - biblioteca.adicionar_livro(livro) + 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 = ["Lista de livors"] + self.biblioteca.livros = ["Livro 1", "Livro 2"] lista = self.biblioteca.livros - #Act - self.biblioteca.exibir_livros() - + self.biblioteca.exibir_livro() # Assert - self.assertEqual(lista, ["Lista de livors"]) + 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) @@ -79,9 +73,7 @@ def test_emprestar_livro_inexistente_deve_passar(self): 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)