87 lines
3.9 KiB
PHP
87 lines
3.9 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace Tests\Feature;
|
||
|
|
|
||
|
|
use App\Models\Client;
|
||
|
|
use App\Models\Product;
|
||
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||
|
|
use Tests\TestCase;
|
||
|
|
|
||
|
|
class Tp6SearchPaginationTest extends TestCase
|
||
|
|
{
|
||
|
|
use RefreshDatabase;
|
||
|
|
|
||
|
|
public function test_client_search_checks_name_email_and_city(): void
|
||
|
|
{
|
||
|
|
Client::create(['name' => 'Jean Dupont', 'email' => 'jean@example.test', 'city' => 'Paris']);
|
||
|
|
Client::create(['name' => 'Marie Martin', 'email' => 'marie@gmail.test', 'city' => 'Lyon']);
|
||
|
|
Client::create(['name' => 'Paul Durand', 'email' => 'paul@example.test', 'city' => 'Bordeaux']);
|
||
|
|
|
||
|
|
$this->get(route('clients.index', ['search' => 'Jean']))
|
||
|
|
->assertOk()->assertSee('Jean Dupont')->assertDontSee('Marie Martin');
|
||
|
|
$this->get(route('clients.index', ['search' => 'gmail']))
|
||
|
|
->assertOk()->assertSee('Marie Martin')->assertDontSee('Jean Dupont');
|
||
|
|
$this->get(route('clients.index', ['search' => 'Bordeaux']))
|
||
|
|
->assertOk()->assertSee('Paul Durand')->assertDontSee('Marie Martin');
|
||
|
|
$this->get(route('clients.index'))
|
||
|
|
->assertOk()->assertSee('Jean Dupont')->assertSee('Marie Martin')->assertSee('Paul Durand');
|
||
|
|
}
|
||
|
|
|
||
|
|
public function test_client_pagination_keeps_the_search_on_page_two(): void
|
||
|
|
{
|
||
|
|
for ($number = 1; $number <= 12; $number++) {
|
||
|
|
Client::create([
|
||
|
|
'name' => sprintf('Jean %02d', $number),
|
||
|
|
'email' => sprintf('jean%02d@example.test', $number),
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
Client::create(['name' => 'Autre Client', 'email' => 'autre@example.test']);
|
||
|
|
|
||
|
|
$first = $this->get(route('clients.index', ['search' => 'Jean']));
|
||
|
|
$first->assertOk()->assertSee('Jean 01')->assertDontSee('Jean 11')
|
||
|
|
->assertSee('Nombre total de clients : 12')
|
||
|
|
->assertSee('search=Jean', false);
|
||
|
|
$this->assertSame(10, $first->viewData('clients')->count());
|
||
|
|
|
||
|
|
$second = $this->get(route('clients.index', ['search' => 'Jean', 'page' => 2]));
|
||
|
|
$second->assertOk()->assertSee('Jean 11')->assertSee('Jean 12')
|
||
|
|
->assertDontSee('Jean 01')->assertDontSee('Autre Client');
|
||
|
|
$this->assertSame(2, $second->viewData('clients')->count());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function test_product_search_by_name_or_price_is_paginated(): void
|
||
|
|
{
|
||
|
|
for ($number = 1; $number <= 12; $number++) {
|
||
|
|
Product::create(['name' => sprintf('Clavier %02d', $number), 'price' => 50, 'stock' => 10]);
|
||
|
|
}
|
||
|
|
Product::create(['name' => 'Souris', 'price' => 15.50, 'stock' => 4]);
|
||
|
|
|
||
|
|
$first = $this->get(route('products.index', ['search' => 'Clavier']));
|
||
|
|
$first->assertOk()->assertSee('Clavier 01')->assertDontSee('Clavier 11')
|
||
|
|
->assertSee('Nombre total de produits : 12')
|
||
|
|
->assertSee('search=Clavier', false);
|
||
|
|
$this->assertSame(10, $first->viewData('products')->count());
|
||
|
|
|
||
|
|
$this->get(route('products.index', ['search' => 'Clavier', 'page' => 2]))
|
||
|
|
->assertOk()->assertSee('Clavier 11')->assertDontSee('Clavier 01');
|
||
|
|
$this->get(route('products.index', ['search' => '15']))
|
||
|
|
->assertOk()->assertSee('Souris')->assertDontSee('Clavier 01');
|
||
|
|
}
|
||
|
|
|
||
|
|
public function test_form_requests_keep_tp5_validation_and_messages(): void
|
||
|
|
{
|
||
|
|
$this->post(route('clients.store'), ['name' => '', 'email' => 'bonjour'])
|
||
|
|
->assertSessionHasErrors(['name', 'email']);
|
||
|
|
$this->post(route('products.store'), ['name' => 'Clavier', 'price' => -2, 'stock' => 1])
|
||
|
|
->assertSessionHasErrors('price');
|
||
|
|
|
||
|
|
$client = Client::create(['name' => 'Jean Dupont', 'email' => 'jean@example.test']);
|
||
|
|
$this->put(route('clients.update', $client), [
|
||
|
|
'name' => 'Jean Dupont',
|
||
|
|
'email' => 'jean@example.test',
|
||
|
|
'city' => 'Paris',
|
||
|
|
])->assertRedirect(route('clients.index'));
|
||
|
|
$this->assertDatabaseHas('clients', ['id' => $client->id, 'city' => 'Paris']);
|
||
|
|
}
|
||
|
|
}
|