Jonathan Fontes

Solução TTD Parte 1 - Pitly

10 de December de 2017

Muhahah, esqueçe. Já estou a queimar as pestanas, vamos ao que interessa. Vamos lá verificar a solução ao nosso primeiro desafio de TDD.

Aqui o mais importante, não é aprender fazer TDD mas sim procurar fazer melhor, a minha solução pode ser encontrada aqui: Ver Pitly

Existem muitas outras coisas que se pode fazer refactor, mas achei por bem fazer desta forma, se achas que devia ter feito de outra forma, entra em contacto comigo pelo o formúlario de contacto. :P (Sim, não tem secção de comentários, nem pretendo ter).

Aqui está os três testes que implementei, mas com isto, tenho a certeza que funciona! :P

<?php

namespace Tests\Feature;

use App\Shorten;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;

class CreateUrlTest extends TestCase
{
    use RefreshDatabase;

    /** @test */
    public function can_submit_url ()
    {
        $url = 'http://www.google.pt';
        $this->post('shorter', ['url' => $url])
            ->assertRedirect('shorter');

        $this->assertDatabaseHas('shortens', [
            'url' => $url
        ]);
    }

    /** @test */
    public function after_created_can_access_shorten_url()
    {
        $shorten = factory(Shorten::class)->create([
            'url' => 'http://www.google.pt'
        ]);
        $this->get("s/{$shorten->token}")
            ->assertRedirect('http://www.google.pt');
    }

    /** @test */
    public function when_submit_the_url_must_be_valid ()
    {
        $this->post('shorter', ['url' => 'not-valid-url'])
            ->assertSessionHasErrors();

        $this->assertDatabaseMissing('shortens', [
            'url' => 'not-valid-url'
        ]);
    }
}

Os testes levaram-me a usar os eventos do modelo, como podem ver aqui: Eventos Modelo

Na parte dois do nosso pequeno desafio, vamos definir as seguintes regras para podermos continuar em frente:

  • Gravar estatísticas, por hora quantas vezes foi visitada.
  • Criar um endpoint para poder consultar as estatísticas.

Na terceira parte, vamos implementar um sistema de API e se estiver inspirado pode ser até com documentação de utilização gerada automaticamente.

Na quarta parte podemos criar uma versão paga, com stripe! E para finalizar o nosso desafio, na quinta parte, vamos criar um pequeno UI / HTML com ajuda de Tailwindcss, que na criação deste post, vai já na versão 0.3.0, foi lançado a menos de um mês e está mesmo espetacular!! :)

Até uma próxima!!!

I don't know why all developer say, "Proudly Hosted by DigitalOcean".

© 2017 · 2018