public void ViewTeamScheduleCommand_ExceptionCaught_ShowsExceptionMessage()
        {
            // Arrange
            // Instantiate class under test.
            var teamName = "Team";

            WpfGlobals.SelectedSeason = 2017;

            var viewModel = new TeamSeasonsControlViewModel(_sharedService, _controlService)
            {
                // Set up needed infrastructure of class under test.
                SelectedTeam = new TeamSeason
                {
                    TeamName = teamName,
                    SeasonID = (int)WpfGlobals.SelectedSeason
                }
            };

            // Set up needed infrastructure of class under test.
            var ex = new Exception();

            A.CallTo(() => _controlService.GetTeamSeasonScheduleProfile(A <string> .Ignored, A <int> .Ignored)).Throws(ex);
            A.CallTo(() => _sharedService.ShowExceptionMessage(ex, "Exception")).DoesNothing();

            // Act
            viewModel.ViewTeamScheduleCommand.Execute(null);

            // Assert
            A.CallTo(() => _sharedService.ShowExceptionMessage(ex, "Exception")).MustHaveHappenedOnceExactly();
        }
        public void ViewTeamScheduleCommand_WhenSelectedTeamIsNull_ShouldNotLoadTeamSeasonScheduleProfileTotalsAndAverages()
        {
            // Arrange
            var teamSeasonRepository         = A.Fake <ITeamSeasonRepository>();
            var teamSeasonScheduleRepository = A.Fake <ITeamSeasonScheduleRepository>();
            var testObject = new TeamSeasonsControlViewModel(teamSeasonRepository, teamSeasonScheduleRepository);

            var teamSeasonOpponentProfiles = new List <TeamSeasonOpponentProfile>();

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleProfile(A <string> .Ignored,
                                                                                     A <int> .Ignored)).Returns(teamSeasonOpponentProfiles);

            var teamSeasonScheduleTotals = new TeamSeasonScheduleTotals();

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleTotals(A <string> .Ignored,
                                                                                    A <int> .Ignored)).Returns(teamSeasonScheduleTotals);

            var teamSeasonScheduleAverages = new TeamSeasonScheduleAverages();

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleAverages(A <string> .Ignored,
                                                                                      A <int> .Ignored)).Returns(teamSeasonScheduleAverages);

            // Act
            testObject.ViewTeamScheduleCommand.Execute(null !);

            // Assert
            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleProfile(A <string> .Ignored,
                                                                                     A <int> .Ignored)).MustNotHaveHappened();
            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleTotals(A <string> .Ignored,
                                                                                    A <int> .Ignored)).MustNotHaveHappened();
            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleAverages(A <string> .Ignored,
                                                                                      A <int> .Ignored)).MustNotHaveHappened();
        }
        public void SelectedTeamSetter_WhenValueDoesNotEqualSelectedTeam_ShouldAssignValueToSelectedTeam()
        {
            // Arrange
            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();

            var teamSeasonScheduleRepository = A.Fake <ITeamSeasonScheduleRepository>();
            var teamSeasonOpponentProfiles   = new List <TeamSeasonOpponentProfile>();

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleProfile(A <string> .Ignored,
                                                                                     A <int> .Ignored)).Returns(teamSeasonOpponentProfiles);

            var teamSeasonScheduleTotals = new TeamSeasonScheduleTotals();

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleTotals(A <string> .Ignored,
                                                                                    A <int> .Ignored)).Returns(teamSeasonScheduleTotals);

            var teamSeasonScheduleAverages = new TeamSeasonScheduleAverages();

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleAverages(A <string> .Ignored,
                                                                                      A <int> .Ignored)).Returns(teamSeasonScheduleAverages);

            var testObject = new TeamSeasonsControlViewModel(teamSeasonRepository, teamSeasonScheduleRepository)
            {
                SelectedTeam = null
            };

            var teamSeason = new TeamSeason();

            // Act
            testObject.SelectedTeam = teamSeason;

            // Assert
            testObject.SelectedTeam.ShouldBe(teamSeason);

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleProfile(A <string> .Ignored,
                                                                                     A <int> .Ignored)).MustHaveHappenedOnceExactly();
            testObject.TeamSeasonScheduleProfile.ShouldBeOfType <ReadOnlyCollection <TeamSeasonOpponentProfile> >();
            testObject.TeamSeasonScheduleProfile.ShouldBe(teamSeasonOpponentProfiles.ToList());

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleTotals(A <string> .Ignored,
                                                                                    A <int> .Ignored)).MustHaveHappenedOnceExactly();
            testObject.TeamSeasonScheduleTotals.ShouldBeOfType <ReadOnlyCollection <TeamSeasonScheduleTotals> >();

            var teamSeasonScheduleTotalsList = new List <TeamSeasonScheduleTotals> {
                teamSeasonScheduleTotals
            };

            testObject.TeamSeasonScheduleTotals.ShouldBe(teamSeasonScheduleTotalsList);

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleAverages(A <string> .Ignored,
                                                                                      A <int> .Ignored)).MustHaveHappenedOnceExactly();
            testObject.TeamSeasonScheduleAverages.ShouldBeOfType <ReadOnlyCollection <TeamSeasonScheduleAverages> >();

            var teamSeasonScheduleAveragesList = new List <TeamSeasonScheduleAverages> {
                teamSeasonScheduleAverages
            };

            testObject.TeamSeasonScheduleAverages.ShouldBe(teamSeasonScheduleAveragesList);
        }
        public void ViewTeamScheduleCommand_WhenSelectedTeamIsNotNull_ShouldLoadTeamSeasonScheduleProfileTotalsAndAverages()
        {
            // Arrange
            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();

            var teamSeasonScheduleRepository = A.Fake <ITeamSeasonScheduleRepository>();
            var teamSeasonOpponentProfiles   = new List <TeamSeasonOpponentProfile>();

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleProfile(A <string> .Ignored,
                                                                                     A <int> .Ignored)).Returns(teamSeasonOpponentProfiles);

            var teamSeasonScheduleTotals = new TeamSeasonScheduleTotals();

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleTotals(A <string> .Ignored,
                                                                                    A <int> .Ignored)).Returns(teamSeasonScheduleTotals);

            var teamSeasonScheduleAverages = new TeamSeasonScheduleAverages();

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleAverages(A <string> .Ignored,
                                                                                      A <int> .Ignored)).Returns(teamSeasonScheduleAverages);

            var testObject = new TeamSeasonsControlViewModel(teamSeasonRepository, teamSeasonScheduleRepository)
            {
                SelectedTeam = new TeamSeason()
            };

            // Act
            testObject.ViewTeamScheduleCommand.Execute(null !);

            // Assert
            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleProfile(A <string> .Ignored,
                                                                                     A <int> .Ignored)).MustHaveHappened();
            testObject.TeamSeasonScheduleProfile.ShouldBeOfType <ReadOnlyCollection <TeamSeasonOpponentProfile> >();
            testObject.TeamSeasonScheduleProfile.ShouldBe(teamSeasonOpponentProfiles.ToList());

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleTotals(A <string> .Ignored,
                                                                                    A <int> .Ignored)).MustHaveHappened();
            testObject.TeamSeasonScheduleTotals.ShouldBeOfType <ReadOnlyCollection <TeamSeasonScheduleTotals> >();

            var teamSeasonScheduleTotalsList = new List <TeamSeasonScheduleTotals> {
                teamSeasonScheduleTotals
            };

            testObject.TeamSeasonScheduleTotals.ShouldBe(teamSeasonScheduleTotalsList);

            A.CallTo(() => teamSeasonScheduleRepository.GetTeamSeasonScheduleAverages(A <string> .Ignored,
                                                                                      A <int> .Ignored)).MustHaveHappened();
            testObject.TeamSeasonScheduleAverages.ShouldBeOfType <ReadOnlyCollection <TeamSeasonScheduleAverages> >();

            var teamSeasonScheduleAveragesList = new List <TeamSeasonScheduleAverages> {
                teamSeasonScheduleAverages
            };

            testObject.TeamSeasonScheduleAverages.ShouldBe(teamSeasonScheduleAveragesList);
        }
        public void ViewTeamsCommand_ExceptionCaught_LogsAndRethrowsException()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new TeamSeasonsControlViewModel(_sharedService, _controlService);

            // Set up needed infrastructure of class under test.
            A.CallTo(() => _controlService.GetEntities(A <int> .Ignored)).Throws <Exception>();

            // Act & Assert
            Assert.Throws <Exception>(() => viewModel.ViewTeamsCommand.Execute(null));
        }
        private void RefreshControls()
        {
            if (TeamSeasonsControlViewModel is null ||
                SeasonStandingsControlViewModel is null ||
                RankingsControlViewModel is null)
            {
                return;
            }

            TeamSeasonsControlViewModel.Refresh();
            SeasonStandingsControlViewModel.Refresh();
            RankingsControlViewModel.Refresh();
        }
        private void ShowGames()
        {
            var gamesWindow = _gamesWindowFactory.CreateWindow();

            gamesWindow.ShowDialog();

            if (TeamSeasonsControlViewModel is null)
            {
                return;
            }

            TeamSeasonsControlViewModel.Refresh();
        }
        public void ViewTeamsCommand_HappyPath()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new TeamSeasonsControlViewModel(_sharedService, _controlService);

            // Act
            viewModel.ViewTeamsCommand.Execute(null);

            // Assert
            A.CallTo(() => _controlService.GetEntities((int)WpfGlobals.SelectedSeason))
            .MustHaveHappenedOnceExactly();

            Assert.IsInstanceOf <ReadOnlyCollection <TeamSeason> >(viewModel.Teams);
        }
        public void TeamsSetter_WhenValueIsNull_ShouldThrowArgumentNullException()
        {
            // Arrange
            var teamSeasonRepository         = A.Fake <ITeamSeasonRepository>();
            var teamSeasonScheduleRepository = A.Fake <ITeamSeasonScheduleRepository>();
            var testObject = new TeamSeasonsControlViewModel(teamSeasonRepository, teamSeasonScheduleRepository);

            // Act
            Func <ReadOnlyCollection <TeamSeason> > func = () => testObject.Teams = null !;

            // Assert
            var ex = func.ShouldThrow <ArgumentNullException>();

            ex.ParamName.ShouldBe <string>($"{testObject.GetType()}.{nameof(testObject.Teams)}");
        }
        //[TestCase]
        public void TestCase1()
        {
            // Arrange
            // TODO: Instantiate class under test.
            var viewModel = new TeamSeasonsControlViewModel(_sharedService, _controlService);

            // TODO: Define argument variables of method under test.

            // TODO: Set up needed infrastructure of class under test.

            // Act
            // TODO: Call method under test.

            // Assert
            // TODO: Assert results of call to method under test.
        }
        public void TeamsSetter_WhenValueDoesNotEqualTeams_ShouldAssignValueToTeams()
        {
            // Arrange
            var teamSeasonRepository         = A.Fake <ITeamSeasonRepository>();
            var teamSeasonScheduleRepository = A.Fake <ITeamSeasonScheduleRepository>();
            var testObject = new TeamSeasonsControlViewModel(teamSeasonRepository, teamSeasonScheduleRepository);

            var teams = new ReadOnlyCollection <TeamSeason>(new List <TeamSeason>());

            // Act
            Func <ReadOnlyCollection <TeamSeason> > func = () => testObject.Teams = teams;

            // Assert
            func.ShouldNotThrow();
            testObject.Teams.ShouldBeOfType <ReadOnlyCollection <TeamSeason> >();
            testObject.Teams.ShouldBe(teams);
        }
        public void ViewTeamScheduleCommand_SelectedTeamIsNull_SetsTeamSeasonScheduleProfileTotalsAndAveragesToNull()
        {
            // Arrange
            // Instantiate class under test.
            var viewModel = new TeamSeasonsControlViewModel(_sharedService, _controlService)
            {
                // Set up needed infrastructure of class under test.
                SelectedTeam = null
            };

            // Act
            viewModel.ViewTeamScheduleCommand.Execute(null);

            // Assert
            Assert.IsNull(viewModel.TeamSeasonScheduleProfile);
            Assert.IsNull(viewModel.TeamSeasonScheduleTotals);
            Assert.IsNull(viewModel.TeamSeasonScheduleAverages);
        }
        public void Refresh_ShouldLoadTeams()
        {
            // Arrange
            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();
            var teamSeasons          = new List <TeamSeason>();

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonsBySeason(A <int> .Ignored)).Returns(teamSeasons);

            var teamSeasonScheduleRepository = A.Fake <ITeamSeasonScheduleRepository>();
            var testObject = new TeamSeasonsControlViewModel(teamSeasonRepository, teamSeasonScheduleRepository);

            // Act
            testObject.ViewTeamsCommand.Execute(null !);

            // Assert
            A.CallTo(() => teamSeasonRepository.GetTeamSeasonsBySeason(WpfGlobals.SelectedSeason))
            .MustHaveHappenedOnceExactly();
            testObject.Teams.ShouldBeOfType <ReadOnlyCollection <TeamSeason> >();
            testObject.Teams.ShouldBe(teamSeasons);
        }
        public void ViewTeamScheduleCommand_SelectedTeamIsNotNull_SetsTeamSeasonScheduleProfileTotalsAndAveragesToNotNull()
        {
            // Arrange
            // Instantiate class under test.
            var teamName = "Team";

            WpfGlobals.SelectedSeason = 2017;

            var viewModel = new TeamSeasonsControlViewModel(_sharedService, _controlService)
            {
                // Set up needed infrastructure of class under test.
                SelectedTeam = new TeamSeason
                {
                    TeamName = teamName,
                    SeasonID = (int)WpfGlobals.SelectedSeason
                }
            };

            // Act
            viewModel.ViewTeamScheduleCommand.Execute(null);

            // Assert
            A.CallTo(() => _controlService.GetTeamSeasonScheduleProfile(teamName, WpfGlobals.SelectedSeason))
            .MustHaveHappenedOnceExactly();
            Assert.IsInstanceOf <ReadOnlyCollection <GetTeamSeasonScheduleProfile_Result> >(
                viewModel.TeamSeasonScheduleProfile);

            A.CallTo(() => _controlService.GetTeamSeasonScheduleTotals(teamName, WpfGlobals.SelectedSeason))
            .MustHaveHappenedOnceExactly();
            Assert.IsInstanceOf <ReadOnlyCollection <GetTeamSeasonScheduleTotals_Result> >(
                viewModel.TeamSeasonScheduleTotals);

            A.CallTo(() => _controlService.GetTeamSeasonScheduleAverages(teamName, WpfGlobals.SelectedSeason))
            .MustHaveHappenedOnceExactly();
            Assert.IsInstanceOf <ReadOnlyCollection <GetTeamSeasonScheduleAverages_Result> >(
                viewModel.TeamSeasonScheduleAverages);
        }