From c47c38fdd4805f38adbe4927ecf9d6529a008854 Mon Sep 17 00:00:00 2001
From: Maria de Fatima Rodrigues <141267058+Mariu520@users.noreply.github.com>
Date: Wed, 27 Sep 2023 20:02:05 -0300
Subject: [PATCH 1/2] Maria de Fatima - Semana08
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Profa, não consegui concluir, vou finalizar e atualizar.
---
Biblioteca.py | 13 ++++++
Livro.py | 8 ++++
README.md | 83 +++++++++++++++-----------------------
__init__.py | 0
instrucoes-pull-request.md | 31 ++++++++++++++
main.py | 19 +++++++++
testBiblioteca.py | 55 +++++++++++++++++++++++++
testLivro.py | 16 ++++++++
8 files changed, 175 insertions(+), 50 deletions(-)
create mode 100644 Biblioteca.py
create mode 100644 Livro.py
create mode 100644 __init__.py
create mode 100644 instrucoes-pull-request.md
create mode 100644 main.py
create mode 100644 testBiblioteca.py
create mode 100644 testLivro.py
diff --git a/Biblioteca.py b/Biblioteca.py
new file mode 100644
index 0000000..ad09f30
--- /dev/null
+++ b/Biblioteca.py
@@ -0,0 +1,13 @@
+from Livro import Livro
+class Biblioteca :
+ def __init__(self):
+
+ self.livros = []
+
+ def adicionar_livro(self, livro: Livro):
+ if(not isinstance (livro, Livro)): #funçao de atribuição - #not= não é do tipo livro dará um erro...
+ raise TypeError(f"Esperado Livro obtido valor {livro} do tipo {type(livro)}")
+ self.livros.append(livro)
+
+ def exibir_livro(self,livro_auto_ajuda, livro_como_ficar_milionario):
+
\ No newline at end of file
diff --git a/Livro.py b/Livro.py
new file mode 100644
index 0000000..7a9aa8c
--- /dev/null
+++ b/Livro.py
@@ -0,0 +1,8 @@
+class Livro:
+ def __init__(self, nome, autor, ano): # propriedade
+
+ self.nome = nome
+ self.autor = autor
+ self.esta_emprestado = False
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 77a119e..0a4f3e2 100644
--- a/README.md
+++ b/README.md
@@ -1,50 +1,33 @@
-
-
-
-
-# Projeto guiado #2
-
-Turma Online ON26 | back-end | Semana 08 | 2023 | Professora [Mayara Ferreira](https://github.com/mayaracsferreira)
-
-### Requisitos
-- Python3
-- Pip
-- Git
-- Visual Studio Code ou alguma outra IDE
-
-### Instruções
-Antes de começar, vamos organizar nosso setup.
-* Fork esse repositório
-* Clone o fork na sua máquina (Para isso basta abrir o seu terminal e digitar `git clone https://github.com/reprograma/on26-python-s08-projeto-guiado-II`)
-* Entre na pasta do seu repositório (Para isso basta abrir o seu terminal e digitar `cd on26-python-s08-projeto-guiado-II`)
-
-### Resumo
-O que veremos na aula de hoje?
-* [Projeto Guiado II](#TDD)
-
-## Conteúdo
-### Projeto Guiado II - TDD
-Projeto guiado visando colocar em prática os conceitos vistos no módulo: Orientação a Objetos e Testes.
-
-Criar um sistema de gerenciamento de biblioteca usando TDD com as funcionalidades:
-- Adicionar livros
-- Listar livros
-- Emprestar livros
-
-***
-### Exercícios
-* [Exercicio para sala](https://github.com/reprograma/on26-python-s08-projeto-guiado-II/tree/main/exercicios/para-sala)
-* [Exercicio para casa](https://github.com/reprograma/on26-python-s08-projeto-guiado-II/tree/main/exercicios/para-casa)
-
-#### Como criar meu Pull Request?
-[Instruções Pull Request](https://github.com/reprograma/on26-python-s08-projeto-guiado-II/blob/main/exercicios/para-casa/instrucoes-pull-request.md)
-
-### Material da aula
-- [Material de apoio](https://docs.google.com/presentation/d/1xn1iPDu5aDmG7-mEh9EotPsqHcNHsSpadulo1WazRzo/edit?usp=sharing)
-
-### Links Úteis
-- [Referências](https://github.com/reprograma/on26-python-s08-projeto-guiado-II/blob/main/material/material.md)
-
-
-Desenvolvido com :purple_heart:
-
\ No newline at end of file
+# Exercício de Casa 🏠
+
+## Criar método remove_book
+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 e remover da propriedade Books
+- O método deve remover apenas 1 (um) livro por vez
+- 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)
+
+## Criar método search_book
+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
+- Caso o livro não seja encontrado o método deve retornar a mensagem "Livro não encontrado"
+
+## Criar método return_book
+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 devolvido e mudar o status do livro para não emprestado na propriedade Books
+- Caso o livro não seja encontrado o método deve apenas exibir a mensagem "Livro não encontrado"
+
+---
+
+Terminou o exercício? Dá uma olhada nessa checklist e confere se tá tudo certinho, combinado?!
+
+- [ ] Fiz o fork do repositório.
+- [ ] Clonei o fork na minha máquina (`git clone url-do-meu-fork`).
+- [ ] Resolvi o exercício.
+- [ ] Adicionei as mudanças. (`git add .` para adicionar todos os arquivos, ou `git add nome_do_arquivo` para adicionar um arquivo específico)
+- [ ] Commitei a cada mudança significativa ou na finalização do exercício (`git commit -m "Mensagem do commit"`)
+- [ ] Pushei os commits na minha branch (`git push origin nome-da-branch`)
+- [ ] Criei um Pull Request seguindo as orientaçoes que estao nesse [documento](https://github.com/reprograma/on26-python-s08-projeto-guiado-II/blob/main/exercicios/para-casa/instrucoes-pull-request.md).
diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/instrucoes-pull-request.md b/instrucoes-pull-request.md
new file mode 100644
index 0000000..e7005a3
--- /dev/null
+++ b/instrucoes-pull-request.md
@@ -0,0 +1,31 @@
+# Como criar meu Pull Request? 🤔
+
+Olá, meninas!
+O checklist da atividade ta todo preenchido? Entao agora tá na hora de fazer nosso pull request para o repositório original.
+Você deverá navegar até o seu repositório onde você fez o fork e pressionar o botão “New pull request” no lado esquerdo da página.
+
+
+Você poderá modificar a branch na próxima tela.
+
+Depois de ter escolhido a branch main do repositório original no lado esquerdo, e a nova-branch do seu fork do lado direito, você deve ver uma tela assim:
+
+
+
+O GitHub vai lhe alertar de que é possível mesclar as duas branches porque não há código concorrente. Você deve adicionar um título, e um comentário descrevendo o seu PR.
+DICAS:
+1. Você pode seguir esse modelo para o título do seu PR:
+```
+Nome da Atividade - Seu nome.
+```
+2. Você pode seguir esse modelo para a descrição do seu PR:
+```
+O que?
+Resolução dos exercícios de lógica.
+
+Como?
+* Adicionei um arquivo para resolver a atividade 1 utilizando os métodos slice e split;
+* Adicionei casos de testes unitários para cada um dos exercícios utilizando jest;
+* Outro ponto que você queira adicionar.
+```
+Feito isso, é so clicar em “Create pull request”.
+Tcharaaaannn! Agora é só esperar a prof revisar seu PR 💜
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..60cf74d
--- /dev/null
+++ b/main.py
@@ -0,0 +1,19 @@
+#não é obrigatorio#
+
+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)
+
+for livro in biblioteca_objeto.livros:
+ print(livro.nome)
+ print(livro.autor)
\ No newline at end of file
diff --git a/testBiblioteca.py b/testBiblioteca.py
new file mode 100644
index 0000000..4fae88b
--- /dev/null
+++ b/testBiblioteca.py
@@ -0,0 +1,55 @@
+from unittest import TestCase
+
+from Livro import Livro
+from Biblioteca import Biblioteca
+
+class TestBiblioteca(TestCase):
+ def setUp(self):
+ self.biblioteca = Biblioteca()
+
+ def test_init_deve_passar(self): # usa o DEF pq ele é um método
+ # Arrange / Act
+ #biblioteca = Biblioteca()
+
+ # Assert
+ self.assertIsInstance(self.biblioteca.livros, list)
+ def test_adicionar_livro_deve_passar(self):
+ # Arrange
+ #biblioteca = Biblioteca()
+ nome_livro = "Bunker"
+ autor_livro = "Kevin Brooks"
+ 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
+ #biblioteca = Biblioteca()
+ livro = 1988
+
+ # Act
+ #self.biblioteca.adicionar_livro(livro) # essa função está sendo chamada na linha 38
+
+ # Assert
+ with self.assertRaises(TypeError):
+ self.biblioteca.adicionar_livro(livro)
+
+ def test_init_exibir_livros(self, livro_auto_ajuda, livro_como_ficar_milionario):
+ self.biblioteca = exibir_livros
+
+
+
+ def test_init_emprestar_livro(self, livro: livros):
+ nome_livro = "livro_auto_ajuda" , "livro_como_ficar_milionario"
+ autor_livro = "João" , "Fernanda"
+ livro_auto_ajuda = livro_auto_ajuda(nome_livro, autor_livro)
+ livro_como_ficar_milionario = livro_como_ficar_milionario(nome_livro, autor_livro)
+ return nome_livro - str(self.livro_auto_ajuda, livro_como_ficar_milionario)
+
+ self.livro_como_ficar_milionario = livro_como_ficar_milionario
+
+
diff --git a/testLivro.py b/testLivro.py
new file mode 100644
index 0000000..92c2b58
--- /dev/null
+++ b/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 = "Anjos e Demonios"
+ autor = "Dan Browm"
+
+ # Act
+ livro = Livro(nome, autor)
+
+ # Assert
+ self.assertEqual(nome, livro.nome)
+ self.assertEqual(autor, livro.autor)
+ self.assertEqual(False, livro.esta_emprestado)
From 545603d429caa473046b86ab83f16fb9258a620b Mon Sep 17 00:00:00 2001
From: Maria de Fatima Rodrigues
Date: Sun, 15 Oct 2023 19:14:56 -0300
Subject: [PATCH 2/2] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20do=20exerc=C3=ADcio?=
=?UTF-8?q?=20da=20semana08,=20obrigada!?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
exercicios/para-casa/Biblioteca.py | 15 +++++
exercicios/para-casa/Livro.py | 9 +++
exercicios/para-casa/__init__.py | 0
exercicios/para-casa/main.py | 19 +++++++
exercicios/para-casa/testBiblioteca.py | 76 ++++++++++++++++++++++++++
exercicios/para-casa/testLivro.py | 16 ++++++
6 files changed, 135 insertions(+)
create mode 100644 exercicios/para-casa/Biblioteca.py
create mode 100644 exercicios/para-casa/Livro.py
create mode 100644 exercicios/para-casa/__init__.py
create mode 100644 exercicios/para-casa/main.py
create mode 100644 exercicios/para-casa/testBiblioteca.py
create mode 100644 exercicios/para-casa/testLivro.py
diff --git a/exercicios/para-casa/Biblioteca.py b/exercicios/para-casa/Biblioteca.py
new file mode 100644
index 0000000..d8ea727
--- /dev/null
+++ b/exercicios/para-casa/Biblioteca.py
@@ -0,0 +1,15 @@
+from Livro import Livro # o from vem de "tal" lugar... do modulo livro importamos a classe livros
+class Biblioteca: # criando uma nova biblioteca chamada livro
+ def __init__(self): # método construtor INIT para definir as propriedades ou atribuições da nossa classe
+
+ self.livros = [] # com a funçaõ self a gente vai acessar a variável livro associando a uma lista'[]
+
+ def adicionar_livro(self, livro: Livro): # def é usado em uma ação(verbo no infinitvo) neste caso
+ if(not isinstance (livro, Livro)): #funçao de atribuição - #not isinstace diz que o "livro" só existe mas n foi utilizado
+ raise TypeError(f"Esperado Livro obtido valor {livro} do tipo {type(livro)}") # o raise vai estourar essa exceção e vai passar a atribuir esse livro as ações
+ self.livros.append(livro) # o append adiconar as "coisas" dentro de listas
+
+ def exibir_livro(self):
+ return self.livros
+
+
diff --git a/exercicios/para-casa/Livro.py b/exercicios/para-casa/Livro.py
new file mode 100644
index 0000000..407cf2e
--- /dev/null
+++ b/exercicios/para-casa/Livro.py
@@ -0,0 +1,9 @@
+class Livro: # criando a classe livros, que vai ser usado dentro dos métodos da classe de biblioteca
+ def __init__(self, nome, autor, ano): # método construtor INIT para definir as propriedades ou atribuições da nossa classe
+ # self é uma função que vai ajudar a chamar a atribuição
+ self.nome = nome
+ self.autor = autor
+ self.ano = ano
+ self.esta_emprestado = False # estar_emprestado recebe uma palavra reservada(false/true, nesse caso)
+
+ # módulos só é modulo quando tem um init.py(todos os arquivos denro se tornam modulos)
\ 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/main.py b/exercicios/para-casa/main.py
new file mode 100644
index 0000000..f9808db
--- /dev/null
+++ b/exercicios/para-casa/main.py
@@ -0,0 +1,19 @@
+#não é obrigatorio#
+
+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)
+
+for livro in biblioteca_objeto.livros:
+ print(livro.nome)
+ print(livro.autor)
\ No newline at end of file
diff --git a/exercicios/para-casa/testBiblioteca.py b/exercicios/para-casa/testBiblioteca.py
new file mode 100644
index 0000000..b3eebd6
--- /dev/null
+++ b/exercicios/para-casa/testBiblioteca.py
@@ -0,0 +1,76 @@
+from unittest import TestCase # de dentro de unittest importamos a ferramenta TestCase
+
+from Livro import Livro # de dentro do módulo livro importamos a classe livro
+from Biblioteca import Biblioteca # de dentro do modulo bibliteca a classe biblioteca
+
+class TestBiblioteca(TestCase): # criando uma classe de teste biblioteca que vai usar a ferramenta testCase
+ def setUp(self): # setup é usado para abreviar uma função grande
+ self.biblioteca = Biblioteca() #acessando a varável biblioteca e atribuindoa classe
+
+ def test_init_deve_passar(self): # o __INIT__ é chamado de consultor, ele permite e dar inicio os métodos e propriedades
+ # Arrange / Act
+ #biblioteca = Biblioteca()
+
+ # Assert
+ self.assertIsInstance(self.biblioteca.livros, list) # testando se os livros da biblioteca estão associados a uma lista
+ def test_adicionar_livro_deve_passar(self):
+
+ # Arrange
+ #biblioteca = Biblioteca()
+ nome_livro = "Bunker"
+ autor_livro = "Kevin Brooks"
+ ano = 2002
+ livro = Livro(nome_livro, autor_livro, ano)
+
+ # Act
+ self.biblioteca.adicionar_livro(livro)
+
+ # Assert
+ self.assertEqual(1, len(self.biblioteca.livros)) #
+
+ # def test_adicionar_livro_nao_deve_inserir_numero(self):
+ # Arrange
+ #biblioteca = Biblioteca()
+ # livro = 1988
+
+ # Act
+ #self.biblioteca.adicionar_livro(livro) # essa função está sendo chamada na linha 38
+
+ # Assert
+ # with self.assertRaises(TypeError):
+ # self.biblioteca.adicionar_livro(livro)
+
+ # def test_init_exibir_livros_vazio(self): # o self aparece dentro de todas as funções que
+ # lista_vazia = Biblioteca() #criando uma nova variável chamada lista vazia que recebe o módulo biblioteca
+ # livros_listados = lista_vazia.exibir_livro() #
+ # self.assertEqual(0, len(livros_listados)) == 0 # os dois == e o zero garante que a lista está vazia fazem(que a lista é do tamanho de zero que é iguala zero)
+
+ # def test_init_exibir_livros(self):
+ # lista = Biblioteca()
+ # lista.adicionar_livro(Livro("Bunker", "Keven Brooks", 2002))
+ # relacao = lista.exibir_livro()
+ # self.assertEqual(1, len(relacao)) #relação é os livros disponíveis para exibir
+ # self.assertEqual(relacao[0].nome, "Bunker")
+ # self.assertEqual(relacao[0].autor, "Keven Brooks")
+ # self.assertEqual(relacao[0].ano, 2002)
+
+
+ #fazer devolução
+ def test__initt__devolver_livro(self):
+ lista_devolucao = Biblioteca() # a class aqui é biblioteca de onde tiraremos as informações para
+ lista_devolucao.devolver_livro(Livro("Bunker", "Keven Brooks", 2002))
+ self.assertEqual(lista_devolucao[1].nome, "Bunker")
+ self.assertEqual(lista_devolucao[1].autor, "Keven Brooks")
+ self.assertEqual(lista_devolucao[0].ano, 2002)
+ ## será que deveria ter um return?##
+
+ ####### MAIS PRA FRENTE EU VOLTO PRA FAZER OS DEMAIS\ºº/######
+ # nome_livro = "livro_auto_ajuda" , "livro_como_ficar_milionario"
+ # autor_livro = "João" , "Fernanda"
+ #livro_auto_ajuda = livro_auto_ajuda(nome_livro, autor_livro)
+ # livro_como_ficar_milionario = livro_como_ficar_milionario(nome_livro, autor_livro)
+ # return nome_livro - str(self.livro_auto_ajuda, livro_como_ficar_milionario)
+
+ #self.livro_como_ficar_milionario = livro_como_ficar_milionario
+
+
diff --git a/exercicios/para-casa/testLivro.py b/exercicios/para-casa/testLivro.py
new file mode 100644
index 0000000..8cd4531
--- /dev/null
+++ b/exercicios/para-casa/testLivro.py
@@ -0,0 +1,16 @@
+from unittest import TestCase # pra essa situação vamos usar o unittest que é uma biblioteca com ferramentas de teste, por ex: testCase
+from Livro import Livro # precisa importar do modulo "arquivo" livro, importamos a classe livros
+
+class testlivro(TestCase): # criando a classe de teste livro usando da ferramenta testCase
+ def test_init_deve_passar(self): # a gente utilizou novamente o método construtor que leva como parâmentro SELF
+ # Arrange é usado para definir as configuraçõe do que se precisa
+ nome = "Anjos e Demonios" # variável nome e autor
+ autor = "Dan Browm"
+
+ # Act é ação
+ livro = Livro(nome, autor) # dentro do act cria uma varíavel ou um objeto que realiza a ação de acessar os parâmetros da classe
+
+ # Assert é o teste
+ self.assertEqual(nome, livro.nome) # o assertEqual ele define que tem que ser igual
+ self.assertEqual(autor, livro.autor)
+ self.assertEqual(False, livro.esta_emprestado) # por ser uma palavra reservada chamamos direto da classe livros e não associamos ao objeto criado no ACT