refactor(core): derive draw_mode/is_won/move_count/is_auto_completable from session
Remove the draw_mode, move_count, is_won, and is_auto_completable fields from GameState; they are now &self methods deriving from the underlying card_game session (draw_mode from session config, move_count from history length, is_won/is_auto_completable from check_win/check_auto_complete). Tests previously fabricated these via direct field writes, which is no longer possible. Add gated test-support overrides on TestPileState (won/auto_completable/move_count) plus setters set_test_won, set_test_auto_completable, set_test_move_count, and set_test_draw_mode (re-deals the seed). All compiled out in production builds. Fix the field->method ripple across solitaire_data, solitaire_wasm, and solitaire_engine. Add a test-support dev-dependency to solitaire_data for the won-game storage test. cargo test --workspace and cargo clippy --workspace -- -D warnings pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -340,7 +340,7 @@ fn handle_forfeit_request(
|
||||
if !forfeit_screens.is_empty() {
|
||||
return;
|
||||
}
|
||||
let game_in_progress = game.as_ref().is_some_and(|g| !g.0.is_won);
|
||||
let game_in_progress = game.as_ref().is_some_and(|g| !g.0.is_won());
|
||||
if !game_in_progress {
|
||||
toast.write(InfoToastEvent("No game to forfeit".to_string()));
|
||||
return;
|
||||
@@ -1025,7 +1025,7 @@ mod tests {
|
||||
app.add_plugins(MinimalPlugins).add_plugins(PausePlugin);
|
||||
app.init_resource::<ButtonInput<KeyCode>>();
|
||||
let mut game = GameState::new(1, DrawMode::DrawOne);
|
||||
game.is_won = true;
|
||||
game.set_test_won(true);
|
||||
app.insert_resource(GameStateResource(game));
|
||||
app.update();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user