diff --git a/tests/Feature/Admin/MemberNoteInlineUITest.php b/tests/Feature/Admin/MemberNoteInlineUITest.php new file mode 100644 index 0000000..dc8bb90 --- /dev/null +++ b/tests/Feature/Admin/MemberNoteInlineUITest.php @@ -0,0 +1,100 @@ +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); + } +}