private String RespondToStandings(IBaseballSensor sensor, BaseballTeam team) { BaseballStandings standings = sensor.LoadStandings(); BaseballTeamStanding divisionStandings, wildcardStandings = null; BaseballStandingsWithWildcard fullStandings = standings as BaseballStandingsWithWildcard; bool gotStandingsSuccessful = false; if (fullStandings != null) { gotStandingsSuccessful = fullStandings.TryGetStandingsForTeam(team, out divisionStandings, out wildcardStandings); } else { gotStandingsSuccessful = standings.TryGetStandingsForTeam(team, out divisionStandings); } if (!gotStandingsSuccessful) { return(String.Format("I couldn't find any information about the {0} this year.", team.Name)); } else if (divisionStandings.GamesBack == 0) { return(String.Format("The {0} lead the {1}.", team.Name, team.Division)); } else if (wildcardStandings == null) { return(String.Format("The {0} are {1} games behind the leaders in the {2}.", team.Name, divisionStandings.GamesBack * -1, team.Division)); } else if (wildcardStandings.GamesBack > 0) { return(String.Format("The {0} are {1} games behind the leaders in the {2}, and lead the wildcard standings by {3} games.", team.Name, divisionStandings.GamesBack * -1, team.Division, wildcardStandings.GamesBack)); } else if (wildcardStandings.GamesBack == 0) { return(String.Format("The {0} are {1} games behind the leaders in the {2}, and just barely have a wildcard spot.", team.Name, divisionStandings.GamesBack * -1, team.Division)); } else { return(String.Format("The {0} are {1} games behind the leaders in the {2}, and are {3} games behind in the wildcard standings.", team.Name, divisionStandings.GamesBack * -1, team.Division, wildcardStandings.GamesBack * -1)); } }
private void StandingsTest(String teamName, int gamesBackDivisional, int?gamesBackWildcard, String expectedResponse) { Dictionary <String, String> expectedParams = new Dictionary <string, string> { { "Command", "baseball" }, { "Parameter", "Standings" }, { "Time", "DayOfWeek=today;" }, { "Team", teamName }, }; Mock <IBaseballSensor> sensor = new Mock <IBaseballSensor>(MockBehavior.Strict); sensor.Setup(s => s.IsValid).Returns(true); sensor.Setup(s => s.Teams).Returns(_mockTeams); sensor.Setup(s => s.League).Returns("MLB"); BaseballTeamStanding teamStandings = new BaseballTeamStanding(); teamStandings.Team = _mockTeams[0]; teamStandings.GamesBack = gamesBackDivisional; BaseballStandings standings; if (gamesBackWildcard.HasValue) { standings = new BaseballStandingsWithWildcard(); BaseballTeamStanding teamStandingsWildcard = new BaseballTeamStanding(); teamStandingsWildcard.Team = _mockTeams[0]; teamStandingsWildcard.GamesBack = gamesBackWildcard.Value; (standings as BaseballStandingsWithWildcard).AddStandingsForTeam(teamStandings, teamStandingsWildcard); } else { standings = new BaseballStandings(); standings.AddStandingsForTeam(teamStandings); } sensor.Setup(s => s.LoadStandings()).Returns(standings); AddComponentToConfigurationManager(sensor.Object); CurrentConversation = new BaseballConversation(GetConfigurationManager(), new List <IOInterfaceReference>()); Assert.AreEqual(expectedResponse, RunSingleConversation <BaseballConversation>(expectedParams)); sensor.Verify(s => s.LoadStandings(), Times.Exactly(1)); }
/// <summary> /// Adds the given divisional and wildcard standings for a team. /// </summary> /// <param name="divisionStandings">The divisional standings for the team.</param> /// <param name="wildcardStandings">The wildcard standings for the team.</param> /// <param name="division">The division that the standings should be added. /// </param> public void AddStandingsForTeam(BaseballTeamStanding divisionStandings, BaseballTeamStanding wildcardStandings, MLBDivision division) { AddStandingsForTeam(divisionStandings, wildcardStandings); switch (division) { case MLBDivision.NLEast: _nlEastStandings.Add(divisionStandings); _nlWildcardStandings.Add(wildcardStandings); break; case MLBDivision.NLCentral: _nlCentralStandings.Add(divisionStandings); _nlWildcardStandings.Add(wildcardStandings); break; case MLBDivision.NLWest: _nlWestStandings.Add(divisionStandings); _nlWildcardStandings.Add(wildcardStandings); break; case MLBDivision.ALEast: _alEastStandings.Add(divisionStandings); _alWildcardStandings.Add(wildcardStandings); break; case MLBDivision.ALCentral: _alCentralStandings.Add(divisionStandings); _alWildcardStandings.Add(wildcardStandings); break; case MLBDivision.ALWest: _alWestStandings.Add(divisionStandings); _alWildcardStandings.Add(wildcardStandings); break; default: break; } }
private void UpdateDailyStandings() { XmlDocument doc = new XmlDocument(); MLBStandings standings = new MLBStandings(); DateTime currDate = DateTime.Now; while (DateTime.Now.Subtract(currDate).Days < 7) { currDate = currDate.Subtract(TimeSpan.FromDays(1)); doc.Load(GetEpgFile(currDate)); if (doc == null) { break; } foreach (XmlElement game in doc.SelectNodes("/epg/game")) { BaseballTeamStanding homeDivStanding = new BaseballTeamStanding(); BaseballTeamStanding homeWildcardStanding = new BaseballTeamStanding(); String homeTeamName = game.Attributes["home_team_name"].Value; BaseballTeam homeTeam = Teams.SingleOrDefault(t => t.Key.Equals(homeTeamName)); if (!standings.TryGetStandingsForTeam(homeTeam, out homeDivStanding, out homeWildcardStanding) && !String.IsNullOrEmpty(game.Attributes["home_games_back"].Value) && !String.IsNullOrEmpty(game.Attributes["home_games_back_wildcard"].Value)) { homeDivStanding = new BaseballTeamStanding(); homeWildcardStanding = new BaseballTeamStanding(); homeDivStanding.Team = homeTeam; homeWildcardStanding.Team = homeTeam; String gamesBack = game.Attributes["home_games_back"].Value; if (gamesBack.Equals("-")) { homeDivStanding.GamesBack = 0; } else { homeDivStanding.GamesBack = -1 * Double.Parse(gamesBack); } gamesBack = game.Attributes["home_games_back_wildcard"].Value; if (gamesBack.Equals("-")) { homeWildcardStanding.GamesBack = 0; } else if (gamesBack.StartsWith("+")) { homeWildcardStanding.GamesBack = Double.Parse(gamesBack); } else { homeWildcardStanding.GamesBack = -1 * Double.Parse(gamesBack); } standings.AddStandingsForTeam(homeDivStanding, homeWildcardStanding, (Teams.SingleOrDefault(t => t.Key.Equals(homeTeamName)) as MLBTeam).Division); } BaseballTeamStanding awayDivStanding = new BaseballTeamStanding(); BaseballTeamStanding awayWildcardStanding = new BaseballTeamStanding(); String awayTeamName = game.Attributes["away_team_name"].Value; BaseballTeam awayTeam = Teams.SingleOrDefault(t => t.Key.Equals(awayTeamName)); if (!standings.TryGetStandingsForTeam(awayTeam, out awayDivStanding, out awayWildcardStanding) && !String.IsNullOrEmpty(game.Attributes["away_games_back"].Value)) { awayDivStanding = new BaseballTeamStanding(); awayWildcardStanding = new BaseballTeamStanding(); awayDivStanding.Team = awayTeam; awayWildcardStanding.Team = awayTeam; String gamesBack = game.Attributes["away_games_back"].Value; if (gamesBack.Equals("-")) { awayDivStanding.GamesBack = 0; } else { awayDivStanding.GamesBack = -1 * Double.Parse(gamesBack); } gamesBack = game.Attributes["away_games_back_wildcard"].Value; if (gamesBack.Equals("-") || String.IsNullOrEmpty(gamesBack)) { awayWildcardStanding.GamesBack = 0; } else if (gamesBack.StartsWith("+")) { awayWildcardStanding.GamesBack = Double.Parse(gamesBack); } else { awayWildcardStanding.GamesBack = -1 * Double.Parse(gamesBack); } standings.AddStandingsForTeam(awayDivStanding, awayWildcardStanding, (Teams.SingleOrDefault(t => t.Key.Equals(awayTeamName)) as MLBTeam).Division); } } } _lastTimeStandingsUpdated = DateTime.Now; _dailyStandings = standings; }