Example #1
0
        public async Task <IActionResult> PredictGame([Bind("GuestSeasonYear,GuestName,GuestScore,HostSeasonYear,HostName,HostScore")] GamePrediction prediction)
        {
            var seasons = (await _seasonRepository.GetSeasonsAsync()).OrderByDescending(s => s.Year);


            GuestSeasonYear = prediction.GuestSeasonYear;

            ViewBag.GuestSeasons = new SelectList(seasons, "Year", "Year", GuestSeasonYear);

            var guests = await _teamSeasonRepository.GetTeamSeasonsBySeasonAsync(GuestSeasonYear);

            var guest = await _teamSeasonRepository.GetTeamSeasonByTeamAndSeasonAsync(prediction.GuestName,
                                                                                      GuestSeasonYear);

            if (guest is null)
            {
                ViewBag.Guests = new SelectList(guests, "TeamName", "TeamName");
            }
            else
            {
                ViewBag.Guests = new SelectList(guests, "TeamName", "TeamName", guest.TeamName);
            }


            HostSeasonYear = prediction.HostSeasonYear;

            ViewBag.HostSeasons = new SelectList(seasons, "Year", "Year", HostSeasonYear);

            var hosts = await _teamSeasonRepository.GetTeamSeasonsBySeasonAsync(HostSeasonYear);

            var host = await _teamSeasonRepository.GetTeamSeasonByTeamAndSeasonAsync(
                prediction.HostName, HostSeasonYear);

            if (host is null)
            {
                ViewBag.Hosts = new SelectList(hosts, "TeamName", "TeamName");
            }
            else
            {
                ViewBag.Hosts = new SelectList(hosts, "TeamName", "TeamName", host.TeamName);
            }

            return(View(prediction));
        }
        public async Task PredictGamePost_WhenGuestAndHostBothNotFound_ShouldPredictGameAndReturnFilledFormView()
        {
            // Arrange
            int guestSeasonYear = 1922;
            int hostSeasonYear  = 1923;

            var seasonRepository = A.Fake <ISeasonRepository>();
            var seasons          = new List <Season>();

            A.CallTo(() => seasonRepository.GetSeasonsAsync()).Returns(seasons);

            var teamSeasonRepository = A.Fake <ITeamSeasonRepository>();

            var guests = new List <TeamSeason>();

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonsBySeasonAsync(guestSeasonYear)).Returns(guests);
            TeamSeason?guest = null;

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonByTeamAndSeasonAsync(A <string> .Ignored, guestSeasonYear))
            .Returns(guest);

            var hosts = new List <TeamSeason>();

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonsBySeasonAsync(hostSeasonYear)).Returns(hosts);
            TeamSeason?host = null;

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonByTeamAndSeasonAsync(A <string> .Ignored, hostSeasonYear))
            .Returns(host);

            var testController = new GamePredictorController(seasonRepository, teamSeasonRepository);

            var prediction = new GamePrediction
            {
                GuestSeasonYear = guestSeasonYear,
                HostSeasonYear  = hostSeasonYear
            };

            // Act
            var result = await testController.PredictGame(prediction);

            // Assert
            A.CallTo(() => seasonRepository.GetSeasonsAsync()).MustHaveHappenedOnceExactly();

            var orderedSeasons = seasons.OrderByDescending(s => s.Year);

            GamePredictorController.GuestSeasonYear.ShouldBe(prediction.GuestSeasonYear);

            Assert.IsType <SelectList>(testController.ViewBag.GuestSeasons);
            var viewBagGuestSeasons = (SelectList)testController.ViewBag.GuestSeasons;

            viewBagGuestSeasons.Items.ShouldBe(orderedSeasons);
            viewBagGuestSeasons.DataValueField.ShouldBe("Year");
            viewBagGuestSeasons.DataTextField.ShouldBe("Year");
            viewBagGuestSeasons.SelectedValue.ShouldBe(GamePredictorController.GuestSeasonYear);

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonsBySeasonAsync(GamePredictorController.GuestSeasonYear))
            .MustHaveHappenedOnceExactly();
            A.CallTo(() => teamSeasonRepository.GetTeamSeasonByTeamAndSeasonAsync(prediction.GuestName,
                                                                                  GamePredictorController.GuestSeasonYear)).MustHaveHappenedOnceExactly();

            Assert.IsType <SelectList>(testController.ViewBag.Guests);
            var viewBagGuests = ((SelectList)testController.ViewBag.Guests);

            viewBagGuests.Items.ShouldBe(guests);
            viewBagGuests.DataValueField.ShouldBe <string>("TeamName");
            viewBagGuests.DataTextField.ShouldBe <string>("TeamName");

            GamePredictorController.HostSeasonYear.ShouldBe(prediction.HostSeasonYear);

            Assert.IsType <SelectList>(testController.ViewBag.HostSeasons);

            var viewBagHostSeasons = (SelectList)testController.ViewBag.HostSeasons;

            viewBagHostSeasons.Items.ShouldBe(orderedSeasons);
            viewBagHostSeasons.DataValueField.ShouldBe("Year");
            viewBagHostSeasons.DataTextField.ShouldBe("Year");
            viewBagHostSeasons.SelectedValue.ShouldBe(GamePredictorController.HostSeasonYear);

            A.CallTo(() => teamSeasonRepository.GetTeamSeasonsBySeasonAsync(GamePredictorController.HostSeasonYear))
            .MustHaveHappenedOnceExactly();
            A.CallTo(() => teamSeasonRepository.GetTeamSeasonByTeamAndSeasonAsync(prediction.HostName,
                                                                                  GamePredictorController.HostSeasonYear)).MustHaveHappenedOnceExactly();

            Assert.IsType <SelectList>(testController.ViewBag.Hosts);
            var viewBagHosts = ((SelectList)testController.ViewBag.Hosts);

            viewBagHosts.Items.ShouldBe(hosts);
            viewBagHosts.DataValueField.ShouldBe <string>("TeamName");
            viewBagHosts.DataTextField.ShouldBe <string>("TeamName");

            result.ShouldBeOfType <ViewResult>();
            ((ViewResult)result).Model.ShouldBe(prediction);
        }