artisan('db:seed', ['--class' => 'RoleSeeder']); } /** @test */ public function member_list_renders_note_count_badge_for_each_member() { $admin = User::factory()->create(); $admin->assignRole('admin'); $member = Member::factory()->create(); // Create 3 notes for this member Note::factory()->count(3)->forMember($member)->byAuthor($admin)->create(); $response = $this->actingAs($admin)->get(route('admin.members.index')); $response->assertStatus(200); // Verify the Alpine.js noteCount is initialized with 3 $response->assertSee('noteCount: 3', false); // Verify badge rendering element exists $response->assertSee('x-text="noteCount"', false); } /** @test */ public function member_list_renders_inline_note_form_with_alpine_directives() { $admin = User::factory()->create(); $admin->assignRole('admin'); Member::factory()->create(); $response = $this->actingAs($admin)->get(route('admin.members.index')); $response->assertStatus(200); // Verify Alpine.js form directives are present $response->assertSee('noteFormOpen', false); $response->assertSee('@submit.prevent="submitNote()"', false); $response->assertSee('x-model="noteContent"', false); $response->assertSee(':disabled="isSubmitting', false); } /** @test */ public function member_list_renders_note_column_header() { $admin = User::factory()->create(); $admin->assignRole('admin'); $response = $this->actingAs($admin)->get(route('admin.members.index')); $response->assertStatus(200); $response->assertSee('備忘錄', false); } /** @test */ public function member_with_zero_notes_shows_zero_count() { $admin = User::factory()->create(); $admin->assignRole('admin'); Member::factory()->create(); $response = $this->actingAs($admin)->get(route('admin.members.index')); $response->assertStatus(200); $response->assertSee('noteCount: 0', false); } /** @test */ public function member_list_includes_correct_note_store_route_for_each_member() { $admin = User::factory()->create(); $admin->assignRole('admin'); $member = Member::factory()->create(); $response = $this->actingAs($admin)->get(route('admin.members.index')); $response->assertStatus(200); // Verify the axios.post URL contains the correct member route $expectedRoute = route('admin.members.notes.store', $member); $response->assertSee($expectedRoute, false); } }