Refactor team runtime

This commit is contained in:
Trail Mate Dev
2026-05-30 15:01:59 +08:00
parent bf7068b02b
commit 7e40b55923
155 changed files with 17241 additions and 3383 deletions
@@ -0,0 +1,127 @@
#include "ui/screens/team/team_page_flow_controller.h"
#include <cassert>
namespace
{
void testNavigateToPushesPreviousPage()
{
team::ui::TeamPageFlowState state;
state.page = team::ui::TeamPage::StatusInTeam;
const auto result = team::ui::TeamPageFlowController().navigateTo(
state,
team::ui::TeamPage::TeamHome,
true);
assert(result.changed);
assert(state.page == team::ui::TeamPage::TeamHome);
assert(state.nav_stack.size() == 1);
assert(state.nav_stack[0] == team::ui::TeamPage::StatusInTeam);
}
void testNavigateBackNormalizesNotInTeamWhenAlreadyInTeam()
{
team::ui::TeamPageFlowState state;
state.page = team::ui::TeamPage::TeamHome;
state.in_team = true;
state.nav_stack.push_back(team::ui::TeamPage::StatusNotInTeam);
const auto result =
team::ui::TeamPageFlowController().navigateBack(state);
assert(result.changed);
assert(!result.request_exit);
assert(state.page == team::ui::TeamPage::StatusInTeam);
assert(state.nav_stack.empty());
}
void testNavigateBackRequestsExitWhenStackEmpty()
{
team::ui::TeamPageFlowState state;
state.page = team::ui::TeamPage::StatusNotInTeam;
const auto result =
team::ui::TeamPageFlowController().navigateBack(state);
assert(!result.changed);
assert(result.request_exit);
}
void testJoinPendingBackResetsToInTeamStatus()
{
team::ui::TeamPageFlowState state;
state.page = team::ui::TeamPage::JoinPending;
state.in_team = true;
state.nav_stack.push_back(team::ui::TeamPage::TeamHome);
const auto result =
team::ui::TeamPageFlowController().navigateBack(state);
assert(result.changed);
assert(state.page == team::ui::TeamPage::StatusInTeam);
assert(state.nav_stack.empty());
}
void testInitialPageSelection()
{
team::ui::TeamPageFlowState state;
state.kicked_out = true;
team::ui::TeamPageFlowController controller;
controller.selectInitialPage(state);
assert(state.page == team::ui::TeamPage::KickedOut);
state = {};
state.pending_join = true;
controller.selectInitialPage(state);
assert(state.page == team::ui::TeamPage::JoinPending);
state = {};
state.in_team = true;
controller.selectInitialPage(state);
assert(state.page == team::ui::TeamPage::StatusInTeam);
state = {};
controller.selectInitialPage(state);
assert(state.page == team::ui::TeamPage::StatusNotInTeam);
}
void testSyncRuntimeKeepsPageConsistentWithPairingAndMembership()
{
team::ui::TeamPageFlowController controller;
team::ui::TeamPageFlowState state;
state.pairing_state = team::TeamPairingState::MemberScanning;
state.page = team::ui::TeamPage::StatusNotInTeam;
auto result = controller.syncRuntime(state, 50);
assert(result.changed);
assert(state.pending_join_started_s == 50);
assert(state.page == team::ui::TeamPage::JoinPending);
state.in_team = true;
state.pairing_state = team::TeamPairingState::Idle;
result = controller.syncRuntime(state, 60);
assert(result.changed);
assert(state.page == team::ui::TeamPage::StatusInTeam);
state.in_team = false;
state.page = team::ui::TeamPage::JoinPending;
result = controller.syncRuntime(state, 70);
assert(result.changed);
assert(state.page == team::ui::TeamPage::StatusNotInTeam);
}
} // namespace
int main()
{
testNavigateToPushesPreviousPage();
testNavigateBackNormalizesNotInTeamWhenAlreadyInTeam();
testNavigateBackRequestsExitWhenStackEmpty();
testJoinPendingBackResetsToInTeamStatus();
testInitialPageSelection();
testSyncRuntimeKeepsPageConsistentWithPairingAndMembership();
return 0;
}