mockforge_data/
provider.rs

1use crate::faker::EnhancedFaker;
2use mockforge_core::templating::{register_faker_provider, FakerProvider};
3use std::sync::Arc;
4
5struct DataFakerProvider(std::sync::Mutex<EnhancedFaker>);
6
7impl DataFakerProvider {
8    fn new() -> Self {
9        Self(std::sync::Mutex::new(EnhancedFaker::new()))
10    }
11}
12
13impl FakerProvider for DataFakerProvider {
14    fn uuid(&self) -> String {
15        self.0.lock().unwrap().uuid()
16    }
17    fn email(&self) -> String {
18        self.0.lock().unwrap().email()
19    }
20    fn name(&self) -> String {
21        self.0.lock().unwrap().name()
22    }
23    fn address(&self) -> String {
24        self.0.lock().unwrap().address()
25    }
26    fn phone(&self) -> String {
27        self.0.lock().unwrap().phone()
28    }
29    fn company(&self) -> String {
30        self.0.lock().unwrap().company()
31    }
32    fn url(&self) -> String {
33        self.0.lock().unwrap().url()
34    }
35    fn ip(&self) -> String {
36        self.0.lock().unwrap().ip_address()
37    }
38    fn color(&self) -> String {
39        self.0.lock().unwrap().color()
40    }
41    fn word(&self) -> String {
42        self.0.lock().unwrap().word()
43    }
44    fn sentence(&self) -> String {
45        self.0.lock().unwrap().sentence()
46    }
47    fn paragraph(&self) -> String {
48        self.0.lock().unwrap().paragraph()
49    }
50}
51
52/// Register the mockforge-data backed faker provider with core templating.
53pub fn register_core_faker_provider() {
54    let provider: Arc<dyn FakerProvider + Send + Sync> = Arc::new(DataFakerProvider::new());
55    register_faker_provider(provider);
56}
57
58#[cfg(test)]
59mod tests {
60    use super::*;
61
62    #[test]
63    fn test_data_faker_provider_new() {
64        let _provider = DataFakerProvider::new();
65        // Should create successfully
66    }
67
68    #[test]
69    fn test_data_faker_provider_uuid() {
70        let provider = DataFakerProvider::new();
71        let uuid = provider.uuid();
72
73        assert_eq!(uuid.len(), 36);
74        assert!(uuid.contains('-'));
75    }
76
77    #[test]
78    fn test_data_faker_provider_email() {
79        let provider = DataFakerProvider::new();
80        let email = provider.email();
81
82        assert!(!email.is_empty());
83        assert!(email.contains('@'));
84    }
85
86    #[test]
87    fn test_data_faker_provider_name() {
88        let provider = DataFakerProvider::new();
89        let name = provider.name();
90
91        assert!(!name.is_empty());
92    }
93
94    #[test]
95    fn test_data_faker_provider_address() {
96        let provider = DataFakerProvider::new();
97        let address = provider.address();
98
99        assert!(!address.is_empty());
100    }
101
102    #[test]
103    fn test_data_faker_provider_phone() {
104        let provider = DataFakerProvider::new();
105        let phone = provider.phone();
106
107        assert!(!phone.is_empty());
108    }
109
110    #[test]
111    fn test_data_faker_provider_company() {
112        let provider = DataFakerProvider::new();
113        let company = provider.company();
114
115        assert!(!company.is_empty());
116    }
117
118    #[test]
119    fn test_data_faker_provider_url() {
120        let provider = DataFakerProvider::new();
121        let url = provider.url();
122
123        assert!(url.starts_with("https://"));
124    }
125
126    #[test]
127    fn test_data_faker_provider_ip() {
128        let provider = DataFakerProvider::new();
129        let ip = provider.ip();
130
131        assert!(!ip.is_empty());
132        assert!(ip.contains('.'));
133    }
134
135    #[test]
136    fn test_data_faker_provider_color() {
137        let provider = DataFakerProvider::new();
138        let color = provider.color();
139
140        let valid_colors = [
141            "red", "blue", "green", "yellow", "purple", "orange", "pink", "brown", "black", "white",
142        ];
143        assert!(valid_colors.contains(&color.as_str()));
144    }
145
146    #[test]
147    fn test_data_faker_provider_word() {
148        let provider = DataFakerProvider::new();
149        let word = provider.word();
150
151        assert!(!word.is_empty());
152    }
153
154    #[test]
155    fn test_data_faker_provider_sentence() {
156        let provider = DataFakerProvider::new();
157        let sentence = provider.sentence();
158
159        assert!(!sentence.is_empty());
160    }
161
162    #[test]
163    fn test_data_faker_provider_paragraph() {
164        let provider = DataFakerProvider::new();
165        let paragraph = provider.paragraph();
166
167        assert!(!paragraph.is_empty());
168    }
169
170    #[test]
171    fn test_register_core_faker_provider() {
172        // Just test that registration doesn't panic
173        register_core_faker_provider();
174    }
175
176    #[test]
177    fn test_provider_trait_usage() {
178        let provider: Arc<dyn FakerProvider + Send + Sync> = Arc::new(DataFakerProvider::new());
179
180        let uuid = provider.uuid();
181        assert_eq!(uuid.len(), 36);
182    }
183}