mockforge_data/
provider.rs1use 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
52pub 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 }
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 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}