コード例 #1
0
        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);
            }
        }
コード例 #2
0
        public void GetViewsClonesImage_InvalidRefreshState(RefreshState refreshState)
        {
            //Arrange

            //Act

            //Assert
            Assert.Throws <NotSupportedException>(() => EmptyDataViewService.GetViewsClonesImage(refreshState));
        }
コード例 #3
0
        public void GetRepositoryTitleDescriptionTest_InvalidRefreshState(RefreshState refreshState, bool isRepositoryListEmpty)
        {
            //Arrange

            //Act

            //Assert
            Assert.Throws <NotSupportedException>(() => EmptyDataViewService.GetRepositoryDescriptionText(refreshState, isRepositoryListEmpty));
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        public void GetReferringSitesTitleDescriptionTest_InvalidRefreshState(RefreshState refreshState)
        {
            //Arrange

            //Act

            //Assert
            Assert.Throws <NotSupportedException>(() => EmptyDataViewService.GetReferringSitesDescriptionText(refreshState));
        }
コード例 #6
0
        public void GetStarsImage_InvalidRefreshState(RefreshState refreshState, double totalStars)
        {
            //Arrange

            //Act

            //Assert
            Assert.Throws <NotSupportedException>(() => EmptyDataViewService.GetStarsImage(refreshState, totalStars));
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        public void GetViewsClonesImage_ValidRefreshState(RefreshState refreshState, string expectedResult)
        {
            //Arrange
            string actualResult;

            //Act
            actualResult = EmptyDataViewService.GetViewsClonesImage(refreshState);

            //Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
コード例 #9
0
        public void GetStarsImage_ValidRefreshState(RefreshState refreshState, double totalStars, string expectedResult)
        {
            //Arrange
            string actualResult;

            //Act
            actualResult = EmptyDataViewService.GetStarsImage(refreshState, totalStars);

            //Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
コード例 #10
0
        public void GetRepositoresTitleTextTest_ValidRefreshState(RefreshState refreshState, bool isRepositoryListEmpty, string expectedResult)
        {
            //Arrange
            string actualResult;

            //Act
            actualResult = EmptyDataViewService.GetRepositoryTitleText(refreshState, isRepositoryListEmpty);

            //Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
コード例 #11
0
        public void GetReferringSitesDescriptionText_ValidRefreshState(RefreshState refreshState, string expectedResult)
        {
            //Arrange
            string actualResult;

            //Act
            actualResult = EmptyDataViewService.GetReferringSitesDescriptionText(refreshState);

            //Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
コード例 #12
0
        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);
            }
        }
コード例 #13
0
        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);
            }
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
            }
        }
コード例 #16
0
        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);
            }
        }
コード例 #17
0
        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);
            }
        }