diff --git a/exercicios/para-casa/Biblioteca.py b/exercicios/para-casa/Biblioteca.py new file mode 100644 index 0000000..ea23cf4 --- /dev/null +++ b/exercicios/para-casa/Biblioteca.py @@ -0,0 +1,41 @@ +from Livro import Livro + +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) + + def exibir_livros(self): + return self.livros + + def emprestar_livro(self, nome_livro): + for livro in self.livros: + if livro.nome == nome_livro: + livro.emprestado = True + return True # Se verdadeiro o livro foi emprestado com sucesso + return False # Se falso o livro não foi encontrado na biblioteca + + def remover_livro(self, nome_livro): + for livro in self.livros: + if livro.nome == nome_livro and not livro.emprestado: + self.livros.remove(livro) + return True # Se verdadeiro o livro foi removido com sucesso + return False # Se falso o livro não foi encontrado na biblioteca ou está emprestado + + def buscar_livro(self, nome_livro): + for livro in self.livros: + if livro.nome == nome_livro: + status = "Disponível" if not livro.emprestado else "Emprestado" + return f"Nome: {livro.nome}, Autor: {livro.autor}, Status: {status}" + return "Livro não encontrado" + + def devolver_livro(self, nome_livro): + for livro in self.livros: + if livro.nome == nome_livro: + livro.emprestado = False + return # Livro foi devolvido com sucesso + 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..b3721ab --- /dev/null +++ b/exercicios/para-casa/Livro.py @@ -0,0 +1,6 @@ +class Livro: + def __init__(self, nome, autor): + self.nome = nome + self.autor = autor + self.emprestado = False + diff --git a/exercicios/para-casa/testBiblioteca.py b/exercicios/para-casa/testBiblioteca.py new file mode 100644 index 0000000..95a001e --- /dev/null +++ b/exercicios/para-casa/testBiblioteca.py @@ -0,0 +1,119 @@ +from unittest import TestCase +from Biblioteca import Biblioteca +from Livro import Livro + +class TestBiblioteca(TestCase): + def setUp(self): + self.biblioteca = Biblioteca() + + def test_init_deve_passar(self): + # Arrange / Act + # Assert + self.assertIsInstance(self.biblioteca.livros, list) + + def test_adicionar_livro_deve_passar(self): + # Arrange + nome_livro = "Anne de Green Gables" + autor_livro = "L. M. Montgomery" + livro = Livro(nome_livro, autor_livro) + + # Act + self.biblioteca.adicionar_livro(livro) + + # Assert + self.assertEqual(1, len(self.biblioteca.livros)) + + def test_adicionar_livro_nao_deve_inserir_numero(self): + # Arrange + livro = 1988 + + # Assert / act + with self.assertRaises(TypeError): + self.biblioteca.adicionar_livro(livro) + +# Teste associado ao método Exibir Livros + + def test_exibir_livros_deve_retornar_lista_de_livros(self): + # Arrange + nome_livro1 = "Anne de Green Gables" + autor_livro1 = "L. M. Montgomery" + livro1 = Livro(nome_livro1, autor_livro1) + + nome_livro2 = "Dom Quixote" + autor_livro2 = "Miguel de Cervantes" + livro2 = Livro(nome_livro2, autor_livro2) + + self.biblioteca.adicionar_livro(livro1) + self.biblioteca.adicionar_livro(livro2) + + # Act + lista_de_livros = self.biblioteca.exibir_livros() + + # Assert + self.assertEqual(len(lista_de_livros), 2) + self.assertIn(livro1, lista_de_livros) + self.assertIn(livro2, lista_de_livros) + +# Teste associado ao método Emprestar Livro + + def test_emprestar_livro_deve_marcar_livro_como_emprestado(self): + # Arrange + nome_livro = "Alice no País das Maravilhas" + autor_livro = "Lewis Carrol" + livro = Livro(nome_livro, autor_livro) + self.biblioteca.adicionar_livro(livro) + + # Act + emprestado = self.biblioteca.emprestar_livro(nome_livro) + + # Assert + self.assertTrue(emprestado) # Verifica se o livro foi emprestado com sucesso + self.assertTrue(livro.emprestado) # Verifica se o atributo emprestado do livro está como True + +# Teste associado ao método Remover Livro (Extra) + + def test_remover_livro_deve_remover_livro_nao_emprestado(self): + # Arrange + nome_livro = "Romeu e Julieta" + autor_livro = "William Shakespeare" + livro = Livro(nome_livro, autor_livro) + self.biblioteca.adicionar_livro(livro) + + # Act + removido = self.biblioteca.remover_livro(nome_livro) + + # Assert + self.assertTrue(removido) # Verifica se o livro foi removido com sucesso + self.assertNotIn(livro, self.biblioteca.livros) # Verifica se o livro não está mais na biblioteca + + # Teste associado ao método Buscar Livro (Extra) + + def test_buscar_livro_deve_retornar_informacoes_do_livro(self): + # Arrange + nome_livro = "Morro dos Ventos Uivantes" + autor_livro = "Emilly Bronte" + livro = Livro(nome_livro, autor_livro) + self.biblioteca.adicionar_livro(livro) + + # Act + informacoes = self.biblioteca.buscar_livro(nome_livro) + + # Assert + self.assertEqual(informacoes, f"Nome: {nome_livro}, Autor: {autor_livro}, Status: Disponível") + +# Teste associado ao método Devolver Livro (Extra) + + def test_devolver_livro_deve_marcar_livro_como_nao_emprestado(self): + # Arrange + nome_livro = "Emma" + autor_livro = "Jane Austen" + livro = Livro(nome_livro, autor_livro) + self.biblioteca.adicionar_livro(livro) + self.biblioteca.emprestar_livro(nome_livro) + + # Act + devolvido = self.biblioteca.devolver_livro(nome_livro) + + # Assert + self.assertIsNone(devolvido) # Verifica se o livro foi devolvido com sucesso + self.assertFalse(livro.emprestado) # Verifica se o atributo emprestado do livro está como False \ No newline at end of file diff --git a/exercicios/para-casa/testLivro.py b/exercicios/para-casa/testLivro.py new file mode 100644 index 0000000..3b8e7e9 --- /dev/null +++ b/exercicios/para-casa/testLivro.py @@ -0,0 +1,16 @@ +from unittest import TestCase +from Livro import Livro + +class TestLivro(TestCase): + def test_init_deve_passar(self): + # Arrange + nome = "Orgulho e Preconceito" + autor = "Jane Austen" + + # Act + livro = Livro(nome, autor) + + # Assert + self.assertEqual(nome, livro.nome) + self.assertEqual(autor, livro.autor) + self.assertEqual(False, livro.emprestado) \ No newline at end of file