@@ -28,29 +28,61 @@ pub(crate) struct DesktopAppUpdateChannelResult {
2828 pub channel : Option < UpdateChannel > ,
2929}
3030
31- pub ( crate ) fn map_no_update_result ( current_version : String ) -> DesktopAppUpdateCheckResult {
31+ fn map_update_result (
32+ current_version : & str ,
33+ latest_version : & str ,
34+ reason : Option < String > ,
35+ has_update : bool ,
36+ manual_download_required : bool ,
37+ ) -> DesktopAppUpdateCheckResult {
3238 DesktopAppUpdateCheckResult {
3339 ok : true ,
34- reason : None ,
35- current_version : Some ( current_version. clone ( ) ) ,
36- latest_version : Some ( current_version ) ,
37- has_update : false ,
38- manual_download_required : false ,
40+ reason,
41+ current_version : Some ( current_version. to_string ( ) ) ,
42+ latest_version : Some ( latest_version . to_string ( ) ) ,
43+ has_update,
44+ manual_download_required,
3945 }
4046}
4147
48+ pub ( crate ) fn map_no_update_result ( current_version : & str ) -> DesktopAppUpdateCheckResult {
49+ map_update_result ( current_version, current_version, None , false , false )
50+ }
51+
4252pub ( crate ) fn map_update_available_result (
43- current_version : String ,
44- latest_version : String ,
53+ current_version : & str ,
54+ latest_version : & str ,
4555) -> DesktopAppUpdateCheckResult {
46- DesktopAppUpdateCheckResult {
47- ok : true ,
48- reason : None ,
49- current_version : Some ( current_version) ,
50- latest_version : Some ( latest_version) ,
51- has_update : true ,
52- manual_download_required : false ,
53- }
56+ map_update_result ( current_version, latest_version, None , true , false )
57+ }
58+
59+ /// Maps a manual-download install that did find a newer remote release.
60+ pub ( crate ) fn map_manual_download_update_available_result (
61+ current_version : & str ,
62+ latest_version : & str ,
63+ reason : impl Into < String > ,
64+ ) -> DesktopAppUpdateCheckResult {
65+ map_update_result (
66+ current_version,
67+ latest_version,
68+ Some ( reason. into ( ) ) ,
69+ true ,
70+ true ,
71+ )
72+ }
73+
74+ /// Maps a manual-download install that checked successfully but found no newer release.
75+ pub ( crate ) fn map_manual_download_no_update_result (
76+ current_version : & str ,
77+ reason : impl Into < String > ,
78+ ) -> DesktopAppUpdateCheckResult {
79+ map_update_result (
80+ current_version,
81+ current_version,
82+ Some ( reason. into ( ) ) ,
83+ false ,
84+ false ,
85+ )
5486}
5587
5688pub ( crate ) fn map_update_check_error (
@@ -97,29 +129,13 @@ pub(crate) fn map_update_channel_error(reason: impl Into<String>) -> DesktopAppU
97129 }
98130}
99131
100- pub ( crate ) fn map_manual_download_result (
101- current_version : & str ,
102- reason : impl Into < String > ,
103- ) -> DesktopAppUpdateCheckResult {
104- DesktopAppUpdateCheckResult {
105- ok : true ,
106- reason : Some ( reason. into ( ) ) ,
107- current_version : Some ( current_version. to_string ( ) ) ,
108- latest_version : None ,
109- // Manual-download mode should still trigger update UI even though
110- // we cannot determine an exact remote latest version here.
111- has_update : true ,
112- manual_download_required : true ,
113- }
114- }
115-
116132#[ cfg( test) ]
117133mod tests {
118134 use super :: * ;
119135
120136 #[ test]
121137 fn map_no_update_result_keeps_current_version ( ) {
122- let result = map_no_update_result ( "4.19.2" . to_string ( ) ) ;
138+ let result = map_no_update_result ( "4.19.2" ) ;
123139 assert ! ( result. ok) ;
124140 assert_eq ! ( result. current_version. as_deref( ) , Some ( "4.19.2" ) ) ;
125141 assert_eq ! ( result. latest_version. as_deref( ) , Some ( "4.19.2" ) ) ;
@@ -129,14 +145,28 @@ mod tests {
129145
130146 #[ test]
131147 fn map_update_available_result_marks_update_available ( ) {
132- let result = map_update_available_result ( "4.19.2" . to_string ( ) , "4.20.0" . to_string ( ) ) ;
148+ let result = map_update_available_result ( "4.19.2" , "4.20.0" ) ;
133149 assert ! ( result. ok) ;
134150 assert_eq ! ( result. current_version. as_deref( ) , Some ( "4.19.2" ) ) ;
135151 assert_eq ! ( result. latest_version. as_deref( ) , Some ( "4.20.0" ) ) ;
136152 assert ! ( result. has_update) ;
137153 assert ! ( !result. manual_download_required) ;
138154 }
139155
156+ #[ test]
157+ fn map_manual_download_update_available_result_marks_manual_download_upgrade ( ) {
158+ let result = map_manual_download_update_available_result (
159+ "4.19.2" ,
160+ "4.20.0" ,
161+ crate :: bridge:: updater_messages:: DESKTOP_UPDATER_MANUAL_DOWNLOAD_REASON ,
162+ ) ;
163+ assert ! ( result. ok) ;
164+ assert_eq ! ( result. current_version. as_deref( ) , Some ( "4.19.2" ) ) ;
165+ assert_eq ! ( result. latest_version. as_deref( ) , Some ( "4.20.0" ) ) ;
166+ assert ! ( result. has_update) ;
167+ assert ! ( result. manual_download_required) ;
168+ }
169+
140170 #[ test]
141171 fn map_update_check_error_keeps_known_current_version ( ) {
142172 let result = map_update_check_error ( Some ( "4.19.2" . to_string ( ) ) , "network error" ) ;
@@ -163,19 +193,37 @@ mod tests {
163193 }
164194
165195 #[ test]
166- fn map_manual_download_result_keeps_current_version_and_reason ( ) {
167- let result = map_manual_download_result (
196+ fn map_manual_download_no_update_result_keeps_current_version_and_reason ( ) {
197+ let result = map_manual_download_no_update_result (
168198 "4.19.2" ,
169199 crate :: bridge:: updater_messages:: DESKTOP_UPDATER_MANUAL_DOWNLOAD_REASON ,
170200 ) ;
171201 assert ! ( result. ok) ;
172202 assert_eq ! ( result. current_version. as_deref( ) , Some ( "4.19.2" ) ) ;
173- assert_eq ! ( result. latest_version, None ) ;
174- assert ! ( result. has_update) ;
175- assert ! ( result. manual_download_required) ;
203+ assert_eq ! ( result. latest_version. as_deref ( ) , Some ( "4.19.2" ) ) ;
204+ assert ! ( ! result. has_update) ;
205+ assert ! ( ! result. manual_download_required) ;
176206 assert_eq ! (
177207 result. reason. as_deref( ) ,
178208 Some ( crate :: bridge:: updater_messages:: DESKTOP_UPDATER_MANUAL_DOWNLOAD_REASON )
179209 ) ;
180210 }
211+
212+ #[ test]
213+ fn map_manual_download_no_update_result_keeps_manual_download_message_without_update_flag ( ) {
214+ let result = map_manual_download_no_update_result (
215+ "4.19.2" ,
216+ crate :: bridge:: updater_messages:: desktop_manual_download_reason ( ) ,
217+ ) ;
218+
219+ assert ! ( result. ok) ;
220+ assert_eq ! ( result. current_version. as_deref( ) , Some ( "4.19.2" ) ) ;
221+ assert_eq ! ( result. latest_version. as_deref( ) , Some ( "4.19.2" ) ) ;
222+ assert_eq ! (
223+ result. reason. as_deref( ) ,
224+ Some ( crate :: bridge:: updater_messages:: desktop_manual_download_reason( ) . as_str( ) )
225+ ) ;
226+ assert ! ( !result. has_update) ;
227+ assert ! ( !result. manual_download_required) ;
228+ }
181229}
0 commit comments