public async Task PullToRefreshTest_AuthenticatedUser() { //Arrange string emptyDataViewTitle_Initial, emptyDataViewTitle_Final; string emptyDataViewDescription_Initial, emptyDataViewDescription_Final; DateTimeOffset currentTime_Initial, currentTime_Final; bool isEmptyDataViewEnabled_Initial, isEmptyDataViewEnabled_DuringRefresh, isEmptyDataViewEnabled_Final; IReadOnlyList <MobileReferringSiteModel> mobileReferringSites_Initial, mobileReferringSites_DuringRefresh, mobileReferringSites_Final; var mockGitTrendsRepository = new Repository(GitHubConstants.GitTrendsRepoName, "", 0, GitHubConstants.GitTrendsRepoOwner, AuthenticatedGitHubUserAvatarUrl, 0, 0, $"https://github.com/{GitHubConstants.GitTrendsRepoOwner}/{GitHubConstants.GitTrendsRepoName}", false, DateTimeOffset.UtcNow, RepositoryPermission.ADMIN); var gitHubUserService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubUserService>(); var referringSitesViewModel = ServiceCollection.ServiceProvider.GetRequiredService <ReferringSitesViewModel>(); var gitHubGraphQLApiService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubGraphQLApiService>(); //Act await AuthenticateUser(gitHubUserService, gitHubGraphQLApiService).ConfigureAwait(false); currentTime_Initial = DateTimeOffset.UtcNow; emptyDataViewTitle_Initial = referringSitesViewModel.EmptyDataViewTitle; isEmptyDataViewEnabled_Initial = referringSitesViewModel.IsEmptyDataViewEnabled; mobileReferringSites_Initial = referringSitesViewModel.MobileReferringSitesList; emptyDataViewDescription_Initial = referringSitesViewModel.EmptyDataViewDescription; var refreshCommandTask = referringSitesViewModel.RefreshCommand.ExecuteAsync((mockGitTrendsRepository, CancellationToken.None)); isEmptyDataViewEnabled_DuringRefresh = referringSitesViewModel.IsEmptyDataViewEnabled; mobileReferringSites_DuringRefresh = referringSitesViewModel.MobileReferringSitesList; await refreshCommandTask.ConfigureAwait(false); emptyDataViewTitle_Final = referringSitesViewModel.EmptyDataViewTitle; isEmptyDataViewEnabled_Final = referringSitesViewModel.IsEmptyDataViewEnabled; mobileReferringSites_Final = referringSitesViewModel.MobileReferringSitesList; emptyDataViewDescription_Final = referringSitesViewModel.EmptyDataViewDescription; currentTime_Final = DateTimeOffset.UtcNow; //Asset Assert.IsFalse(isEmptyDataViewEnabled_Initial); Assert.IsFalse(isEmptyDataViewEnabled_DuringRefresh); Assert.True(isEmptyDataViewEnabled_Final); Assert.IsEmpty(mobileReferringSites_Initial); Assert.IsEmpty(mobileReferringSites_DuringRefresh); Assert.IsNotEmpty(mobileReferringSites_Final); Assert.AreEqual(EmptyDataViewService.GetReferringSitesTitleText(RefreshState.Succeeded), emptyDataViewTitle_Final); Assert.AreEqual(EmptyDataViewService.GetReferringSitesTitleText(RefreshState.Uninitialized), emptyDataViewTitle_Initial); Assert.AreEqual(EmptyDataViewService.GetReferringSitesDescriptionText(RefreshState.Succeeded), emptyDataViewDescription_Final); Assert.AreEqual(EmptyDataViewService.GetReferringSitesDescriptionText(RefreshState.Uninitialized), emptyDataViewDescription_Initial); foreach (var referringSite in mobileReferringSites_Final) { Assert.Less(currentTime_Initial, referringSite.DownloadedAt); Assert.Greater(currentTime_Final, referringSite.DownloadedAt); } }
public void GetViewsClonesImage_InvalidRefreshState(RefreshState refreshState) { //Arrange //Act //Assert Assert.Throws <NotSupportedException>(() => EmptyDataViewService.GetViewsClonesImage(refreshState)); }
public void GetRepositoryTitleDescriptionTest_InvalidRefreshState(RefreshState refreshState, bool isRepositoryListEmpty) { //Arrange //Act //Assert Assert.Throws <NotSupportedException>(() => EmptyDataViewService.GetRepositoryDescriptionText(refreshState, isRepositoryListEmpty)); }
protected async Task ExecutePullToRefreshCommandTestAbuseLimit() { //Arrange PullToRefreshFailedEventArgs pullToRefreshFailedEventArgs; IReadOnlyList <Repository> visibleRepositoryList_Initial, visibleRepositoryList_Final; int gitHubApiAbuseLimitCount_Initial, gitHubApiAbuseLimitCount_Final; string emptyDataViewTitle_Initial, emptyDataViewTitle_Final; string emptyDataViewDescription_Initial, emptyDataViewDescription_Final; var gitHubUserService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubUserService>(); var repositoryViewModel = ServiceCollection.ServiceProvider.GetRequiredService <RepositoryViewModel>(); var gitHubGraphQLApiService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubGraphQLApiService>(); var pullToRefreshFailedTCS = new TaskCompletionSource <PullToRefreshFailedEventArgs>(); RepositoryViewModel.PullToRefreshFailed += HandlePullToRefreshFailed; //Act await AuthenticateUser(gitHubUserService, gitHubGraphQLApiService).ConfigureAwait(false); gitHubApiAbuseLimitCount_Initial = gitHubUserService.GitHubApiAbuseLimitCount; emptyDataViewTitle_Initial = repositoryViewModel.EmptyDataViewTitle; visibleRepositoryList_Initial = repositoryViewModel.VisibleRepositoryList; emptyDataViewDescription_Initial = repositoryViewModel.EmptyDataViewDescription; await repositoryViewModel.PullToRefreshCommand.ExecuteAsync().ConfigureAwait(false); emptyDataViewTitle_Final = repositoryViewModel.EmptyDataViewTitle; visibleRepositoryList_Final = repositoryViewModel.VisibleRepositoryList; emptyDataViewDescription_Final = repositoryViewModel.EmptyDataViewDescription; pullToRefreshFailedEventArgs = await pullToRefreshFailedTCS.Task.ConfigureAwait(false); gitHubApiAbuseLimitCount_Final = gitHubUserService.GitHubApiAbuseLimitCount; //Assert Assert.IsEmpty(visibleRepositoryList_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryTitleText(RefreshState.Uninitialized, true), emptyDataViewTitle_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryTitleText(RefreshState.AbuseLimit, !visibleRepositoryList_Final.Any()), emptyDataViewTitle_Final); Assert.AreEqual(EmptyDataViewService.GetRepositoryDescriptionText(RefreshState.Uninitialized, true), emptyDataViewDescription_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryDescriptionText(RefreshState.AbuseLimit, !visibleRepositoryList_Final.Any()), emptyDataViewDescription_Final); Assert.IsInstanceOf <AbuseLimitPullToRefreshEventArgs>(pullToRefreshFailedEventArgs); Assert.AreEqual(0, gitHubApiAbuseLimitCount_Initial); Assert.Greater(gitHubApiAbuseLimitCount_Final, 0); void HandlePullToRefreshFailed(object?sender, PullToRefreshFailedEventArgs e) { RepositoryViewModel.PullToRefreshFailed -= HandlePullToRefreshFailed; pullToRefreshFailedTCS.SetResult(e); } }
public void GetReferringSitesTitleDescriptionTest_InvalidRefreshState(RefreshState refreshState) { //Arrange //Act //Assert Assert.Throws <NotSupportedException>(() => EmptyDataViewService.GetReferringSitesDescriptionText(refreshState)); }
public void GetStarsImage_InvalidRefreshState(RefreshState refreshState, double totalStars) { //Arrange //Act //Assert Assert.Throws <NotSupportedException>(() => EmptyDataViewService.GetStarsImage(refreshState, totalStars)); }
public async Task PullToRefreshCommandTest_Authenticated() { //Arrange DateTimeOffset beforePullToRefresh, afterPullToRefresh; IReadOnlyList <Repository> visibleRepositoryList_Initial, visibleRepositoryList_Final; string emptyDataViewTitle_Initial, emptyDataViewTitle_Final; string emptyDataViewDescription_Initial, emptyDataViewDescription_Final; var gitHubUserService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubUserService>(); var repositoryViewModel = ServiceCollection.ServiceProvider.GetRequiredService <RepositoryViewModel>(); var gitHubGraphQLApiService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubGraphQLApiService>(); //Act await AuthenticateUser(gitHubUserService, gitHubGraphQLApiService).ConfigureAwait(false); beforePullToRefresh = DateTimeOffset.UtcNow; emptyDataViewTitle_Initial = repositoryViewModel.EmptyDataViewTitle; visibleRepositoryList_Initial = repositoryViewModel.VisibleRepositoryList; emptyDataViewDescription_Initial = repositoryViewModel.EmptyDataViewDescription; await repositoryViewModel.PullToRefreshCommand.ExecuteAsync().ConfigureAwait(false); afterPullToRefresh = DateTimeOffset.UtcNow; emptyDataViewTitle_Final = repositoryViewModel.EmptyDataViewTitle; visibleRepositoryList_Final = repositoryViewModel.VisibleRepositoryList; emptyDataViewDescription_Final = repositoryViewModel.EmptyDataViewDescription; //Assert Assert.IsEmpty(visibleRepositoryList_Initial); Assert.IsNotEmpty(visibleRepositoryList_Final); Assert.AreEqual(EmptyDataViewService.GetRepositoryTitleText(RefreshState.Uninitialized, true), emptyDataViewTitle_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryTitleText(RefreshState.Succeeded, false), emptyDataViewTitle_Final); Assert.AreEqual(EmptyDataViewService.GetRepositoryDescriptionText(RefreshState.Uninitialized, true), emptyDataViewDescription_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryDescriptionText(RefreshState.Succeeded, false), emptyDataViewDescription_Final); Assert.IsTrue(visibleRepositoryList_Final.Any(x => x.OwnerLogin is GitHubConstants.GitTrendsRepoOwner && x.Name is GitHubConstants.GitTrendsRepoName)); foreach (var repository in visibleRepositoryList_Final) { Assert.IsNotNull(repository.DailyClonesList); Assert.IsNotNull(repository.DailyViewsList); Assert.IsNotNull(repository.StarCount); Assert.IsNotNull(repository.StarredAt); Assert.IsNotNull(repository.TotalClones); Assert.IsNotNull(repository.TotalUniqueClones); Assert.IsNotNull(repository.TotalUniqueViews); Assert.IsNotNull(repository.TotalViews); Assert.Less(beforePullToRefresh, repository.DataDownloadedAt); Assert.Greater(afterPullToRefresh, repository.DataDownloadedAt); } }
public void GetViewsClonesImage_ValidRefreshState(RefreshState refreshState, string expectedResult) { //Arrange string actualResult; //Act actualResult = EmptyDataViewService.GetViewsClonesImage(refreshState); //Assert Assert.AreEqual(expectedResult, actualResult); }
public void GetStarsImage_ValidRefreshState(RefreshState refreshState, double totalStars, string expectedResult) { //Arrange string actualResult; //Act actualResult = EmptyDataViewService.GetStarsImage(refreshState, totalStars); //Assert Assert.AreEqual(expectedResult, actualResult); }
public void GetRepositoresTitleTextTest_ValidRefreshState(RefreshState refreshState, bool isRepositoryListEmpty, string expectedResult) { //Arrange string actualResult; //Act actualResult = EmptyDataViewService.GetRepositoryTitleText(refreshState, isRepositoryListEmpty); //Assert Assert.AreEqual(expectedResult, actualResult); }
public void GetReferringSitesDescriptionText_ValidRefreshState(RefreshState refreshState, string expectedResult) { //Arrange string actualResult; //Act actualResult = EmptyDataViewService.GetReferringSitesDescriptionText(refreshState); //Assert Assert.AreEqual(expectedResult, actualResult); }
public async Task PullToRefreshCommandTest_Unauthenticated() { //Arrange IReadOnlyList <Repository> visibleRepositoryList_Initial, visibleRepositoryList_Final; string emptyDataViewTitle_Initial, emptyDataViewTitle_Final; string emptyDataViewDescription_Initial, emptyDataViewDescription_Final; var repositoryViewModel = ServiceCollection.ServiceProvider.GetRequiredService <RepositoryViewModel>(); bool didPullToRefreshFailedFire = false; var pullToRefreshFailedTCS = new TaskCompletionSource <PullToRefreshFailedEventArgs>(); RepositoryViewModel.PullToRefreshFailed += HandlePullToRefreshFailed; //Act emptyDataViewTitle_Initial = repositoryViewModel.EmptyDataViewTitle; visibleRepositoryList_Initial = repositoryViewModel.VisibleRepositoryList; emptyDataViewDescription_Initial = repositoryViewModel.EmptyDataViewDescription; var pullToRefreshCommandTask = repositoryViewModel.PullToRefreshCommand.ExecuteAsync(); await pullToRefreshCommandTask.ConfigureAwait(false); var pullToRefreshFailedEventArgs = await pullToRefreshFailedTCS.Task.ConfigureAwait(false); emptyDataViewTitle_Final = repositoryViewModel.EmptyDataViewTitle; visibleRepositoryList_Final = repositoryViewModel.VisibleRepositoryList; emptyDataViewDescription_Final = repositoryViewModel.EmptyDataViewDescription; //Assert Assert.IsTrue(didPullToRefreshFailedFire); Assert.IsInstanceOf(typeof(LoginExpiredPullToRefreshEventArgs), pullToRefreshFailedEventArgs); Assert.IsEmpty(visibleRepositoryList_Initial); Assert.IsEmpty(visibleRepositoryList_Final); Assert.AreEqual(EmptyDataViewService.GetRepositoryTitleText(RefreshState.Uninitialized, true), emptyDataViewTitle_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryTitleText(RefreshState.LoginExpired, true), emptyDataViewTitle_Final); Assert.AreEqual(EmptyDataViewService.GetRepositoryDescriptionText(RefreshState.Uninitialized, true), emptyDataViewDescription_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryDescriptionText(RefreshState.LoginExpired, true), emptyDataViewDescription_Final); void HandlePullToRefreshFailed(object?sender, PullToRefreshFailedEventArgs e) { RepositoryViewModel.PullToRefreshFailed -= HandlePullToRefreshFailed; didPullToRefreshFailedFire = true; pullToRefreshFailedTCS.SetResult(e); } }
public async Task PullToRefreshCommandTest_MaximumApiLimit() { //Arrange PullToRefreshFailedEventArgs pullToRefreshFailedEventArgs; IReadOnlyList <Repository> visibleRepositoryList_Initial, visibleRepositoryList_Final; string emptyDataViewTitle_Initial, emptyDataViewTitle_Final; string emptyDataViewDescription_Initial, emptyDataViewDescription_Final; var gitHubUserService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubUserService>(); var repositoryViewModel = ServiceCollection.ServiceProvider.GetRequiredService <RepositoryViewModel>(); var gitHubGraphQLApiService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubGraphQLApiService>(); var pullToRefreshFailedTCS = new TaskCompletionSource <PullToRefreshFailedEventArgs>(); RepositoryViewModel.PullToRefreshFailed += HandlePullToRefreshFailed; //Act await AuthenticateUser(gitHubUserService, gitHubGraphQLApiService).ConfigureAwait(false); emptyDataViewTitle_Initial = repositoryViewModel.EmptyDataViewTitle; visibleRepositoryList_Initial = repositoryViewModel.VisibleRepositoryList; emptyDataViewDescription_Initial = repositoryViewModel.EmptyDataViewDescription; await repositoryViewModel.PullToRefreshCommand.ExecuteAsync().ConfigureAwait(false); emptyDataViewTitle_Final = repositoryViewModel.EmptyDataViewTitle; visibleRepositoryList_Final = repositoryViewModel.VisibleRepositoryList; emptyDataViewDescription_Final = repositoryViewModel.EmptyDataViewDescription; pullToRefreshFailedEventArgs = await pullToRefreshFailedTCS.Task.ConfigureAwait(false); //Assert Assert.IsEmpty(visibleRepositoryList_Initial); Assert.IsEmpty(visibleRepositoryList_Final); Assert.AreEqual(EmptyDataViewService.GetRepositoryTitleText(RefreshState.Uninitialized, true), emptyDataViewTitle_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryTitleText(RefreshState.MaximumApiLimit, true), emptyDataViewTitle_Final); Assert.AreEqual(EmptyDataViewService.GetRepositoryDescriptionText(RefreshState.Uninitialized, true), emptyDataViewDescription_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryDescriptionText(RefreshState.MaximumApiLimit, true), emptyDataViewDescription_Final); Assert.IsTrue(pullToRefreshFailedEventArgs is MaximimApiRequestsReachedEventArgs); void HandlePullToRefreshFailed(object?sender, PullToRefreshFailedEventArgs e) { ReferringSitesViewModel.PullToRefreshFailed -= HandlePullToRefreshFailed; pullToRefreshFailedTCS.SetResult(e); } }
public async Task FetchDataCommandTest_AuthenticatedUser(bool shouldIncludeViewsClonesData) { //Arrange Repository repository; double dailyViewsClonesMinValue_Initial, dailyViewsClonesMinValue_Final; double dailyViewsClonesMaxValue_Initial, dailyViewsClonesMaxValue_Final; double minDailyStarsValue_Initial, minDailyStarsValue_Final; double maxDailyStarsValue_Initial, maxDailyStarsValue_Final; string viewsClonesEmptyDataViewTitleText_Initial, viewsClonesEmptyDataViewTitleText_Final; string starsEmptyDataViewTitleText_Initial, starsEmptyDataViewTitleText_Final; bool isViewsClonesChartVisible_Initial, isViewsClonesChartVisible_DuringFetchDataCommand, isViewsClonesChartVisible_Final; bool isStarsChartVisible_Initial, isStarsChartVisible_DuringFetchDataCommand, isStarsChartVisible_Final; bool isFetchingData_Initial, isFetchingData_DuringFetchDataCommand, isFetchingData_Final; bool isViewsClonesEmptyDataViewVisible_Initial, isViewsClonesEmptyDataViewVisible_DuringFetchDataCommand, isViewsClonesEmptyDataViewVisible_Final; bool isStarsEmptyDataViewVisible_Initial, isStarsEmptyDataViewVisible_DuringFetchDataCommand, isStarsEmptyDataViewVisible_Final; DateTime minViewsClonesDate_Initial, minViewsClonesDate_Final; DateTime maxViewsClonesDate_Initial, maxViewsClonesDate_Final; DateTime minDailyStarsDate_Initial, minDailyStarsDate_Final; DateTime maxDailyStarsDate_Initial, maxDailyStarsDate_Final; IReadOnlyList <DailyStarsModel> dailyStarsList_Initial, dailyStarsList_Final; IReadOnlyList <DailyViewsModel> dailyViewsList_Initial, dailyViewsList_Final; IReadOnlyList <DailyClonesModel> dailyClonesList_Initial, dailyClonesList_Final; var trendsViewModel = ServiceCollection.ServiceProvider.GetRequiredService <TrendsViewModel>(); var gitHubUserService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubUserService>(); var gitHubGraphQLApiService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubGraphQLApiService>(); var gitHubApiRepositoriesService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubApiRepositoriesService>(); await AuthenticateUser(gitHubUserService, gitHubGraphQLApiService).ConfigureAwait(false); repository = await gitHubGraphQLApiService.GetRepository(GitHubConstants.GitTrendsRepoOwner, GitHubConstants.GitTrendsRepoName, CancellationToken.None); if (shouldIncludeViewsClonesData) { await foreach (var completedReposiory in gitHubApiRepositoriesService.UpdateRepositoriesWithViewsClonesAndStarsData(new[] { repository }, CancellationToken.None).ConfigureAwait(false)) { repository = completedReposiory; } } //Act isFetchingData_Initial = trendsViewModel.IsFetchingData; dailyStarsList_Initial = trendsViewModel.DailyStarsList; dailyViewsList_Initial = trendsViewModel.DailyViewsList; dailyClonesList_Initial = trendsViewModel.DailyClonesList; maxDailyStarsDate_Initial = trendsViewModel.MaxDailyStarsDate; minDailyStarsDate_Initial = trendsViewModel.MinDailyStarsDate; minDailyStarsValue_Initial = trendsViewModel.MinDailyStarsValue; maxDailyStarsValue_Initial = trendsViewModel.MaxDailyStarsValue; minViewsClonesDate_Initial = trendsViewModel.MinViewsClonesDate; maxViewsClonesDate_Initial = trendsViewModel.MaxViewsClonesDate; isStarsChartVisible_Initial = trendsViewModel.IsStarsChartVisible; dailyViewsClonesMinValue_Initial = trendsViewModel.DailyViewsClonesMinValue; dailyViewsClonesMaxValue_Initial = trendsViewModel.DailyViewsClonesMaxValue; isViewsClonesChartVisible_Initial = trendsViewModel.IsViewsClonesChartVisible; starsEmptyDataViewTitleText_Initial = trendsViewModel.StarsEmptyDataViewTitleText; isStarsEmptyDataViewVisible_Initial = trendsViewModel.IsStarsEmptyDataViewVisible; viewsClonesEmptyDataViewTitleText_Initial = trendsViewModel.ViewsClonesEmptyDataViewTitleText; isViewsClonesEmptyDataViewVisible_Initial = trendsViewModel.IsViewsClonesEmptyDataViewVisible; var fetchDataCommandTask = trendsViewModel.FetchDataCommand.ExecuteAsync((repository, CancellationToken.None)); isFetchingData_DuringFetchDataCommand = trendsViewModel.IsFetchingData; isStarsChartVisible_DuringFetchDataCommand = trendsViewModel.IsStarsChartVisible; isViewsClonesChartVisible_DuringFetchDataCommand = trendsViewModel.IsViewsClonesChartVisible; isStarsEmptyDataViewVisible_DuringFetchDataCommand = trendsViewModel.IsStarsEmptyDataViewVisible; isViewsClonesEmptyDataViewVisible_DuringFetchDataCommand = trendsViewModel.IsViewsClonesEmptyDataViewVisible; await fetchDataCommandTask.ConfigureAwait(false); isFetchingData_Final = trendsViewModel.IsFetchingData; dailyStarsList_Final = trendsViewModel.DailyStarsList; dailyViewsList_Final = trendsViewModel.DailyViewsList; dailyClonesList_Final = trendsViewModel.DailyClonesList; maxDailyStarsDate_Final = trendsViewModel.MaxDailyStarsDate; minDailyStarsDate_Final = trendsViewModel.MinDailyStarsDate; minDailyStarsValue_Final = trendsViewModel.MinDailyStarsValue; maxDailyStarsValue_Final = trendsViewModel.MaxDailyStarsValue; isStarsChartVisible_Final = trendsViewModel.IsStarsChartVisible; minViewsClonesDate_Final = trendsViewModel.MinViewsClonesDate; maxViewsClonesDate_Final = trendsViewModel.MaxViewsClonesDate; dailyViewsClonesMinValue_Final = trendsViewModel.DailyViewsClonesMinValue; dailyViewsClonesMaxValue_Final = trendsViewModel.DailyViewsClonesMaxValue; isViewsClonesChartVisible_Final = trendsViewModel.IsViewsClonesChartVisible; starsEmptyDataViewTitleText_Final = trendsViewModel.StarsEmptyDataViewTitleText; isStarsEmptyDataViewVisible_Final = trendsViewModel.IsStarsEmptyDataViewVisible; viewsClonesEmptyDataViewTitleText_Final = trendsViewModel.ViewsClonesEmptyDataViewTitleText; isViewsClonesEmptyDataViewVisible_Final = trendsViewModel.IsViewsClonesEmptyDataViewVisible; //Assert Assert.IsEmpty(dailyViewsList_Initial); Assert.IsEmpty(dailyClonesList_Initial); Assert.IsEmpty(dailyStarsList_Initial); Assert.IsNotEmpty(dailyViewsList_Final); Assert.IsNotEmpty(dailyClonesList_Final); Assert.IsNotEmpty(dailyStarsList_Final); Assert.IsTrue(isFetchingData_Initial); Assert.IsTrue(isFetchingData_DuringFetchDataCommand); Assert.IsFalse(isFetchingData_Final); Assert.IsFalse(isViewsClonesEmptyDataViewVisible_Initial); Assert.IsFalse(isViewsClonesEmptyDataViewVisible_DuringFetchDataCommand); Assert.IsFalse(isViewsClonesEmptyDataViewVisible_Final); Assert.IsFalse(isStarsEmptyDataViewVisible_Initial); Assert.IsFalse(isStarsEmptyDataViewVisible_DuringFetchDataCommand); Assert.IsFalse(isStarsEmptyDataViewVisible_Final); Assert.IsFalse(isViewsClonesChartVisible_Initial); Assert.IsFalse(isViewsClonesChartVisible_DuringFetchDataCommand); Assert.True(isViewsClonesChartVisible_Final); Assert.IsFalse(isStarsChartVisible_Initial); Assert.IsFalse(isStarsChartVisible_DuringFetchDataCommand); Assert.True(isStarsChartVisible_Final); Assert.AreEqual(TrendsViewModel.MinimumChartHeight, dailyViewsClonesMaxValue_Initial); Assert.GreaterOrEqual(dailyViewsClonesMaxValue_Final, dailyViewsClonesMaxValue_Initial); Assert.AreEqual(TrendsViewModel.MinimumChartHeight, maxDailyStarsValue_Initial); Assert.GreaterOrEqual(maxDailyStarsValue_Final, maxDailyStarsValue_Initial); Assert.AreEqual(0, dailyViewsClonesMinValue_Initial); Assert.AreEqual(dailyViewsClonesMinValue_Final, dailyViewsClonesMinValue_Initial); Assert.AreEqual(0, minDailyStarsValue_Initial); Assert.AreEqual(minDailyStarsValue_Final, minDailyStarsValue_Initial); Assert.AreEqual(DateTimeOffset.UtcNow.Subtract(TimeSpan.FromDays(13)).Date, minViewsClonesDate_Initial.Date); Assert.LessOrEqual(minViewsClonesDate_Final.Date, minViewsClonesDate_Initial.Date); Assert.AreEqual(DateTimeOffset.UtcNow.Date, maxViewsClonesDate_Initial.Date); Assert.LessOrEqual(maxViewsClonesDate_Final.Date, maxViewsClonesDate_Initial.Date); Assert.LessOrEqual(minDailyStarsDate_Final.Date, minDailyStarsDate_Initial.Date); Assert.LessOrEqual(maxDailyStarsDate_Final.Date, maxDailyStarsDate_Initial.Date); Assert.AreEqual(EmptyDataViewService.GetViewsClonesTitleText(RefreshState.Uninitialized), viewsClonesEmptyDataViewTitleText_Initial); Assert.AreEqual(EmptyDataViewService.GetViewsClonesTitleText(RefreshState.Succeeded), viewsClonesEmptyDataViewTitleText_Final); Assert.AreEqual(EmptyDataViewService.GetStarsTitleText(RefreshState.Uninitialized, trendsViewModel.TotalStars), starsEmptyDataViewTitleText_Initial); Assert.AreEqual(EmptyDataViewService.GetStarsTitleText(RefreshState.Succeeded, trendsViewModel.TotalStars), starsEmptyDataViewTitleText_Final); }
public async Task PullToRefreshCommandTest_ServerError() { //Arrange PullToRefreshFailedEventArgs pullToRefreshFailedEventArgs; IReadOnlyList <Repository> visibleRepositoryList_Initial, visibleRepositoryList_Final; IReadOnlyList <Repository> generatedRepositories = new[] { CreateRepository(), CreateRepository(), CreateRepository(), CreateRepository(), CreateRepository(), }; string emptyDataViewTitle_Initial, emptyDataViewTitle_Final; string emptyDataViewDescription_Initial, emptyDataViewDescription_Final; var gitHubUserService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubUserService>(); var repositoryDatabase = ServiceCollection.ServiceProvider.GetRequiredService <RepositoryDatabase>(); var repositoryViewModel = ServiceCollection.ServiceProvider.GetRequiredService <RepositoryViewModel>(); var gitHubGraphQLApiService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubGraphQLApiService>(); var pullToRefreshFailedTCS = new TaskCompletionSource <PullToRefreshFailedEventArgs>(); RepositoryViewModel.PullToRefreshFailed += HandlePullToRefreshFailed; foreach (var repository in generatedRepositories) { await repositoryDatabase.SaveRepository(repository).ConfigureAwait(false); } generatedRepositories = await repositoryDatabase.GetRepositories().ConfigureAwait(false); //Act await AuthenticateUser(gitHubUserService, gitHubGraphQLApiService).ConfigureAwait(false); emptyDataViewTitle_Initial = repositoryViewModel.EmptyDataViewTitle; visibleRepositoryList_Initial = repositoryViewModel.VisibleRepositoryList; emptyDataViewDescription_Initial = repositoryViewModel.EmptyDataViewDescription; await repositoryViewModel.PullToRefreshCommand.ExecuteAsync().ConfigureAwait(false); emptyDataViewTitle_Final = repositoryViewModel.EmptyDataViewTitle; visibleRepositoryList_Final = repositoryViewModel.VisibleRepositoryList; emptyDataViewDescription_Final = repositoryViewModel.EmptyDataViewDescription; pullToRefreshFailedEventArgs = await pullToRefreshFailedTCS.Task.ConfigureAwait(false); //Assert Assert.IsEmpty(visibleRepositoryList_Initial); Assert.IsNotEmpty(visibleRepositoryList_Final); Assert.AreEqual(EmptyDataViewService.GetRepositoryTitleText(RefreshState.Uninitialized, true), emptyDataViewTitle_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryTitleText(RefreshState.Error, false), emptyDataViewTitle_Final); Assert.AreEqual(EmptyDataViewService.GetRepositoryDescriptionText(RefreshState.Uninitialized, true), emptyDataViewDescription_Initial); Assert.AreEqual(EmptyDataViewService.GetRepositoryDescriptionText(RefreshState.Error, false), emptyDataViewDescription_Final); Assert.IsTrue(pullToRefreshFailedEventArgs is ErrorPullToRefreshEventArgs); foreach (var visibleRepository in visibleRepositoryList_Final) { //Ensure visibleRepositoryList_Final matches the generatedRepositories var matchingRepository = generatedRepositories.Single(x => x.Url == visibleRepository.Url); Assert.AreEqual(visibleRepository.DailyClonesList?.Count, matchingRepository.DailyClonesList?.Count); Assert.AreEqual(visibleRepository.DailyViewsList?.Count, matchingRepository.DailyViewsList?.Count); Assert.AreEqual(visibleRepository.DataDownloadedAt, matchingRepository.DataDownloadedAt); Assert.AreEqual(visibleRepository.Description, matchingRepository.Description); Assert.AreEqual(visibleRepository.ForkCount, matchingRepository.ForkCount); Assert.AreEqual(visibleRepository.IsFavorite, matchingRepository.IsFavorite); Assert.AreEqual(visibleRepository.IsFork, matchingRepository.IsFork); Assert.AreEqual(visibleRepository.IssuesCount, matchingRepository.IssuesCount); Assert.AreEqual(visibleRepository.IsTrending, matchingRepository.IsTrending); Assert.AreEqual(visibleRepository.Name, matchingRepository.Name); Assert.AreEqual(visibleRepository.OwnerAvatarUrl, matchingRepository.OwnerAvatarUrl); Assert.AreEqual(visibleRepository.OwnerLogin, matchingRepository.OwnerLogin); Assert.AreEqual(visibleRepository.StarCount, matchingRepository.StarCount); Assert.AreEqual(visibleRepository.StarredAt?.Count, matchingRepository.StarredAt?.Count); Assert.AreEqual(visibleRepository.TotalClones, matchingRepository.TotalClones); Assert.AreEqual(visibleRepository.TotalUniqueClones, matchingRepository.TotalUniqueClones); Assert.AreEqual(visibleRepository.TotalUniqueViews, matchingRepository.TotalUniqueViews); Assert.AreEqual(visibleRepository.TotalViews, matchingRepository.TotalViews); Assert.AreEqual(visibleRepository.Url, matchingRepository.Url); } void HandlePullToRefreshFailed(object?sender, PullToRefreshFailedEventArgs e) { ReferringSitesViewModel.PullToRefreshFailed -= HandlePullToRefreshFailed; pullToRefreshFailedTCS.SetResult(e); } }
public async Task PullToRefreshTest_UnauthenticatedUser() { //Arrange string emptyDataViewTitle_Initial, emptyDataViewTitle_Final; string emptyDataViewDescription_Initial, emptyDataViewDescription_Final; bool isEmptyDataViewEnabled_Initial, isEmptyDataViewEnabled_DuringRefresh, isEmptyDataViewEnabled_Final; IReadOnlyList <MobileReferringSiteModel> mobileReferringSites_Initial, mobileReferringSites_DuringRefresh, mobileReferringSites_Final; bool didPullToRefreshFailedFire = false; var pullToRefreshFailedTCS = new TaskCompletionSource <PullToRefreshFailedEventArgs>(); ReferringSitesViewModel.PullToRefreshFailed += HandlePullToRefreshFailed; var referringSitesViewModel = ServiceCollection.ServiceProvider.GetRequiredService <ReferringSitesViewModel>(); //Act emptyDataViewTitle_Initial = referringSitesViewModel.EmptyDataViewTitle; mobileReferringSites_Initial = referringSitesViewModel.MobileReferringSitesList; isEmptyDataViewEnabled_Initial = referringSitesViewModel.IsEmptyDataViewEnabled; emptyDataViewDescription_Initial = referringSitesViewModel.EmptyDataViewDescription; var refreshCommandTask = referringSitesViewModel.RefreshCommand.ExecuteAsync((GitTrendsRepoOwner, GitTrendsRepoName, $"https://github.com/{GitTrendsRepoOwner}/{GitTrendsRepoName}", CancellationToken.None)); isEmptyDataViewEnabled_DuringRefresh = referringSitesViewModel.IsEmptyDataViewEnabled; mobileReferringSites_DuringRefresh = referringSitesViewModel.MobileReferringSitesList; await refreshCommandTask.ConfigureAwait(false); var pullToRefreshFailedEventArgs = await pullToRefreshFailedTCS.Task.ConfigureAwait(false); emptyDataViewTitle_Final = referringSitesViewModel.EmptyDataViewTitle; mobileReferringSites_Final = referringSitesViewModel.MobileReferringSitesList; isEmptyDataViewEnabled_Final = referringSitesViewModel.IsEmptyDataViewEnabled; emptyDataViewDescription_Final = referringSitesViewModel.EmptyDataViewDescription; //Assert Assert.IsTrue(didPullToRefreshFailedFire); Assert.IsTrue(pullToRefreshFailedEventArgs is MaximimApiRequestsReachedEventArgs || pullToRefreshFailedEventArgs is ErrorPullToRefreshEventArgs); Assert.IsFalse(isEmptyDataViewEnabled_Initial); Assert.IsFalse(isEmptyDataViewEnabled_DuringRefresh); Assert.IsTrue(isEmptyDataViewEnabled_Final); Assert.AreEqual(EmptyDataViewService.GetReferringSitesTitleText(RefreshState.Uninitialized), emptyDataViewTitle_Initial); Assert.AreEqual(EmptyDataViewService.GetReferringSitesTitleText(RefreshState.Error), emptyDataViewTitle_Final); Assert.AreEqual(EmptyDataViewService.GetReferringSitesDescriptionText(RefreshState.Uninitialized), emptyDataViewDescription_Initial); Assert.AreEqual(EmptyDataViewService.GetReferringSitesDescriptionText(RefreshState.Error), emptyDataViewDescription_Final); Assert.IsEmpty(mobileReferringSites_Initial); Assert.IsEmpty(mobileReferringSites_DuringRefresh); Assert.IsEmpty(mobileReferringSites_Final); void HandlePullToRefreshFailed(object?sender, PullToRefreshFailedEventArgs e) { ReferringSitesViewModel.PullToRefreshFailed -= HandlePullToRefreshFailed; didPullToRefreshFailedFire = true; pullToRefreshFailedTCS.SetResult(e); } }
public async Task PullToRefreshTest_ServerError() { //Arrange PullToRefreshFailedEventArgs pullToRefreshFailedEventArgs; string emptyDataViewTitle_Initial, emptyDataViewTitle_Final; string emptyDataViewDescription_Initial, emptyDataViewDescription_Final; bool isEmptyDataViewEnabled_Initial, isEmptyDataViewEnabled_DuringRefresh, isEmptyDataViewEnabled_Final; IReadOnlyList <MobileReferringSiteModel> mobileReferringSites_Initial, mobileReferringSites_DuringRefresh, mobileReferringSites_Final; var mockGitTrendsRepository = new Repository(GitHubConstants.GitTrendsRepoName, "", 0, GitHubConstants.GitTrendsRepoOwner, AuthenticatedGitHubUserAvatarUrl, 0, 0, $"https://github.com/{GitHubConstants.GitTrendsRepoOwner}/{GitHubConstants.GitTrendsRepoName}", false, DateTimeOffset.UtcNow, RepositoryPermission.ADMIN); var gitHubUserService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubUserService>(); var referringSitesViewModel = ServiceCollection.ServiceProvider.GetRequiredService <ReferringSitesViewModel>(); var gitHubGraphQLApiService = ServiceCollection.ServiceProvider.GetRequiredService <GitHubGraphQLApiService>(); var pullToRefreshFailedTCS = new TaskCompletionSource <PullToRefreshFailedEventArgs>(); ReferringSitesViewModel.PullToRefreshFailed += HandlePullToRefreshFailed; //Act await AuthenticateUser(gitHubUserService, gitHubGraphQLApiService).ConfigureAwait(false); emptyDataViewTitle_Initial = referringSitesViewModel.EmptyDataViewTitle; isEmptyDataViewEnabled_Initial = referringSitesViewModel.IsEmptyDataViewEnabled; mobileReferringSites_Initial = referringSitesViewModel.MobileReferringSitesList; emptyDataViewDescription_Initial = referringSitesViewModel.EmptyDataViewDescription; var refreshCommandTask = referringSitesViewModel.RefreshCommand.ExecuteAsync((mockGitTrendsRepository, CancellationToken.None)); isEmptyDataViewEnabled_DuringRefresh = referringSitesViewModel.IsEmptyDataViewEnabled; mobileReferringSites_DuringRefresh = referringSitesViewModel.MobileReferringSitesList; await refreshCommandTask.ConfigureAwait(false); emptyDataViewTitle_Final = referringSitesViewModel.EmptyDataViewTitle; isEmptyDataViewEnabled_Final = referringSitesViewModel.IsEmptyDataViewEnabled; mobileReferringSites_Final = referringSitesViewModel.MobileReferringSitesList; emptyDataViewDescription_Final = referringSitesViewModel.EmptyDataViewDescription; pullToRefreshFailedEventArgs = await pullToRefreshFailedTCS.Task.ConfigureAwait(false); //Asset Assert.IsFalse(isEmptyDataViewEnabled_Initial); Assert.IsFalse(isEmptyDataViewEnabled_DuringRefresh); Assert.True(isEmptyDataViewEnabled_Final); Assert.IsEmpty(mobileReferringSites_Initial); Assert.IsEmpty(mobileReferringSites_DuringRefresh); Assert.IsEmpty(mobileReferringSites_Final); Assert.AreEqual(EmptyDataViewService.GetReferringSitesTitleText(RefreshState.Error), emptyDataViewTitle_Final); Assert.AreEqual(EmptyDataViewService.GetReferringSitesTitleText(RefreshState.Uninitialized), emptyDataViewTitle_Initial); Assert.AreEqual(EmptyDataViewService.GetReferringSitesDescriptionText(RefreshState.Error), emptyDataViewDescription_Final); Assert.AreEqual(EmptyDataViewService.GetReferringSitesDescriptionText(RefreshState.Uninitialized), emptyDataViewDescription_Initial); Assert.IsInstanceOf <ErrorPullToRefreshEventArgs>(pullToRefreshFailedEventArgs); void HandlePullToRefreshFailed(object?sender, PullToRefreshFailedEventArgs e) { ReferringSitesViewModel.PullToRefreshFailed -= HandlePullToRefreshFailed; pullToRefreshFailedTCS.SetResult(e); } }