resource_detail_screen_test.dart 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_test/flutter_test.dart';
  3. import 'package:rackpeek_mobile/data/api_client.dart';
  4. import 'package:rackpeek_mobile/data/settings_store.dart';
  5. import 'package:rackpeek_mobile/models/inventory.dart';
  6. import 'package:rackpeek_mobile/screens/resource_detail_screen.dart';
  7. import 'package:rackpeek_mobile/state/inventory_store.dart';
  8. import 'support/memory_storage.dart';
  9. void main() {
  10. testWidgets('service details show every published endpoint', (tester) async {
  11. final store = InventoryStore(
  12. RackPeekApi(baseUrl: 'https://server.example.test', apiKey: 'test-key'),
  13. );
  14. store.document = InventoryDocument(
  15. version: 5,
  16. resources: [
  17. Resource.fromJson({
  18. 'kind': 'Service',
  19. 'name': 'media',
  20. 'network': {'ip': '192.168.1.10', 'port': 8096, 'protocol': 'TCP'},
  21. 'endpoints': [
  22. {'ip': '192.168.1.10', 'port': 8096, 'protocol': 'TCP'},
  23. {'ip': '192.168.1.11', 'port': 8920, 'protocol': 'UDP'},
  24. ],
  25. }),
  26. ],
  27. connections: [],
  28. );
  29. await tester.pumpWidget(
  30. MaterialApp(
  31. home: ResourceDetailScreen(store: store, name: 'media'),
  32. ),
  33. );
  34. expect(
  35. find.text('Published endpoint: 192.168.1.10:8096 (TCP)'),
  36. findsOneWidget,
  37. );
  38. expect(
  39. find.text('Published endpoint: 192.168.1.11:8920 (UDP)'),
  40. findsOneWidget,
  41. );
  42. store.dispose();
  43. });
  44. testWidgets('details refresh immediately after an offline edit', (
  45. tester,
  46. ) async {
  47. final store = InventoryStore(
  48. null,
  49. settings: SettingsStore(storage: MemoryKeyValueStorage()),
  50. );
  51. store.document = InventoryDocument.fromJson({
  52. 'version': 5,
  53. 'resources': [
  54. {'kind': 'Server', 'name': 'nas01'},
  55. ],
  56. 'connections': [],
  57. });
  58. await tester.pumpWidget(
  59. MaterialApp(
  60. home: ResourceDetailScreen(store: store, name: 'nas01'),
  61. ),
  62. );
  63. await store.applyPatch({
  64. 'kind': 'Server',
  65. 'name': 'nas01',
  66. 'notes': 'Saved offline',
  67. });
  68. await tester.pump();
  69. expect(find.text('Saved offline'), findsOneWidget);
  70. store.dispose();
  71. });
  72. }