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); }