Files
BUT2/mini-crm/tests/Feature/Tp6SearchPaginationTest.php

96 lines
4.1 KiB
PHP

<?php
namespace Tests\Feature;
use App\Models\Client;
use App\Models\Product;
use App\Models\User;
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
{
$this->actingAs(User::factory()->create());
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
{
$this->actingAs(User::factory()->create());
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
{
$this->actingAs(User::factory()->create());
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->actingAs(User::factory()->create());
$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']);
}
}