Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src-tauri/crates/db/src/repositories/player_repo.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use domain::player::{Footedness, Player, PlayerAttributes, Position};
use domain::team::TrainingFocus;
use rusqlite::{Connection, params};
use rusqlite::{params, Connection};

/// Insert or replace a player row.
pub fn upsert_player(conn: &Connection, p: &Player) -> Result<(), String> {
Expand Down Expand Up @@ -458,7 +458,7 @@ mod tests {
let db = test_db();
let mut player = sample_player("p-001", None);
player.stats.appearances = 20;
player.stats.goals = 5;
player.stats.kills = 5;
player.stats.assists = 8;
player.stats.shots = 42;
player.stats.shots_on_target = 21;
Expand All @@ -472,7 +472,7 @@ mod tests {
let loaded = load_all_players(db.conn()).unwrap();

assert_eq!(loaded[0].stats.appearances, 20);
assert_eq!(loaded[0].stats.goals, 5);
assert_eq!(loaded[0].stats.kills, 5);
assert_eq!(loaded[0].stats.assists, 8);
assert_eq!(loaded[0].stats.shots, 42);
assert_eq!(loaded[0].stats.shots_on_target, 21);
Expand Down Expand Up @@ -506,7 +506,7 @@ mod tests {
.unwrap();

assert_eq!(loaded_player.stats.appearances, 12);
assert_eq!(loaded_player.stats.goals, 4);
assert_eq!(loaded_player.stats.kills, 4);
assert_eq!(loaded_player.stats.assists, 6);
assert_eq!(loaded_player.stats.minutes_played, 900);
assert_eq!(loaded_player.stats.shots, 0);
Expand Down
2 changes: 1 addition & 1 deletion src-tauri/crates/domain/src/player.rs
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ fn default_transfer_offer_destination_team_id() -> Option<String> {
#[serde(default)]
pub struct PlayerSeasonStats {
pub appearances: u32,
pub goals: u32,
pub kills: u32,
pub assists: u32,
pub clean_sheets: u32,
pub yellow_cards: u32,
Expand Down
6 changes: 3 additions & 3 deletions src-tauri/crates/ofm_core/src/end_of_season.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::game::Game;
use crate::schedule::{
LecSplit, append_fixtures, generate_preseason_friendlies,
generate_single_round_league_with_offsets_and_bo, parse_lec_split, regular_best_of,
append_fixtures, generate_preseason_friendlies,
generate_single_round_league_with_offsets_and_bo, parse_lec_split, regular_best_of, LecSplit,
};
use crate::season_awards::compute_season_awards;
use chrono::{TimeZone, Utc};
Expand Down Expand Up @@ -292,7 +292,7 @@ pub fn process_end_of_season(game: &mut Game) -> EndOfSeasonSummary {
team_id,
team_name,
appearances: player.stats.appearances,
goals: player.stats.goals,
goals: player.stats.kills,
assists: player.stats.assists,
});
}
Expand Down
24 changes: 10 additions & 14 deletions src-tauri/crates/ofm_core/src/season_awards.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@ pub fn compute_season_awards(game: &Game) -> SeasonAwards {
// Golden Boot — top scorers
let golden_boot = top_awards(
&contexts,
|context| context.player.stats.goals > 0,
|context| context.player.stats.goals as f64,
|context| context.player.stats.kills > 0,
|context| context.player.stats.kills as f64,
);

// Assist King
Expand Down Expand Up @@ -350,12 +350,10 @@ mod tests {
.collect();
assert_eq!(top_ids, vec!["p2", "p4", "p1", "p6", "p5"]);
assert_eq!(awards.golden_boot.len(), 5);
assert!(
awards
.golden_boot
.iter()
.all(|entry| entry.player_name != "Zero Apps")
);
assert!(awards
.golden_boot
.iter()
.all(|entry| entry.player_name != "Zero Apps"));
}

#[test]
Expand Down Expand Up @@ -492,11 +490,9 @@ mod tests {
assert_eq!(awards.clean_sheet_king[0].player_id, "free-agent-gk");
assert_eq!(awards.clean_sheet_king[0].team_id, "");
assert_eq!(awards.clean_sheet_king[0].team_name, "Free Agent");
assert!(
awards
.clean_sheet_king
.iter()
.all(|entry| entry.player_id != "defender")
);
assert!(awards
.clean_sheet_king
.iter()
.all(|entry| entry.player_id != "defender"));
}
}
44 changes: 20 additions & 24 deletions src-tauri/crates/ofm_core/src/turn/news.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,14 +170,14 @@ fn unbeaten_run_length(form: &[String]) -> u32 {
fn top_scorer_summary(game: &Game) -> Option<(String, u32)> {
game.players
.iter()
.filter(|player| player.stats.goals > 0)
.filter(|player| player.stats.kills > 0)
.max_by(|a, b| {
a.stats
.goals
.cmp(&b.stats.goals)
.kills
.cmp(&b.stats.kills)
.then_with(|| a.match_name.cmp(&b.match_name))
})
.map(|player| (player.match_name.clone(), player.stats.goals))
.map(|player| (player.match_name.clone(), player.stats.kills))
}

fn weekly_storyline_articles(
Expand Down Expand Up @@ -794,20 +794,18 @@ mod tests {

generate_weekly_digest_news(&mut game, "2025-08-12");

assert!(
game.news
.iter()
.all(|article| !article.id.starts_with("weekly_digest_"))
);
assert!(game
.news
.iter()
.all(|article| !article.id.starts_with("weekly_digest_")));

set_current_date(&mut game, 2025, 8, 11);
generate_weekly_digest_news(&mut game, "2025-08-11");

assert!(
game.news
.iter()
.any(|article| article.id.starts_with("weekly_digest_"))
);
assert!(game
.news
.iter()
.any(|article| article.id.starts_with("weekly_digest_")));
}

#[test]
Expand All @@ -818,16 +816,14 @@ mod tests {

generate_weekly_digest_news(&mut game, "2025-08-11");

assert!(
game.news
.iter()
.all(|article| !article.id.starts_with("weekly_digest_"))
);
assert!(
game.news
.iter()
.all(|article| !article.id.starts_with("storyline_"))
);
assert!(game
.news
.iter()
.all(|article| !article.id.starts_with("weekly_digest_")));
assert!(game
.news
.iter()
.all(|article| !article.id.starts_with("storyline_")));
}

#[test]
Expand Down
2 changes: 1 addition & 1 deletion src-tauri/crates/ofm_core/src/turn/post_match.rs
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ fn apply_player_stats(
for player in game.players.iter_mut() {
if let Some(ps) = report.player_stats.get(&player.id) {
player.stats.appearances += 1;
player.stats.goals += ps.kills as u32;
player.stats.kills += ps.kills as u32;
player.stats.assists += ps.assists as u32;
player.stats.minutes_played += ps.duration_seconds / 60;

Expand Down
2 changes: 1 addition & 1 deletion src-tauri/crates/ofm_core/src/turn/round_summary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ fn build_top_scorer_delta(game: &Game, fixtures: &[&Fixture]) -> Vec<TopScorerDe
.players
.iter()
.filter_map(|player| {
let current_goals = player.stats.goals;
let current_goals = player.stats.kills;
let round_goal_count = round_goals.get(&player.id).copied().unwrap_or(0);
let previous_goals = current_goals.saturating_sub(round_goal_count);

Expand Down
12 changes: 5 additions & 7 deletions src-tauri/crates/ofm_core/tests/end_of_season_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ fn player_stats_reset() {

let p1 = game.players.iter().find(|p| p.id == "p1").unwrap();
assert_eq!(p1.stats.appearances, 0);
assert_eq!(p1.stats.goals, 0);
assert_eq!(p1.stats.kills, 0);
assert_eq!(p1.stats.assists, 0);
}

Expand Down Expand Up @@ -937,12 +937,10 @@ fn next_season_generation_ignores_academy_team_ids() {

let next_league = game.league.as_ref().expect("next league should exist");
assert_eq!(next_league.standings.len(), 10);
assert!(
!next_league
.standings
.iter()
.any(|entry| entry.team_id == "academy-1")
);
assert!(!next_league
.standings
.iter()
.any(|entry| entry.team_id == "academy-1"));
}

// ---------------------------------------------------------------------------
Expand Down
10 changes: 5 additions & 5 deletions src-tauri/crates/ofm_core/tests/turn_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use domain::player::{
PlayerPromiseKind, Position,
};
use domain::team::Team;
use engine::Side;
use engine::report::{GoalDetail, MatchReport, MatchReportEndReason, PlayerMatchStats, TeamStats};
use engine::Side;
use ofm_core::clock::GameClock;
use ofm_core::game::Game;
use ofm_core::turn;
Expand Down Expand Up @@ -560,7 +560,7 @@ fn apply_match_report_updates_player_stats() {

let scorer = game.players.iter().find(|p| p.id == "t1_fwd0").unwrap();
assert_eq!(scorer.stats.appearances, 1);
assert_eq!(scorer.stats.goals, 2);
assert_eq!(scorer.stats.kills, 2);
assert_eq!(scorer.stats.shots, 3);
assert_eq!(scorer.stats.shots_on_target, 2);
assert_eq!(scorer.stats.passes_completed, 30);
Expand Down Expand Up @@ -1463,9 +1463,9 @@ fn make_round_summary_game() -> Game {
game.players
.iter_mut()
.for_each(|player| match player.id.as_str() {
"t1_fwd0" => player.stats.goals = 5,
"t2_fwd0" => player.stats.goals = 3,
"t3_fwd0" => player.stats.goals = 6,
"t1_fwd0" => player.stats.kills = 5,
"t2_fwd0" => player.stats.kills = 3,
"t3_fwd0" => player.stats.kills = 6,
_ => {}
});

Expand Down
Loading