Repository: lidimayra/ruby-empowers
Pull request #10: Move conteúdo sobre testes
Author: login: anacls
Created: 2025-05-06T21:09:18Z | Merged: 2025-05-06T21:45:12Z

Move conteúdo sobre testes para um documento separado e edita a ordem dos conteúdos. 


Diff:
diff --git a/docs/3-models/README.md b/docs/3-models/README.md
index eefad21..4b84cc6 100644
--- a/docs/3-models/README.md
+++ b/docs/3-models/README.md
@@ -58,77 +58,4 @@ Seguindo essa linha, tente encontrar as respostas para as seguintes perguntas:
 - Quais os títulos dos livros que se encontram indisponíveis?
 - Existe algum livro publicado pela editora Ática disponível para empréstimo?
 
-Material de consulta: [Recuperando Objetos do Banco de Dados(Guia Rails)](https://guiarails.com.br/active_record_querying.html#recuperando-objetos-do-banco-de-dados).
-
-## Testes
-Para os testes, usaremos o [RSpec](https://rspec.info/).
-
-Já criamos o arquivo de testes para o model Book e o definimos em `spec/models/book_spec.rb`. Abra
-o arquivo e mantenha-o lado a lado com o arquivo contendo o nosso model.
-
-A ideia é não alterar a implementação dos testes por enquanto. Queremos implementar a lógica em
-Book até que todos os testes passem. Não precisamos nos preocupar com qualidade de código, vamos
-focar em implementar o mínimo possível para alcançar o comportamento esperado. Uma vez que os
-testes estiverem verdes, podemos considerar melhorias em ambos os lados (tanto nos testes quando
-no model).
-
-Todos os testes estão falhando nesse momento já que o model Book está vazio.
-Colocamos esses testes em pendência através da adição da linha `pending "Make it pass"` no início de
-cada um deles.
-
-Vamos comecar! No primeiro teste do arquivo, onde testamos a validamos de presença do atributo
-title, delete a linha que marca a pendência do teste e execute-o:
-
-```
-docker compose run --rm web bin/rspec spec/models/book_spec.rb:5
-```
-
-Aqui estamos acrescentando um `:5` no final da linha para indicar que estamos exclusivamente
-interessadas no teste definido na linha 5 do nosso arquivo. Essa abordagem nos ajudar a manter o
-foco apenas no que nos interessa e excluir ruídos.
-
-O teste agora deve estar falhando com a seguinte mensagem de erro exibida em vermelho:
-
-```
- 1) Book#validations validates presence of title
-     Failure/Error: expect(Book.new).to validate_presence_of :title
-
-       Expected Book to validate that :title cannot be empty/falsy, but this
-       could not be proved.
-         After setting :title to ‹""›, the matcher expected the Book to be
-         invalid, but it was valid instead.
-```
-
-Sempre preste muita atenção ao que a mensagem de erro diz (use um tradutor para facilitar se
-preferir). Nesse caso, está nos dizendo que mesmo ao usar um valor vazio para o título, o objeto foi
-considerado válido, portanto, a validação para o atributo título está funcionando.
-
-Isso faz sentido, dado que nunca a implementamos.
-
-Agora vamos para o código do model.
-Implemente o código necessário para que o teste passe.
-
-Material de consulta: [Validações do
-ActiveRecord (Guia Rails)](https://guiarails.com.br/active_record_validations.html).
-
-O teste passou? Ótimo.
-O seu código agora está testado e você pode se sentir segura para refatora-lo como quiser sem medo
-de que a validação quebre. Nesse primeiro exercício, provavelmente não temos muito espaço para
-refactor devido a simplicidade do exemplo, mas essa linha de raciocínio será bem-vinda conforme a
-complexidade aumentar.
-
-Vamos para o próximo bloco de testes.
-Note que eles estão dentro de um bloco definido como `describe "#details"`. Isso indica que os
-testes contidos nesse bloco testarão a implementação de um método em Book chamado `details`. Note
-que o bloco já está definido, mas por enquanto ainda está vazio. Novamente, vamos repetir um
-processo similar ao anterior: remova a linha que marca a pendência do primeiro teste no bloco, rode
-o teste, veja-o falhar. Agora direcione o foco para a implementação do método no model e garante que
-o teste passe. Uma vez que o teste passar, fique à vontade para aplicar melhorias no código como
-preferir.
-
-Faça isso com todos os testes contidos no arquivo `book_spec.rb` até que todos estejam verdes.
-Ao final, rode todos eles:
-
-```
-docker compose run --rm web bin/rspec spec/models/book_spec.rb
-```
+Material de consulta: [Recuperando Objetos do Banco de Dados(Guia Rails)](https://guiarails.com.br/active_record_querying.html#recuperando-objetos-do-banco-de-dados).
\ No newline at end of file
diff --git a/docs/4-introducao-ao-tdd/README.md b/docs/4-introducao-ao-tdd/README.md
new file mode 100644
index 0000000..69a8ed1
--- /dev/null
+++ b/docs/4-introducao-ao-tdd/README.md
@@ -0,0 +1,91 @@
+# Introdução ao TDD
+
+## O que é TDD
+TDD é a sigla para "Test-Driven Development" - Desenvolvimento Orientado a Testes. 
+É uma abordagem onde você escreve os testes antes mesmo de escrever o código que será testado. 
+O TDD pode ser dividido em 3 etapas: 
+1- Escrever um teste que define o que o seu código deveria fazer
+2- Escrever o código mais simples possível para fazer o teste passar
+3- Melhorar o código, mantendo o seu teste passando
+
+Esse tipo de abordagem resulta em códigos mais confiáveis e com menos defeitos.
+
+## Praticando
+
+Para os testes, usaremos o [RSpec](https://rspec.info/).
+
+Já criamos o arquivo de testes para o model Book e o definimos em `spec/models/book_spec.rb`. Abra
+o arquivo e mantenha-o lado a lado com o arquivo contendo o nosso model.
+
+A ideia é não alterar a implementação dos testes por enquanto. Queremos implementar a lógica em
+Book até que todos os testes passem. Não precisamos nos preocupar com qualidade de código, vamos
+focar em implementar o mínimo possível para alcançar o comportamento esperado. Uma vez que os
+testes estiverem verdes, podemos considerar melhorias em ambos os lados (tanto nos testes quando
+no model).
+
+Todos os testes estão falhando nesse momento já que o model Book está vazio.
+Colocamos esses testes em pendência através da adição da linha `pending "Make it pass"` no início de
+cada um deles.
+
+Vamos comecar! No primeiro teste do arquivo, onde testamos a validamos de presença do atributo
+title, delete a linha que marca a pendência do teste e execute-o:
+
+```
+docker compose run --rm web bin/rspec spec/models/book_spec.rb:5
+```
+
+Aqui estamos acrescentando um `:5` no final da linha para indicar que estamos exclusivamente
+interessadas no teste definido na linha 5 do nosso arquivo. Essa abordagem nos ajudar a manter o
+foco apenas no que nos interessa e excluir ruídos.
+
+O teste agora deve estar falhando com a seguinte mensagem de erro exibida em vermelho:
+
+```
+ 1) Book#validations validates presence of title
+     Failure/Error: expect(Book.new).to validate_presence_of :title
+
+       Expected Book to validate that :title cannot be empty/falsy, but this
+       could not be proved.
+         After setting :title to ‹""›, the matcher expected the Book to be
+         invalid, but it was valid instead.
+```
+
+Sempre preste muita atenção ao que a mensagem de erro diz (use um tradutor para facilitar se
+preferir). Nesse caso, está nos dizendo que mesmo ao usar um valor vazio para o título, o objeto foi
+considerado válido, portanto, a validação para o atributo título está funcionando.
+
+Isso faz sentido, dado que nunca a implementamos.
+
+Agora vamos para o código do model.
+Implemente o código necessário para que o teste passe.
+
+Material de consulta: [Validações do
+ActiveRecord (Guia Rails)](https://guiarails.com.br/active_record_validations.html).
+
+O teste passou? Ótimo.
+O seu código agora está testado e você pode se sentir segura para refatora-lo como quiser sem medo
+de que a validação quebre. Nesse primeiro exercício, provavelmente não temos muito espaço para
+refactor devido a simplicidade do exemplo, mas essa linha de raciocínio será bem-vinda conforme a
+complexidade aumentar.
+
+Vamos para o próximo bloco de testes.
+Note que eles estão dentro de um bloco definido como `describe "#details"`. Isso indica que os
+testes contidos nesse bloco testarão a implementação de um método em Book chamado `details`. Note
+que o bloco já está definido, mas por enquanto ainda está vazio. Novamente, vamos repetir um
+processo similar ao anterior: remova a linha que marca a pendência do primeiro teste no bloco, rode
+o teste, veja-o falhar. Agora direcione o foco para a implementação do método no model e garante que
+o teste passe. Uma vez que o teste passar, fique à vontade para aplicar melhorias no código como
+preferir.
+
+Faça isso com todos os testes contidos no arquivo `book_spec.rb` até que todos estejam verdes.
+Ao final, rode todos eles:
+
+```
+docker compose run --rm web bin/rspec spec/models/book_spec.rb
+```
+
+
+Potenciais TODOS:
+- Como executar: `bin/rails rspec`
+- Escrita de testes
+- request specs
diff --git a/docs/4-rotas-e-controllers/README.md b/docs/5-rotas-e-controllers/README.md
similarity index 100%
rename from docs/4-rotas-e-controllers/README.md
rename to docs/5-rotas-e-controllers/README.md
diff --git a/docs/6-testes/README.md b/docs/6-testes/README.md
deleted file mode 100644
index 8e5d75a..0000000
--- a/docs/6-testes/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Testes
-
-Potenciais TODOS:
-- Como executar: `bin/rails rspec`
-- Escrita de testes
-- request specs
-- TDD flow
diff --git a/docs/5-views/README.md b/docs/6-views/README.md
similarity index 100%
rename from docs/5-views/README.md
rename to docs/6-views/README.md


Reviews:
user: login: lidimayra
state: COMMENTED
author_association: OWNER
submitted_at: 2025-05-06T21:28:34Z
user: login: lidimayra
state: APPROVED
author_association: OWNER
submitted_at: 2025-05-06T21:43:45Z

Review comments:
diff_hunk: @@ -0,0 +1,80 @@
+# Testes
+
+Para os testes, usaremos o [RSpec](https://rspec.info/).
+
+Já criamos o arquivo de testes para o model Book e o definimos em `spec/models/book_spec.rb`. Abra
+o arquivo e mantenha-o lado a lado com o arquivo contendo o nosso model.
+
+A ideia é não alterar a implementação dos testes por enquanto. Queremos implementar a lógica em
+Book até que todos os testes passem. Não precisamos nos preocupar com qualidade de código, vamos
+focar em implementar o mínimo possível para alcançar o comportamento esperado. Uma vez que os
+testes estiverem verdes, podemos considerar melhorias em ambos os lados (tanto nos testes quando
+no model).
+
+Todos os testes estão falhando nesse momento já que o model Book está vazio.
+Colocamos esses testes em pendência através da adição da linha `pending "Make it pass"` no início de
+cada um deles.
+
+Vamos comecar! No primeiro teste do arquivo, onde testamos a validamos de presença do atributo
+title, delete a linha que marca a pendência do teste e execute-o:
+
+```
+docker compose run --rm web bin/rspec spec/models/book_spec.rb:5
+```
+
+Aqui estamos acrescentando um `:5` no final da linha para indicar que estamos exclusivamente
+interessadas no teste definido na linha 5 do nosso arquivo. Essa abordagem nos ajudar a manter o
+foco apenas no que nos interessa e excluir ruídos.
+
+O teste agora deve estar falhando com a seguinte mensagem de erro exibida em vermelho:
+
+```
+ 1) Book#validations validates presence of title
+     Failure/Error: expect(Book.new).to validate_presence_of :title
+
+       Expected Book to validate that :title cannot be empty/falsy, but this
+       could not be proved.
+         After setting :title to ‹""›, the matcher expected the Book to be
+         invalid, but it was valid instead.
+```
+
+Sempre preste muita atenção ao que a mensagem de erro diz (use um tradutor para facilitar se
+preferir). Nesse caso, está nos dizendo que mesmo ao usar um valor vazio para o título, o objeto foi
+considerado válido, portanto, a validação para o atributo título está funcionando.
+
+Isso faz sentido, dado que nunca a implementamos.
+
+Agora vamos para o código do model.
+Implemente o código necessário para que o teste passe.
path: docs/4-testes/README.md
user: login: lidimayra
body: Pensando que ao chegar nessas etapas aqui, pra completar o fluxo TDD, se elas não tiverem a clareza do que é um model, fica meio obscuro
created_at: 2025-05-06T21:28:34Z
author_association: OWNER
diff_hunk: @@ -1,4 +1,16 @@
-# Testes
+# Introdução ao TDD
+
+## O que é TDD
+TDD é a sigla para "Test-Driven Development" - Desenvolvimento Orientado a Testes. 
+É uma abordagem onde você escreve os testes antes mesmo de escrever o código que será testado. 
+O TDD pode ser dividido em 3 etapas: 
+1- Escrever um teste que define o que o seu código deveria fazer
+2- Escrever o código mais simples possível para fazer o teste passar
+3- Melhorar o código, mantendo o seu teste passando
+
+Esse tipo de abordagem resulta em códigos mais confiáveis e com menos defeitos.
path: docs/4-introducao-ao-tdd/README.md
user: login: lidimayra
body: Adorei! 🏆 
created_at: 2025-05-06T21:43:30Z
author_association: OWNER

PR comments:
user: login: lidimayra
created_at: 2025-05-06T21:24:03Z
body: Aqui eu só tenho dúvidas entre separar demais os testes de model do model em si. Fico pensando se vai ficar confuso pra elas, já que os testes do model, envolvem entender o que é um model (e pra fazer os testes passarem, as intruções dessa seção tem a expectativa de que elas implementem o código no model)
author_association: OWNER
user: login: anacls
created_at: 2025-05-06T21:29:13Z
body: @lidimayra minha ideia aqui era manter o conteúdo sobre model antes dos testes, mas deixar os conceitos separados. Aí a primeira vez que um teste seria feito, seria em cima de um model e podemos expandir mais o papo de testes posteriormente. 
author_association: COLLABORATOR
user: login: lidimayra
created_at: 2025-05-06T21:35:43Z
body: ahh boa, falha minha, eu tinha entendido o contrário 🙈  Pode ser, se o conceito do model for introduzido antes, aí acho que rola sim

talvez renomear então esse passo que tá como "4 - testes" pra algo como "4 - Introdução ao TDD" ou algo assim... acho que ajuda a clarificar que nessa etapa inclui testes, mas não é exclusivamente teste (já que vai ter implementação do código no lado da aplicação também)
author_association: OWNER
user: login: anacls
created_at: 2025-05-06T21:36:28Z
body: @lidimayra boa! Faz sentido, vou renomear aqui. 
author_association: COLLABORATOR