Check, format and test / build (push) Successful in 46s
- fake_records now generates a full year (2026) of classic workday punches (09:00-13:00, 14:00-18:00) for the employees in fake_users; this spans many 1024-byte blocks, exercising the multi-block streaming path - fake_users/fake_records are now public so tests can assert against them instead of hardcoded expectations - scoped #[allow(clippy::unwrap_used)] to only the functions that actually use unwrap, instead of a blanket file-level allow - added gets_total_record_count, streams_records, and gets_none_for_unknown_employee tests Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
63 lines
1.8 KiB
Rust
63 lines
1.8 KiB
Rust
//! End-to-end tests exercising R701's public API against the emulated
|
|
//! device in `mock`.
|
|
|
|
mod mock;
|
|
|
|
use r701::R701;
|
|
use tokio_stream::StreamExt;
|
|
|
|
#[tokio::test]
|
|
async fn connects_and_pings_successfully() {
|
|
let addr = mock::spawn().await;
|
|
assert!(R701::connect(addr).await.is_ok());
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[allow(clippy::unwrap_used)]
|
|
async fn gets_employee_name() {
|
|
let addr = mock::spawn().await;
|
|
let r701 = R701::connect(addr).await.unwrap();
|
|
let expected_name = mock::fake_users()[&1].clone();
|
|
|
|
match r701.get_name(1).await.unwrap() {
|
|
Some(Ok(name)) => assert_eq!(name, expected_name),
|
|
other => panic!("expected Some(Ok({expected_name:?})), got {other:?}"),
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[allow(clippy::unwrap_used)]
|
|
async fn gets_none_for_unknown_employee() {
|
|
let addr = mock::spawn().await;
|
|
let r701 = R701::connect(addr).await.unwrap();
|
|
|
|
assert_eq!(r701.get_name(999).await.unwrap(), None);
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[allow(clippy::unwrap_used, clippy::cast_possible_truncation)]
|
|
async fn gets_total_record_count() {
|
|
let addr = mock::spawn().await;
|
|
let r701 = R701::connect(addr).await.unwrap();
|
|
let expected_count = mock::fake_records().len() as u16;
|
|
|
|
assert_eq!(r701.get_total_record_count().await.unwrap(), expected_count);
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[allow(clippy::unwrap_used)]
|
|
async fn streams_records() {
|
|
let addr = mock::spawn().await;
|
|
let r701 = R701::connect(addr).await.unwrap();
|
|
// The device streams newest first, the reverse of fake_records' order
|
|
let expected_records: Vec<_> = mock::fake_records().into_iter().rev().collect();
|
|
|
|
let mut records = r701.into_record_iter().await.unwrap();
|
|
for expected in expected_records {
|
|
let record = records.next().await.unwrap().unwrap();
|
|
assert_eq!(record, expected);
|
|
}
|
|
|
|
assert!(records.next().await.is_none());
|
|
}
|