diff --git a/exercicios/para-casa/Biblioteca.py b/exercicios/para-casa/Biblioteca.py new file mode 100644 index 0000000..f43c544 --- /dev/null +++ b/exercicios/para-casa/Biblioteca.py @@ -0,0 +1,26 @@ +from Livro import Livro + +class Biblioteca : + def __init__(self): #Construtor + self.livros = [] #Lista de livros vazia + + 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) #Caso o valor seja válido, add o livro à lista self.livros + + def exibir_livros(self): #Função que retorna a lista + # return [livro.nome for livro in self.livros] << isso exibiria apenas os nomes + return self.livros #Retornar a lista self.livros encontrada em __init__ + + def emprestar_livro(self, nome_do_livro): + for livro in self.livros: #Para cada livro em self.livros + if livro.nome == nome_do_livro: #Se o nome do livro for igual à variável que eu criei nome_do_livro, ou seja, se ele existe + if not livro.esta_emprestado: #E se ele já não foi emprestado + livro.esta_emprestado = True #Agora ele será emprestado + return True #Aqui a gente indica que o empréstimo foi bem sucedido + return False #Se o livro foi emprestado, o empréstimo não será bem sucedido + return False #Se o nome não for igual ao nome de um livro existente na lista, ele será falso + + + \ 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..7c7092c --- /dev/null +++ b/exercicios/para-casa/Livro.py @@ -0,0 +1,5 @@ +class Livro: + def __init__(self, nome, autor): + self.nome = nome + self.autor = autor + self.esta_emprestado = False diff --git a/exercicios/para-casa/README.md b/exercicios/para-casa/README.md index 6fdf160..46507df 100644 --- a/exercicios/para-casa/README.md +++ b/exercicios/para-casa/README.md @@ -26,7 +26,15 @@ Critérios de aceitação: - Caso o livro não seja encontrado o método não deve dar erro ou exceções - Apenas livros não emprestados podem ser removidos (opcional) +<<<<<<< HEAD + +add metodos (exibir_livros e emprestar_livro) + + +## Criar método search_book +======= ### Criar método buscar_livro +>>>>>>> 4831f0540239abc4ad89ee48719fa76f2c64b077 Critérios de aceitação: - 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 buscado e retornar o nome do livro, autor e informação se livro está disponível ou emprestado diff --git a/exercicios/para-casa/main.py b/exercicios/para-casa/main.py new file mode 100644 index 0000000..f547458 --- /dev/null +++ b/exercicios/para-casa/main.py @@ -0,0 +1,11 @@ +from Biblioteca import Biblioteca +from Livro import Livro +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) + +biblioteca_objeto.adicionar_livro(livro_objeto) diff --git a/exercicios/para-casa/testBiblioteca.py b/exercicios/para-casa/testBiblioteca.py new file mode 100644 index 0000000..86c3207 --- /dev/null +++ b/exercicios/para-casa/testBiblioteca.py @@ -0,0 +1,46 @@ +from unittest import TestCase #Identificador de uma classe de testes +from Biblioteca import Biblioteca +from Livro import Livro + +class TestBiblioteca(TestCase): + #Utilizado para não precisar chamar a biblioteca em todas as funções + 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 = "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)) + + def test_adicionar_livro_nao_deve_inserir_numero(self): + # Arrange + livro = 1988 + + # Act / Assert + with self.assertRaises(TypeError): + self.biblioteca.adicionar_livro(livro) + + def test_emprestar_livro_inexistente_deve_retornar_false(self): + #Act/Assert + self.assertFalse(self.biblioteca.emprestar_livro("Livro Inexistente")) + + def test_exibir_livros_deve_retornar_lista_de_nomes(self): + # Arrange + livro1 = Livro("Uzumaki", "Junji Ito") + livro2 = Livro("Tomie", "Junji Ito") + self.biblioteca.adicionar_livro(livro1) + self.biblioteca.adicionar_livro(livro2) + # Act + lista_de_nomes = self.biblioteca.exibir_livros() + # Assert + self.assertEqual(["Uzumaki", "Tomie"], [livro.nome for livro in lista_de_nomes]) #Verifica se ambos os valores são iguais, se forem o teste passará \ 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..04eb507 --- /dev/null +++ b/exercicios/para-casa/testLivro.py @@ -0,0 +1,32 @@ +from unittest import TestCase +from Biblioteca import Biblioteca +from Livro import Livro + +class TestLivro(TestCase): + def setUp(self): + self.biblioteca = Biblioteca() + + 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) + + def test_emprestar_livro_deve_marcar_como_emprestado(self): + # Arrange + nome_do_livro = "Aura" + autor_do_livro = "Carlos Fuentes" + livro = Livro(nome_do_livro, autor_do_livro) + self.biblioteca.adicionar_livro(livro) #Add livro à lista + + # Act + emprestado = self.biblioteca.emprestar_livro(nome_do_livro) + + # Assert + self.assertTrue(emprestado) # Verifica se o empréstimo funcionou e se o livro está marcado como emprestado + self.assertTrue(livro.esta_emprestado) \ No newline at end of file