Seregon/StratoSDK

StratoSDK is a framework with a declarative approach similar to Flutter/React, written and designed entirely for Rust.

Rust/27.3 KB/No license
crates/strato-ui-core/src/app_focus_telemetry_test.rs
StratoSDK / crates / strato-ui-core / src / app_focus_telemetry_test.rs
1use crate::app_focus_telemetry::AppFocusInfo;
2use crate::time::test_offset_time;
3use chrono::Duration;
4 
5#[test]
6fn test_daily_app_focus_duration_increase() {
7 let mut app_focus_info = AppFocusInfo::new();
8 let user_id = Some("user123".to_string());
9 let anonymous_id = "anon-user-xyz".to_string();
10 
11 // When app blurs, the daily focus duration increases if date is the same
12 let focus_duration_0 = app_focus_info.daily_app_focus_duration.duration;
13 let last_synced_date_0 = app_focus_info
14 .daily_app_focus_duration
15 .last_synced_time
16 .date_naive();
17 app_focus_info.record_app_focus(user_id.clone(), anonymous_id.clone());
18 test_offset_time(10);
19 app_focus_info.record_app_blur(user_id.clone(), anonymous_id.clone());
20 let focus_duration_1 = app_focus_info.daily_app_focus_duration.duration;
21 let last_synced_date_1 = app_focus_info
22 .daily_app_focus_duration
23 .last_synced_time
24 .date_naive();
25 assert_eq!(focus_duration_1 - focus_duration_0, Duration::seconds(10));
26 assert_eq!(last_synced_date_1, last_synced_date_0);
27 
28 // If date is the next day, the running total would be counted for the new day
29 app_focus_info.record_app_focus(user_id.clone(), anonymous_id.clone());
30 let one_day_seconds = 24 * 60 * 60;
31 test_offset_time(one_day_seconds);
32 app_focus_info.record_app_blur(user_id, anonymous_id);
33 let focus_duration_2 = app_focus_info.daily_app_focus_duration.duration;
34 let last_synced_date_2 = app_focus_info
35 .daily_app_focus_duration
36 .last_synced_time
37 .date_naive();
38 assert_eq!(focus_duration_2, Duration::seconds(one_day_seconds));
39 assert_eq!(last_synced_date_2 - last_synced_date_1, Duration::days(1));
40}
41