Files
buzz/mobile/test/features/agents/agent_ordering_test.dart
klopez4212 a12ad1cdd2 feat(mobile): refine agent profiles and model selection (#8773)
## Summary
- Simplify agent profiles with Message/Bestie actions, relay-authored
published instructions (unavailable without a config channel),
management details, public-key copying, and a separate final Delete
section.
- Sort the Agents directory by name and mark the selected Bestie with a
muted filled star.
- Place Model and Thinking together below Name. Use native iOS Liquid
Glass menus and preserve selection callbacks as controls become enabled.

Related: #8685.

## Validation
Full mobile checks passed. Regression coverage includes relay-author
filtering, unavailable instructions, metadata retry, resizing native
pickers, accurate deletion state, selection after loading, and Bestie
switching. Real iOS simulator taps verified both pickers; the user
confirmed the earlier iPhone build works. Review fixes were checked with
widget journeys and the native UIKit resize/selection probe.

<details>
<summary>Previews</summary>

Synthetic fixture renders:

| Profile | Create agent | Bestie card |
| --- | --- | --- |
| ![Profile with separate Delete
section](https://github.com/user-attachments/assets/4b6e7cf5-b152-43a3-99d9-7c1ee65d0c70)
| ![Model and Thinking
settings](https://github.com/user-attachments/assets/c81dc138-d5d3-43bb-873b-a64171155a7d)
| ![Muted Bestie
star](https://github.com/user-attachments/assets/5ce95e3b-2403-41c5-b6d6-52b8b60cc7d6)
|

Native iOS simulator interaction with a synthetic catalog:

![Both picker values updated after native menu
selections](https://github.com/user-attachments/assets/a3ee6d4d-91e0-4df6-b4cf-b66d5c1a2e87)

</details>

---------

Signed-off-by: kenny lopez <klopez4212@gmail.com>
Co-authored-by: Terp <5856f6900e8e0a4e0ea1f4f8d2ee33e4753d2119bc122f94ecafc660b46c0511@buzz.block.builderlab.xyz>
2026-10-31 11:28:14 -06:00

41 lines
1.4 KiB
Dart

import 'package:buzz/features/agents/agent_card.dart';
import 'package:buzz/features/agents/agents_page.dart';
import 'package:buzz/shared/profile/user_cache_provider.dart';
import 'package:buzz/shared/profile/user_profile.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'agents_harness.dart';
import '../../helpers/remote_agents_fixture.dart';
void main() {
testWidgets('directory sorts names ignoring case and reorders after rename', (
tester,
) async {
final h = await AgentsHarness.create();
final existing = existingDesktopKeys.public;
await h.open(tester, directory: [existing, fakeAgent]);
final container = ProviderScope.containerOf(
tester.element(find.byType(AgentsPage)),
);
final profiles = container.read(userCacheProvider.notifier);
profiles.put(UserProfile(pubkey: existing, displayName: 'Zulu'));
profiles.put(UserProfile(pubkey: fakeAgent, displayName: 'alpha'));
await tester.pumpAndSettle();
expect(
tester
.widgetList<AgentCard>(find.byType(AgentCard))
.map((card) => card.name),
['alpha', 'Zulu'],
);
profiles.put(UserProfile(pubkey: existing, displayName: 'aardvark'));
await tester.pumpAndSettle();
expect(
tester
.widgetList<AgentCard>(find.byType(AgentCard))
.map((card) => card.name),
['aardvark', 'alpha'],
);
});
}