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']); } }