ddd_toolkit_core/mock/
id.rs1use crate::{domain::EntityId, port::id::IdGenerator};
2
3#[derive(Debug, Clone)]
5pub struct FixedIdGenerator<Id>(pub Id);
6
7impl<Id: EntityId> IdGenerator<Id> for FixedIdGenerator<Id> {
8 fn generate(&self) -> Id {
9 self.0.clone()
10 }
11}
12
13#[cfg(test)]
14mod test {
15 use std::fmt::Display;
16
17 use crate::domain::ValueObject;
18
19 use super::*;
20
21 #[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
22 struct FooId(String);
23
24 impl ValueObject for FooId {}
25
26 impl Display for FooId {
27 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
28 write!(f, "{}", self.0)
29 }
30 }
31
32 impl EntityId for FooId {}
33
34 #[test]
35 fn generate_returns_the_fixed_id() {
36 let generator = FixedIdGenerator(FooId("id-1".to_string()));
37
38 assert_eq!(generator.generate(), FooId("id-1".to_string()));
39 }
40
41 #[test]
42 fn generate_returns_equal_id_on_repeated_calls() {
43 let generator = FixedIdGenerator(FooId("id-1".to_string()));
44
45 assert_eq!(generator.generate(), FooId("id-1".to_string()));
46 assert_eq!(generator.generate(), FooId("id-1".to_string()));
47 assert_eq!(generator.generate(), FooId("id-1".to_string()));
48 }
49
50 #[test]
51 fn inner_field_is_publicly_accessible() {
52 let mut generator = FixedIdGenerator(FooId("id-1".to_string()));
53
54 assert_eq!(generator.0, FooId("id-1".to_string()));
55
56 generator.0 = FooId("id-2".to_string());
57
58 assert_eq!(generator.generate(), FooId("id-2".to_string()));
59 }
60
61 #[test]
62 fn clone_produces_generator_returning_equal_id() {
63 let generator = FixedIdGenerator(FooId("id-1".to_string()));
64
65 let cloned = generator.clone();
66
67 assert_eq!(cloned.generate(), generator.generate());
68 }
69
70 #[test]
71 fn debug_format_contains_type_name_and_inner_id() {
72 let generator = FixedIdGenerator(FooId("id-1".to_string()));
73
74 let debug = format!("{generator:?}");
75
76 assert!(debug.contains("FixedIdGenerator"));
77 assert!(debug.contains("id-1"));
78 }
79
80 #[test]
81 fn box_dyn_id_generator_is_usable() {
82 let generator: Box<dyn IdGenerator<FooId>> =
83 Box::new(FixedIdGenerator(FooId("id-1".to_string())));
84
85 assert_eq!(generator.generate(), FooId("id-1".to_string()));
86 }
87
88 #[test]
89 fn generate_returns_id_with_empty_inner_value_as_is() {
90 let generator = FixedIdGenerator(FooId(String::new()));
91
92 assert_eq!(generator.generate(), FooId(String::new()));
93 }
94}