Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

S08 - Projeto Guiado - Larissa #31

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions exercicios/para-casa/Biblioteca.py
Original file line number Diff line number Diff line change
@@ -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)
Empty file.
79 changes: 79 additions & 0 deletions exercicios/para-casa/testBiblioteca.py
Original file line number Diff line number Diff line change
@@ -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)