Estudo de TDD criado com Laravel 8 + Livewire + Inertia

A fim de estudar um pouco sobre TDD no Laravel, eis que me deparei com a playlist de tutoriais do canal Coder’s Tape.

O autor se propõe a criar um pequeno projeto de livraria, pra fazer checkout e checkin de livros e etc., mostrando o seu fluxo de trabalho e como ele utiliza TDD na prática. A didática dele é muito boa e dá pra compreender bem os “como e porquês” ele faz as coisas, eu recomendo se você entende inglês.

Eu segui o tutorial dele utilizando a versão do Laravel 8, que é uma versão superior à que ele usa nos vídeos. Essa versão tem algumas diferenças bastante significativas então eu resolvi criar um repositório pra quem quiser ter uma versão do código mais atualizada.

Tentei me manter o mais fiel possível ao tutorial, mudando apenas o que era pertinente entre as versões e o suficiente para seguir em frente. Porém, algumas coisas no meio do percurso que tiveram de ficar bem diferentes do projeto original.

Existe uma parte do tutorial onde é preciso criar o processo de autenticação, para que alguém que utilize o serviço da biblioteca esteja autenticado quando for retirar e devolver livros. Nesta parte, o autor cria esse processo com a antiga ferramenta que era utilizada para este fim, o comando make:auth.

Porém, isso não é mais nativo do Laravel 8 e, mesmo podendo realizar um procedimento semelhante utilizando Laravel/UI, atualmente a documentação do Laravel 8 incentiva a utilizar o Laravel Jetstream, e foi o que eu tentei implementar no projeto.

Mas isso me trouxe umas dores de cabeça.

Primeiro que a solução Jetstream se propõe a facilitar todo esse processo de autenticação e oferece ferramentas interessantes e poderosas pra este fim. E já deixa no projeto várias coisas prontas que dariam dor de cabeça para criar.

Porém, do meu ponto de vista, ela facilita pra quem precisa do que é oferecido, mas dificulta bastante para os marinheiros de primeira viagem no quesito “prática”.

É certo que se você tiver um tempo para ler a documentação pode até entender como tudo funciona… Mas é preciso entender bem o que está fazendo para poder utilizar com alguma eficiência, além de ter tempo para ler um bom pedaço da documentação (ou procurar tutoriais) pra daí sim começar a fazer algo.

O que, na prática, pra quem quer fazer uma aplicação simples, o Jetstream perde feio pra um simples “make:auth” que já te dá uma autenticação básica suficiente para estudos e coisas do gênero.

Ou seja, pra alguns casos, é como usar uma carreta para fazer a mudança de alguns poucos móveis. Digo isso do ponto de vista de usuário das duas soluções. E o seu projeto pode ficar bastante inchado com um monte de features e arquivos que você talvez não use.

E a documentação é ótima em termos de informação e organização mas pouco eficaz para um “Get Start” rápido.

Em suma, é o mesmo problema que eu vejo em todas as documentações “Laravel like”: são documentações excelentes, muito bem escritas, organizadas, e com ótimo conteúdo pra quem já sabe o que está procurando, mas podem virar um labirinto pra quem está iniciando.

Mas enfim, essa é uma conversa controversa que pode ficar pra uma outra hora.

Resumindo: tive de ficar um bom tempo lendo documentação pra entender como que a “solução prática” (como eles mesmo denominam) funciona. O que não foi nada prático.

A segunda coisa é que em um momento eu tive que escolher qual pacote de soluções frontend deveria instalar na aplicação… Então eu dei uma espiada nos títulos dos vídeos mais à frente da playlist de tutoriais pra me guiar na escolha. E um dos títulos diz que haveria uma instalação de VueJS e Tailwind em algum ponto, então achei que seria interessante escolher o pacote do Jetstream com Inertia, pra poder utilizar os componentes do VueJS.

Aliás, só um parênteses aqui: O pacote do Jetstream instala a versão do VueJS 2.5.17 e do Tailwind 1.8. Se quiser usar o Vue e o Tailwind mais novos tem que instalar /atualizar manualmente. Já fica a dica caso alguém precise procurar documentação e etc.

Continuando, quando cheguei no vídeo percebi que o autor nem usa VueJS. Na verdade, ele acaba implementando a solução com Blade mesmo. Talvez ele tenha pensado em utilizar Vue mais pra frente ou apenas instalou por causa do scaffold de autenticação…

Então eu pensei em desinstalar o Inertia pra instalar a solução do Jetstream com Livewire. Me pareceu que faria mais sentido já que não iria usar o Vue diretamente no tutorial, mas poderia utilizar caso precisasse mesmo no Livewire.

Minha dica de amigo: NEM TENTE.

Não existe um comando “uninstall:inertia” (existe apenas o install:inertia). E pronto. Se não gostou, problema seu. Se quiser desfazer o processo é preciso desinstalar os pacotes manualmente e ainda alterar todas as modificações que o pacote fez anteriormente. Pra isso tem uns tutoriais internet afora mas nem se toca nesse assunto na documentação.

Logo, escolha BEM qual desses pacotes vai instalar na sua aplicação pois o processo de voltar atrás é bem doloroso.

Eu sei que nessa parte eu pareço apenas um reclamão que deveria estar agradecido por me darem um ótima solução pronta de graça…

Mas é que quem escreveu a documentação lá no site faz tanta propaganda dessa solução que é até meio chato. Praticamente no capítulo inteiro sobre autenticação tem caixas vermelhas e links sugerindo: use Jetstream, use, USE.

Mas não tem uninstall pra você.

Enfim, só desabafando pra ficar um post divertido.

No fim, acabei implementando a solução de frontend utilizando o Inertia/Vue mesmo. Tentei me manter o mais fiel possível ao tutorial, mantendo as mesmas tags html e css. Mas como eu não quis criar um template com header de autenticação novo, acabei aproveitando o próprio que já vem com o Jetstream Inertia.

Logo, dá pra acessar a página de “Authors” pelo menu de links na direita, assim que entra no dashboard…

E as telinhas ficaram assim:

O registro vai para o banco de dados…

Mas já aviso que tem que colocar a data no formato Y/d/m (é, pois é), ou seja 1999/09/09. Caso contrário, retorna uma exception que não foi prevista no tutorial e eu também ainda não tratei. Sorry xD

Mas pelo menos os testes estão passando direitinho…

E eu ainda fiz umas firulinhas, como colocar o Faker pra popular dados ali nos testes… Já tava ali mesmo. xD

Talvez eu continue o projeto em algum momento no futuro.

Não sei se o autor dos tutoriais irá continuar com a playlist mas eu gostaria de esperar um pouco mais pra ter certeza. Atualmente a playlist está no vídeo 6 e faz um certo tempo que não foi atualizada.

Eu gostaria também de utilizar a abordagem do TDD no frontend, já que no tutorial isso é focado no backend com PHPUnit. Talvez eu use Jest! Vamos ver como vai ser…

Além do mais, eu também estou seguindo outros tutoriais bem bacanudos. Talvez eu poste por aqui logo, logo, contando a minha experiência.

Então é isso. Fica aí o meu repositório pra quem quiser uma versão mais atualizada, queira dar continuidade ou até mesmo queira uma base pra iniciar um projeto com Laravel 8 + Jetstream + Inertia (e Tailwind haha).

Eu estou bastante satisfeito com o tutorial e vou continuar meus estudos. Quero aprender mais sobre testes automatizados. Ainda estou muito leigo nesse assunto mas já começo a perceber o quanto isso é importante.

É isso. Inté. 🙂

Bolão de Apostas – Laravel – Log#7

Eis que chego ao fim do curso mas não ao fim do projeto!

Até o momento foram adicionados botões na tela inicial que dão acesso à listagem de rodadas, participação em algum bolão criado pelos usuários e um botão de desistência para estes mesmos bolões.

Clicando na imagem do bolão, abre-se um modal com algumas informações.

A plataforma da Udemy já disponibiliza o certificado de conclusão quando o usuário “termina” de assistir os vídeos. Então eis aí o certificado:

Coloco aqui “termina” entre aspas porque é um sistema “burlável”. Se o aluno tiver más intenções basta sair clicando nos vídeos até o final e pegar um certificado.

Isso por um lado é interessante porque possibilita ao aluno pular aulas com conteúdos que já conhece, porém fica à cargo do aluno ser honesto consigo mesmo.

De qualquer forma, penso que conhecimento é algo que interessa ao próprio indivíduo e não aos outros. Se algum sujeito acha que é esperto tentando enganar os outros fingindo ter conhecimento de algo que não domina e se apegando à diplomas, certificações, certificados ou o que quer que seja, ele está apenas enganando a si mesmo.

Enfim, o projeto ainda não terminou, mas não pretendo fazer modificações no projeto enquanto não houver uma finalização oficial do instrutor do curso.

Conforme as aulas forem saindo vou atualizando os logs aqui e o projeto no github.

De qualquer forma, foram 104 aulas até agora. Isso já deve valer de alguma coisa. =]

Link para o curso do Guia Código na Udemy.

Meu repositório com este projeto no Github.

Bolão de Apostas – Laravel – Log#6

Crud e telas para criação de partidas finalizado.

Agora já é possível incluir partidas relacionadas com a lista de rodadas do bolão.

Essa parte demorou um pouco mas o curso está quase acabando. Acho que termino ainda hoje! =D

Link para o curso do Guia Código na Udemy.

Meu repositório com este projeto no Github.

Bolão de Apostas – Laravel – Log#4

Já temos o nosso crud para criar os bolões.

Por algum motivo, mesmo fazendo todos os passos, a opção de editar os bolões não está funcionando bem. Darei uma olhada nisso depois para não ficar empacado no curso.

Eu aproveitei para dar uma refatorada nas views de formulário e agora os campos são criados de forma mais dinâmica.

Vamos que vamos. =]

Link para o curso do Guia Código na Udemy.

Meu repositório com este projeto no Github.