-
Notifications
You must be signed in to change notification settings - Fork 3
refactor(dashboard-manager): Extract focused providers from DashboardManagerProvider #588
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…ManagerProvider - Extract device info data into dedicated `deviceInfoProvider` - Extract ethernet ports data into `ethernetPortsProvider` - Extract router time data into `routerTimeProvider` - Extract system stats data into `systemStatsProvider` - Extract WiFi radios data into `wifiRadiosProvider` - Add `polling_helpers.dart` for shared polling data extraction utilities - Rename `DashboardManagerProvider` to `SessionProvider` for session operations - Rename `DashboardManagerService` to `SessionService` for clarity - Update all consumers to use new focused providers - Add comprehensive unit tests for all new providers - Remove obsolete `DashboardManagerState` and related files
- Add new `--collect` / `-p` flag to collect golden files after tests - Implement `_copyGoldensToSnapshots()` function to copy all golden files from test directories to snapshots folder - Fix issue where golden files were never collected when using the Dart tool (since it always passes `-f` to shell script)
…netPortsProvider - Fix instant_verify_view.dart using undefined dashboardManagerProvider - Fix wifi_bundle_provider.dart using undefined dashboardManagerProvider
PR Compliance Guide 🔍Below is a summary of compliance checks for this PR:
Compliance status legend🟢 - Fully Compliant🟡 - Partial Compliant 🔴 - Not Compliant ⚪ - Requires Further Human Verification 🏷️ - Compliance label |
||||||||||||||||||||||||
PR Code Suggestions ✨Explore these optional code suggestions:
|
||||||||||||||||||||||
…vider_test - Add import for pref_key.dart constants - Replace hardcoded 'currentSN' with pCurrentSN constant - Replace hardcoded 'selectedNetworkId' with pSelectedNetworkId constant - Replace hardcoded 'pnpConfiguredSN' with pPnpConfiguredSN constant
… test design - Add ethernetPortsProvider mock override to match provider dependencies - Extract createRadiosTestData() helper function for test data creation - Refactor seedWithRadios() to properly set state before container creation - Add documentation comments explaining the test setup sequence
AustinChangLinksys
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me
User description
Summary
DashboardManagerProvider:DeviceInfoProvider- device model and SKU informationEthernetPortsProvider- WAN/LAN port connection statusRouterTimeProvider- router local timeSystemStatsProvider- CPU/memory load and uptimeWifiRadiosProvider- WiFi radio settings and guest network infoSessionProvider- session management (login state, cloud connection, timeout)SessionServicefor session-related business logicpolling_helpers.dartutility for polling data extractiondashboardManagerProviderreferences ininstant_verify_view.dartandwifi_bundle_provider.dart--collectflag torun_screenshot_tests.dartfor golden test collectionDashboardManagerProvider,DashboardManagerState, andDashboardManagerServicePR Type
Enhancement, Tests, Refactoring
Description
Extract monolithic
DashboardManagerProviderinto six focused domain providers:DeviceInfoProvider- device model and SKU informationEthernetPortsProvider- WAN/LAN port connection statusRouterTimeProvider- router local timeSystemStatsProvider- CPU/memory load and uptimeWifiRadiosProvider- WiFi radio settings and guest network infoSessionProvider- session management (login state, cloud connection, timeout)Add new
SessionServicefor session-related JNAP operations with error handlingAdd
polling_helpers.dartutility module for safe polling data extractionRefactor
DashboardHomeServiceto accept four focused state parameters instead of monolithic stateUpdate
DashboardHomeProviderto watch multiple focused providers instead of single providerMigrate all views and services to use new focused providers:
InstantVerifyView,InstantAdminView,LoginLocalView- use individual providersWifiBundleProvider,DeviceFilteredListProvider- use focused providersRouterProvider,AuthProvider,SelectNetworkView- useSessionProviderAdd comprehensive unit tests for all new providers and services (1,700+ lines of test coverage)
Add
--collectflag torun_screenshot_tests.dartfor golden file collectionRemove deprecated
DashboardManagerProvider,DashboardManagerState, andDashboardManagerServiceDiagram Walkthrough
File Walkthrough
19 files
dashboard_home_service_test.dart
Update dashboard home service tests for focused providerstest/page/dashboard/services/dashboard_home_service_test.dart
(
deviceInfoState,wifiRadiosState,ethernetPortsState,systemStatsState) instead of monolithicdashboardManagerStatematching the new provider architecture
instead of single
dashboardManagerStateparameterdashboard_home_provider_test.dart
Refactor dashboard home provider tests for domain providerstest/page/dashboard/providers/dashboard_home_provider_test.dart
MockDashboardManagerNotifierclass and replaced withindividual provider overrides
deviceInfoProvider,wifiRadiosProvider,ethernetPortsProvider, andsystemStatsProviderwith values instead ofnotifiers
instead of monolithic state
wifi_radios_provider_test.dart
Add comprehensive tests for wifi radios providertest/core/data/providers/wifi_radios_provider_test.dart
wifiRadiosProviderwith 297 lines oftest coverage
system_stats_provider_test.dart
Add comprehensive tests for system stats providertest/core/data/providers/system_stats_provider_test.dart
systemStatsProviderwith 298 lines oftest coverage
data
session_provider_test.dart
Add comprehensive tests for session providertest/core/data/providers/session_provider_test.dart
sessionProviderwith 271 lines oftest coverage
saveSelectedNetwork,checkRouterIsBack,checkDeviceInfoerror handling
propagation
ethernet_ports_provider_test.dart
Add comprehensive tests for ethernet ports providertest/core/data/providers/ethernet_ports_provider_test.dart
ethernetPortsProviderwith 251 linesof test coverage
data
connection states
router_time_provider_test.dart
Add comprehensive tests for router time providertest/core/data/providers/router_time_provider_test.dart
routerTimeProviderwith 218 lines oftest coverage
device_info_provider_test.dart
Add comprehensive tests for device info providertest/core/data/providers/device_info_provider_test.dart
deviceInfoProviderwith 206 lines oftest coverage
session_service_test.dart
Add comprehensive tests for session servicetest/core/data/services/session_service_test.dart
SessionServicewith 200 lines of testcoverage
checkRouterIsBackmethod with serial number validation and errorhandling
checkDeviceInfomethod with caching and API fallback logicsession_notifier_mocks.dart
Add generated mocks for session notifiertest/mocks/session_notifier_mocks.dart
SessionNotifierwith 168 linessessionProviderNotifierProviderRefandNodeDeviceInfotest_helper.dart
Update test helper for session provider migrationtest/common/test_helper.dart
MockDashboardManagerNotifierwithMockSessionNotifiersessionProviderinstead ofdashboardManagerProviderDashboardManagerStateimport and related mock setupdashboard_home_test_data.dart
Refactor test data builders for focused providerstest/mocks/test_data/dashboard_home_test_data.dart
instead of monolithic
DashboardManagerStatecreateDeviceInfoState(),createWifiRadiosState(),createEthernetPortsState(),createSystemStatsState()createDashboardManagerState(),createDashboardManagerStateWithGuest(), andcreateEmptyDashboardManagerState()methodswifi_bundle_provider_test.dart
Update wifi bundle provider tests for focused providerstest/page/wifi_settings/providers/wifi_bundle_provider_test.dart
MockDashboardManagerNotifierclass and related mock setupwifiRadiosProviderwith value insteadof notifier
WifiRadiosStatedirectlyauth_provider_test.dart
Update auth provider tests to use session providertest/providers/auth/auth_provider_test.dart
dashboardManagerProviderimport withsessionProviderMockDashboardManagerNotifiertoMockSessionNotifiersessionProviderinstead ofdashboardManagerProviderSessionProvider
dashboard_manager_test_state.dart
Rename dashboard manager test states to session providertest/test_data/dashboard_manager_test_state.dart
dashboardManager*tosessionProvider*dashboardManagerChrry7TestState,dashboardManagerPinnacleTestState,dashboardManagerTestStatedashboard_manager_test_data.dart
Rename dashboard manager test data to session test datatest/mocks/test_data/dashboard_manager_test_data.dart
DashboardManagerTestDatatoSessionTestDatainstead of DashboardManagerService
_index.dart
Update mock exports to reference session notifiertest/mocks/_index.dart
dashboard_manager_notifier_mocks.darttosession_notifier_mocks.dartlogin_local_view_test.dart
Update login view test to use session notifier mocktest/page/login/localizations/login_local_view_test.dart
mockDashboardManagerNotifiertomockSessionNotifiercheckDeviceInfo(null)on session notifier mocksession_notifier_spec.dart
Create mockito spec for session notifiertest/mocks/mockito_specs/session_notifier_spec.dart
SessionNotifierSessionNotifierfrom session provider module14 files
wifi_bundle_provider.dart
Migrate wifi bundle provider to focused providerslib/page/wifi_settings/providers/wifi_bundle_provider.dart
dashboardManagerProviderwithwifiRadiosProviderandethernetPortsProviderbuild()method to read individual focused providers instead ofmonolithic state
wifiRadiosStateandethernetPortsStateperformFetch()to useethernetPortsStatefor LAN connectioncheck
session_provider.dart
Add new session provider for session managementlib/core/data/providers/session_provider.dart
SessionNotifierclass (102 lines) for sessionmanagement
saveSelectedNetwork()to persist router selection toSharedPreferences
checkRouterIsBack()to validate router connectivity andserial number
checkDeviceInfo()to retrieve device info with cachingsupport
selectedNetworkIdProviderstate provider for tracking activenetwork
session_service.dart
Add new session service for JNAP operationslib/core/data/services/session_service.dart
SessionServiceclass (98 lines) forsession-related JNAP operations
checkRouterIsBack()with serial number validation and errorhandling
checkDeviceInfo()with caching support and API fallback_mapJnapError()helper to convert JNAP errors to serviceerrors
sessionServiceProviderfor dependency injectiondashboard_home_service.dart
Refactor dashboard home service for focused providerslib/page/dashboard/services/dashboard_home_service.dart
buildDashboardHomeState()method signature to accept fourfocused parameters:
deviceInfoState,wifiRadiosState,ethernetPortsState,systemStatsStatedashboardManagerStateparameter with individual domainstates
router_provider.dart
Migrate router provider to session providerlib/route/router_provider.dart
dashboardManagerProviderwithsessionProviderfor sessionoperations
sessionProvideranddeviceInfoProvider_getStateDeviceInfo()to read fromdeviceInfoProviderinsteadof
dashboardManagerProvidersessionProvider.notifierinstant_verify_view.dart
Migrate instant verify view to focused providerslib/page/instant_verify/views/instant_verify_view.dart
dashboardManagerProviderwith individual focused providers:deviceInfoProvider,systemStatsProvider,routerTimeProvider,ethernetPortsProvider_deviceInfoCard()to read from separate providers for deviceinfo, system stats, and router time
_portsCard()to useethernetPortsProviderinstead of dashboardmanager provider
prepare_dashboard_view.dart
Migrate prepare dashboard view to session providerlib/page/dashboard/views/prepare_dashboard_view.dart
dashboardManagerProviderwithsessionProviderfor sessionoperations
sessionProviderinstead ofdashboardManagerProvidersessionProvider.notifierrun_screenshot_tests.dart
Add golden file collection feature to screenshot teststools/run_screenshot_tests.dart
--collectflag to enable golden file collection after testscomplete
_copyGoldensToSnapshots()function to copy golden filesfrom test directories to snapshots folder
set
wifi_radios_provider.dart
Create new WiFi radios provider for radio settingslib/core/data/providers/wifi_radios_provider.dart
polling_helpers.dartutility for data extractionWifiRadiosStatewith equatable for state managementdevice_info_provider.dart
Create new device info provider for device detailslib/core/data/providers/device_info_provider.dart
polling_helpers.dartutility for data extractionDeviceInfoStatewith equatable for state managementsystem_stats_provider.dart
Create new system stats provider for performance metricslib/core/data/providers/system_stats_provider.dart
polling_helpers.dartutility for data extractionSystemStatsStatewith equatable for state managementethernet_ports_provider.dart
Create new ethernet ports provider for port statuslib/core/data/providers/ethernet_ports_provider.dart
data
polling_helpers.dartutility for data extractionEthernetPortsStatewith equatable for state managementrouter_time_provider.dart
Create new router time provider for local timelib/core/data/providers/router_time_provider.dart
polling_helpers.dartutility for data extractionpolling_helpers.dart
Create polling helpers utility for data extractionlib/core/data/providers/polling_helpers.dart
getPollingOutput()function to safely extract action outputfrom polling data
_getPollingSuccess()helper for result validation11 files
instant_verify_pdf_service.dart
Split dashboard manager into focused providers in PDF servicelib/page/instant_verify/services/instant_verify_pdf_service.dart
dashboardManagerProviderimport with focuseddeviceInfoProviderandsystemStatsProviderdashboardStatetodeviceInfoStateand
systemStatsStatesystemStatsState.uptimes,deviceInfoState.skuModelNumber)instant_admin_view.dart
Migrate instant admin view to device info providerlib/page/instant_admin/views/instant_admin_view.dart
dashboardManagerProvideranddashboardManagerStateimportswith
deviceInfoProviderdashboardManagerStatetodeviceInfoStateDashboardManagerStatetoDeviceInfoStatedeviceInfoState.skuModelNumberanddeviceInfoState.deviceInfodashboard_home_provider.dart
Refactor dashboard home to use focused providerslib/page/dashboard/providers/dashboard_home_provider.dart
dashboardManagerProviderwith four focused providers:deviceInfoProvider,wifiRadiosProvider,ethernetPortsProvider,systemStatsProviderDashboardHomeNotifier.build()to watch multiple focusedproviders instead of monolithic provider
combined dashboard state
login_local_view.dart
Update login view to use session providerlib/page/login/views/login_local_view.dart
dashboardManagerProviderimport withsessionProviderdashboardManagerProvider.notifiertosessionProvider.notifiercheckDeviceInfo(null)on session providerhome_title.dart
Migrate home title widget to router time providerlib/page/dashboard/views/components/widgets/home_title.dart
dashboardManagerProviderimport withrouterTimeProviderstatetorouterTimewith appropriate typerouterTimeProviderdirectly instead ofaccessing nested property
auth_provider.dart
Update auth provider to use session providerlib/providers/auth/auth_provider.dart
dashboardManagerProviderimport withsessionProviderdashboardManagerProvider.notifiertosessionProvider.notifiermanager
select_network_view.dart
Update select network view to use session providerlib/page/select_network/views/select_network_view.dart
dashboardManagerProviderimport withsessionProviderdashboardManagerProvider.notifiertosessionProvider.notifiersaveSelectedNetwork()on session providerdevices_filter_widget.dart
Migrate devices filter widget to WiFi radios providerlib/page/instant_device/views/devices_filter_widget.dart
dashboardManagerProviderimport withwifiRadiosProviderdashboardManagerProvidertowifiRadiosProvidermainRadiosfrom focused providerdevice_filtered_list_provider.dart
Update device filter config to use WiFi radios providerlib/page/instant_device/providers/device_filtered_list_provider.dart
dashboardManagerProviderimport withwifiRadiosProviderdashboardManagerProvidertowifiRadiosProvidermainRadiosfrom focused providerdialogs.dart
Update dialogs to use session providerlib/page/components/shortcuts/dialogs.dart
dashboardManagerProviderimport withsessionProviderdashboardManagerProvider.notifiertosessionProvider.notifiercheckRouterIsBack()on session providerrouter_repository.dart
Update router repository to use session providerlib/core/jnap/router_repository.dart
dashboardManagerProviderimport withsessionProvider1 files
app.dart
Update app comments to reference session providerlib/app.dart
dashboardManagerProvidertosessionProvidername
9 files