@@ -79,80 +79,78 @@ mod shields;
79
79
mod virt;
80
80
81
81
/// A timeline instance used only for testing purposes in unit tests.
82
- struct TestTimeline {
83
- controller : TimelineController < TestRoomDataProvider > ,
84
-
85
- /// An [`EventFactory`] that can be used for creating events in this
86
- /// timeline.
87
- pub factory : EventFactory ,
82
+ #[ derive( Default ) ]
83
+ struct TestTimelineBuilder {
84
+ provider : Option < TestRoomDataProvider > ,
85
+ internal_id_prefix : Option < String > ,
86
+ utd_hook : Option < Arc < UtdHookManager > > ,
87
+ is_room_encrypted : bool ,
88
+ settings : Option < TimelineSettings > ,
88
89
}
89
90
90
- impl TestTimeline {
91
+ impl TestTimelineBuilder {
91
92
fn new ( ) -> Self {
92
- Self :: with_room_data_provider ( TestRoomDataProvider :: default ( ) )
93
+ Self :: default ( )
93
94
}
94
95
95
- /// Returns the associated inner data from that [`TestTimeline`].
96
- fn data ( & self ) -> & TestRoomDataProvider {
97
- & self . controller . room_data_provider
96
+ fn provider ( mut self , provider : TestRoomDataProvider ) -> Self {
97
+ self . provider = Some ( provider ) ;
98
+ self
98
99
}
99
100
100
- fn with_internal_id_prefix ( prefix : String ) -> Self {
101
- Self {
102
- controller : TimelineController :: new (
103
- TestRoomDataProvider :: default ( ) ,
104
- TimelineFocus :: Live ,
105
- Some ( prefix) ,
106
- None ,
107
- false ,
108
- ) ,
109
- factory : EventFactory :: new ( ) ,
110
- }
101
+ fn internal_id_prefix ( mut self , prefix : String ) -> Self {
102
+ self . internal_id_prefix = Some ( prefix) ;
103
+ self
111
104
}
112
105
113
- fn with_room_data_provider ( room_data_provider : TestRoomDataProvider ) -> Self {
114
- Self {
115
- controller : TimelineController :: new (
116
- room_data_provider,
117
- TimelineFocus :: Live ,
118
- None ,
119
- None ,
120
- false ,
121
- ) ,
122
- factory : EventFactory :: new ( ) ,
123
- }
106
+ fn unable_to_decrypt_hook ( mut self , hook : Arc < UtdHookManager > ) -> Self {
107
+ self . utd_hook = Some ( hook) ;
108
+ // It only makes sense to have a UTD hook for an encrypted room.
109
+ self . is_room_encrypted = true ;
110
+ self
124
111
}
125
112
126
- fn with_unable_to_decrypt_hook ( hook : Arc < UtdHookManager > ) -> Self {
127
- Self {
128
- controller : TimelineController :: new (
129
- TestRoomDataProvider :: default ( ) ,
130
- TimelineFocus :: Live ,
131
- None ,
132
- Some ( hook) ,
133
- true ,
134
- ) ,
135
- factory : EventFactory :: new ( ) ,
136
- }
113
+ fn room_encrypted ( mut self , encrypted : bool ) -> Self {
114
+ self . is_room_encrypted = encrypted;
115
+ self
137
116
}
138
117
139
- // TODO: this is wrong, see also #3850.
140
- fn with_is_room_encrypted ( encrypted : bool ) -> Self {
141
- Self {
142
- controller : TimelineController :: new (
143
- TestRoomDataProvider :: default ( ) ,
144
- TimelineFocus :: Live ,
145
- None ,
146
- None ,
147
- encrypted,
148
- ) ,
149
- factory : EventFactory :: new ( ) ,
118
+ fn settings ( mut self , settings : TimelineSettings ) -> Self {
119
+ self . settings = Some ( settings) ;
120
+ self
121
+ }
122
+
123
+ fn build ( self ) -> TestTimeline {
124
+ let mut controller = TimelineController :: new (
125
+ self . provider . unwrap_or_default ( ) ,
126
+ TimelineFocus :: Live ,
127
+ self . internal_id_prefix ,
128
+ self . utd_hook ,
129
+ self . is_room_encrypted ,
130
+ ) ;
131
+ if let Some ( settings) = self . settings {
132
+ controller = controller. with_settings ( settings) ;
150
133
}
134
+ TestTimeline { controller, factory : EventFactory :: new ( ) }
151
135
}
136
+ }
152
137
153
- fn with_settings ( mut self , settings : TimelineSettings ) -> Self {
154
- self . controller = self . controller . with_settings ( settings) ;
155
- self
138
+ struct TestTimeline {
139
+ controller : TimelineController < TestRoomDataProvider > ,
140
+
141
+ /// An [`EventFactory`] that can be used for creating events in this
142
+ /// timeline.
143
+ pub factory : EventFactory ,
144
+ }
145
+
146
+ impl TestTimeline {
147
+ fn new ( ) -> Self {
148
+ TestTimelineBuilder :: new ( ) . build ( )
149
+ }
150
+
151
+ /// Returns the associated inner data from that [`TestTimeline`].
152
+ fn data ( & self ) -> & TestRoomDataProvider {
153
+ & self . controller . room_data_provider
156
154
}
157
155
158
156
async fn subscribe ( & self ) -> impl Stream < Item = VectorDiff < Arc < TimelineItem > > > {
0 commit comments