Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 0328c97

Browse files
authored
Merge pull request #560 from danwalmsley/clone-dialog-dont-disable-filter-while-loading
Clone dialog - Dont disable filter while loading list of Repositories
2 parents 53995e8 + 15153ab commit 0328c97

File tree

2 files changed

+72
-4
lines changed

2 files changed

+72
-4
lines changed

src/GitHub.App/ViewModels/RepositoryCloneViewModel.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,12 @@ public RepositoryCloneViewModel(
7575
repositories.Filter = FilterRepository;
7676
repositories.NewerComparer = OrderedComparer<IRemoteRepositoryModel>.OrderByDescending(x => x.UpdatedAt).Compare;
7777

78-
filterTextIsEnabled = this.WhenAny(x => x.IsLoading, x => x.Value)
79-
.Select(x => !x && repositories.UnfilteredCount > 0)
78+
filterTextIsEnabled = this.WhenAny(x => x.IsLoading,
79+
loading => loading.Value || repositories.UnfilteredCount > 0 && !LoadingFailed)
8080
.ToProperty(this, x => x.FilterTextIsEnabled);
8181

82-
this.WhenAny(x => x.FilterTextIsEnabled, x => x.IsLoading, x => x.LoadingFailed
83-
, (any, loading, failed) => !any.Value && !loading.Value && !failed.Value)
82+
this.WhenAny(x => x.IsLoading, x => x.LoadingFailed,
83+
(loading, failed) => !loading.Value && !failed.Value && repositories.UnfilteredCount == 0)
8484
.Subscribe(x => NoRepositoriesFound = x);
8585

8686
this.WhenAny(x => x.FilterText, x => x.Value)

src/UnitTests/GitHub.App/ViewModels/RepositoryCloneViewModelTests.cs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,74 @@ public void IsTrueWhenLoadingCompleteNotFailedAndNoRepositories()
209209
}
210210
}
211211

212+
public class TheFilterTextEnabledProperty : TestBaseClass
213+
{
214+
[Fact]
215+
public void IsTrueInitially()
216+
{
217+
var repoSubject = new Subject<IRemoteRepositoryModel>();
218+
var col = TrackingCollection.Create(repoSubject);
219+
var repositoryHost = Substitute.For<IRepositoryHost>();
220+
repositoryHost.ModelService.GetRepositories(Arg.Any<ITrackingCollection<IRemoteRepositoryModel>>()).Returns(_ => col);
221+
var cloneService = Substitute.For<IRepositoryCloneService>();
222+
223+
var vm = GetVM(
224+
repositoryHost,
225+
cloneService,
226+
Substitute.For<IOperatingSystem>(),
227+
Substitute.For<INotificationService>(),
228+
Substitute.For<IUsageTracker>());
229+
230+
Assert.False(vm.LoadingFailed);
231+
Assert.True(vm.FilterTextIsEnabled);
232+
}
233+
234+
[Fact]
235+
public void IsFalseIfLoadingReposFails()
236+
{
237+
var repoSubject = new Subject<IRemoteRepositoryModel>();
238+
var col = TrackingCollection.Create(repoSubject);
239+
var repositoryHost = Substitute.For<IRepositoryHost>();
240+
repositoryHost.ModelService.GetRepositories(Arg.Any<ITrackingCollection<IRemoteRepositoryModel>>()).Returns(_ => col);
241+
var cloneService = Substitute.For<IRepositoryCloneService>();
242+
var vm = GetVM(
243+
repositoryHost,
244+
cloneService,
245+
Substitute.For<IOperatingSystem>(),
246+
Substitute.For<INotificationService>(),
247+
Substitute.For<IUsageTracker>());
248+
249+
Assert.False(vm.LoadingFailed);
250+
251+
repoSubject.OnError(new InvalidOperationException("Doh!"));
252+
253+
Assert.True(vm.LoadingFailed);
254+
Assert.False(vm.FilterTextIsEnabled);
255+
repoSubject.OnCompleted();
256+
}
257+
258+
[Fact]
259+
public void IsFalseWhenLoadingCompleteNotFailedAndNoRepositories()
260+
{
261+
var repoSubject = new Subject<IRemoteRepositoryModel>();
262+
var col = TrackingCollection.Create(repoSubject);
263+
var repositoryHost = Substitute.For<IRepositoryHost>();
264+
repositoryHost.ModelService.GetRepositories(Arg.Any<ITrackingCollection<IRemoteRepositoryModel>>()).Returns(_ => col);
265+
266+
var cloneService = Substitute.For<IRepositoryCloneService>();
267+
var vm = GetVM(
268+
repositoryHost,
269+
cloneService,
270+
Substitute.For<IOperatingSystem>(),
271+
Substitute.For<INotificationService>(),
272+
Substitute.For<IUsageTracker>());
273+
274+
repoSubject.OnCompleted();
275+
276+
Assert.False(vm.FilterTextIsEnabled);
277+
}
278+
}
279+
212280
public class TheLoadingFailedProperty : TestBaseClass
213281
{
214282
[Fact]

0 commit comments

Comments
 (0)