diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml index 7580c812..65257876 100644 --- a/.github/workflows/backend.yml +++ b/.github/workflows/backend.yml @@ -64,14 +64,14 @@ jobs: - name: Run backend tests working-directory: backend - run: cargo test --workspace --exclude chess + run: cargo test --workspace env: STELLAR_NETWORK: testnet HORIZON_URL: https://horizon-testnet.stellar.org - name: Build backend working-directory: backend - run: cargo build --workspace --release --exclude chess + run: cargo build --workspace --release security-scan: name: Security Scan diff --git a/backend/modules/chess/src/time_control.rs b/backend/modules/chess/src/time_control.rs index 0b5feff4..3e15bd0d 100644 --- a/backend/modules/chess/src/time_control.rs +++ b/backend/modules/chess/src/time_control.rs @@ -46,9 +46,8 @@ impl PlayerClock { pub fn apply_delay(&mut self, delay: Duration) { if let Some(last_move_time) = self.last_move_time { let elapsed = last_move_time.elapsed(); - if elapsed < delay { - self.remaining_time += delay - elapsed; - } + let refund = std::cmp::min(elapsed, delay); + self.remaining_time += refund; } } diff --git a/backend/modules/chess/tests/time_control_tests.rs b/backend/modules/chess/tests/time_control_tests.rs index 5c7fd0d7..3085378b 100644 --- a/backend/modules/chess/tests/time_control_tests.rs +++ b/backend/modules/chess/tests/time_control_tests.rs @@ -20,11 +20,17 @@ mod tests { assert!(clock.get_real_time_remaining() <= Duration::from_secs(299)); + let before_delay = clock.get_real_time_remaining(); clock.apply_delay(time_control.delay); - assert_eq!(clock.get_real_time_remaining(), Duration::from_secs(300)); + let after_delay = clock.get_real_time_remaining(); + assert!(after_delay > before_delay); + assert!(after_delay <= Duration::from_secs(300)); + assert!(after_delay > Duration::from_secs(298)); + let before_inc = clock.get_real_time_remaining(); clock.apply_increment(time_control.increment); - assert_eq!(clock.get_real_time_remaining(), Duration::from_secs(302)); + let after_inc = clock.get_real_time_remaining(); + assert_eq!(after_inc, before_inc + time_control.increment); clock.start(); std::thread::sleep(Duration::from_secs(2));