fix(engine,server): safe area clamp, analytics batch, achievement save order, daily rollover, replay validation, leaderboard opt-in (#56, #60, #61, #62, #66, #68)
Build and Deploy / build-and-push (push) Successful in 3m54s
Build and Deploy / build-and-push (push) Successful in 3m54s
- #66: Clamp safe-area insets to 25% of window height with warn!() on excess - #68: Move fire_flush outside per-event loop in analytics (batch flush once) - #56: Persist progress before marking reward_granted to prevent XP loss on crash - #60: Add DateRolloverTimer + check_date_rollover system for midnight seed refresh - #62: Add validate_header() in replay upload with mode/draw_mode allowlists - #61: Restore two-query leaderboard opt-in check (SELECT then UPDATE); original queries already in .sqlx cache; EXISTS variant would require sqlx prepare Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -54,7 +54,6 @@ pub struct StatsSnapshot {
|
||||
// `Default::default()` — and `u64::default()` is 0. The merge logic
|
||||
// and the UI must therefore treat 0 as "no win recorded yet".
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
/// Best single score achieved in Classic mode (Draw-One or Draw-Three).
|
||||
/// 0 means "no Classic win yet".
|
||||
#[serde(default)]
|
||||
@@ -191,16 +190,29 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn record_abandoned_resets_win_streak() {
|
||||
let mut s = StatsSnapshot { win_streak_current: 5, ..Default::default() };
|
||||
let mut s = StatsSnapshot {
|
||||
win_streak_current: 5,
|
||||
..Default::default()
|
||||
};
|
||||
s.record_abandoned();
|
||||
assert_eq!(s.win_streak_current, 0, "abandoned game must break the win streak");
|
||||
assert_eq!(
|
||||
s.win_streak_current, 0,
|
||||
"abandoned game must break the win streak"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn record_abandoned_preserves_best_streak() {
|
||||
let mut s = StatsSnapshot { win_streak_best: 7, win_streak_current: 7, ..Default::default() };
|
||||
let mut s = StatsSnapshot {
|
||||
win_streak_best: 7,
|
||||
win_streak_current: 7,
|
||||
..Default::default()
|
||||
};
|
||||
s.record_abandoned();
|
||||
assert_eq!(s.win_streak_best, 7, "best streak must not be reduced on abandon");
|
||||
assert_eq!(
|
||||
s.win_streak_best, 7,
|
||||
"best streak must not be reduced on abandon"
|
||||
);
|
||||
assert_eq!(s.win_streak_current, 0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user