@@ -171,4 +171,45 @@ internal final class BackerDashboardProjectsViewModelTests: TestCase {
171171 )
172172 }
173173 }
174+
175+ func testRefresh( ) {
176+ let projects = ( 1 ... 3 ) . map { . template |> Project . lens. id .~ $0 }
177+ let env = FetchProjectsEnvelope ( type: . backed, projects: projects, hasNextPage: true , totalCount: 5 )
178+ let user = User . template
179+
180+ withEnvironment ( apiService: MockService ( fetchBackerBackedProjectsResponse: env) , currentUser: user) {
181+ self . vm. inputs. configureWith ( projectsType: . backed, sort: . endingSoon)
182+ self . vm. inputs. viewDidAppear ( false )
183+ self . vm. inputs. currentUserUpdated ( )
184+
185+ self . isRefreshing. assertLastValue ( true )
186+
187+ // Load all projects to end refreshing.
188+ self . scheduler. advance ( )
189+ self . isRefreshing. assertLastValue ( false )
190+
191+ // Test that updating the saved projects count doesn't trigger re-fetching backed projects.
192+ let userSavedCountChanged = user |> \. stats. starredProjectsCount .~ 3
193+ withEnvironment (
194+ apiService: MockService ( fetchBackerBackedProjectsResponse: env) ,
195+ currentUser: userSavedCountChanged
196+ ) {
197+ self . vm. inputs. viewDidAppear ( true )
198+ self . isRefreshing. assertLastValue ( false )
199+ }
200+
201+ // Test that updating the backed projects count triggers re-fetching backed projects.
202+ let userBackedCountChanged = userSavedCountChanged |> \. stats. backedProjectsCount .~ 1
203+ withEnvironment (
204+ apiService: MockService ( fetchBackerBackedProjectsResponse: env) ,
205+ currentUser: userBackedCountChanged
206+ ) {
207+ self . vm. inputs. viewDidAppear ( true )
208+ self . isRefreshing. assertLastValue ( true )
209+
210+ self . scheduler. advance ( )
211+ self . isRefreshing. assertLastValue ( false )
212+ }
213+ }
214+ }
174215}
0 commit comments