vantage_table/mocks/
mod.rs1pub mod mock_column;
2pub mod mock_table_source;
3pub mod mock_type_system;
4
5pub use mock_column::MockColumn;
6
7#[cfg(test)]
8mod tests {
9 use super::*;
10 use crate::table::Table;
11 use mock_table_source::MockTableSource;
12 use rust_decimal::Decimal;
13 use serde::{Deserialize, Serialize};
14 use vantage_dataset::ReadableValueSet;
15
16 #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
17 pub struct User {
18 pub name: String,
19 pub email: String,
20 pub age: i64,
21 pub balance: Decimal,
22 pub is_active: bool,
23 }
24
25 #[tokio::test]
26 async fn test_mock_table_with_data() {
27 use serde_json::json;
28
29 let test_data = vec![
31 json!({
32 "id": "user1",
33 "name": "John Doe",
34 "email": "john@example.com",
35 "age": 30,
36 "balance": {"decimal": "100.50"},
37 "is_active": true
38 }),
39 json!({
40 "id": "user2",
41 "name": "Jane Smith",
42 "email": "jane@example.com",
43 "age": 25,
44 "balance": {"decimal": "250.75"},
45 "is_active": false
46 }),
47 ];
48
49 use vantage_expressions::mocks::mock_builder;
51 let mock_query_source = mock_builder::new();
52
53 let mock_ds = MockTableSource::new()
54 .with_data("users", test_data)
55 .await
56 .with_query_source(mock_query_source);
57
58 let table: Table<MockTableSource, User> = Table::new("users", mock_ds)
59 .with_column(MockColumn::<String>::new("id"))
60 .with_column(MockColumn::<String>::new("name"))
61 .with_column(MockColumn::<String>::new("email"))
62 .with_column(MockColumn::<i64>::new("age"))
63 .with_column(MockColumn::<Decimal>::new("balance"))
64 .with_column(MockColumn::<bool>::new("is_active"));
65
66 let values = table.list_values().await.unwrap();
68 assert_eq!(values.len(), 2);
69
70 assert!(values.contains_key("user1"));
72 assert!(values.contains_key("user2"));
73
74 let user1_record = &values["user1"];
76 assert_eq!(user1_record["name"], json!("John Doe"));
77 assert_eq!(user1_record["email"], json!("john@example.com"));
78 assert_eq!(user1_record["age"], json!(30));
79 assert_eq!(user1_record["is_active"], json!(true));
80
81 let user2_record = &values["user2"];
82 assert_eq!(user2_record["name"], json!("Jane Smith"));
83 assert_eq!(user2_record["is_active"], json!(false));
84
85 let count = table.get_count().await.unwrap();
87 assert_eq!(count, 2);
88
89 }
94}