Пример #1
0
        public void PerformanceParameterAnalysis_Property_Set_Test()
        {
            try
            {
                // Arrange
                PlayerAnalysis playerAnalysis = new PlayerAnalysis();

                // Act
                playerAnalysis.sport        = new Sport();
                playerAnalysis.sport.id     = 1;
                playerAnalysis.sport.name   = "Sport 1";
                playerAnalysis.sport.userId = 1;

                playerAnalysis.players = new List <Player>();
                Player player = new Player();
                player.id        = 1;
                player.firstName = "FirstName";
                player.lastName  = "LastName";
                playerAnalysis.players.Add(player);
                playerAnalysis.perfPara                        = new PerformanceParameter();
                playerAnalysis.perfPara.id                     = 1;
                playerAnalysis.perfPara.perfParaName           = new PerformanceParameterName();
                playerAnalysis.perfPara.perfParaName.id        = 1;
                playerAnalysis.perfPara.perfParaName.name      = "Para Name 1";
                playerAnalysis.perfPara.perfParaTypeGroup      = new PerformanceParameterTypeGroup();
                playerAnalysis.perfPara.perfParaTypeGroup.id   = 1;
                playerAnalysis.perfPara.perfParaTypeGroup.name = "Para Type Group 1";
                playerAnalysis.perfPara.sportId                = 1;
                playerAnalysis.perfPara.customName             = "custom name";

                playerAnalysis.timeRange = "LAST1WEEK";

                DateTime time = DateTime.Now;
                playerAnalysis.fromTime = time;
                playerAnalysis.toTime   = time;

                // Assert
                Assert.AreEqual <long>(playerAnalysis.sport.id, 1);
                Assert.AreEqual <string>(playerAnalysis.sport.name, "Sport 1");
                Assert.AreEqual <long>(playerAnalysis.sport.userId, 1);
                Assert.AreEqual <long>(playerAnalysis.players[0].id, 1);
                Assert.AreEqual <string>(playerAnalysis.players[0].firstName, "FirstName");
                Assert.AreEqual <string>(playerAnalysis.players[0].lastName, "LastName");
                Assert.AreEqual <long>(playerAnalysis.perfPara.id, 1);
                Assert.AreEqual <long>(playerAnalysis.perfPara.perfParaName.id, 1);
                Assert.AreEqual <string>(playerAnalysis.perfPara.perfParaName.name, "Para Name 1");
                Assert.AreEqual <long>(playerAnalysis.perfPara.perfParaTypeGroup.id, 1);
                Assert.AreEqual <string>(playerAnalysis.perfPara.perfParaTypeGroup.name, "Para Type Group 1");
                Assert.AreEqual <long>(playerAnalysis.perfPara.sportId, 1);
                Assert.AreEqual <string>(playerAnalysis.perfPara.customName, "custom name");
                Assert.AreEqual <string>(playerAnalysis.timeRange, "LAST1WEEK");
                Assert.AreEqual <DateTime>(playerAnalysis.fromTime, time);
                Assert.AreEqual <DateTime>(playerAnalysis.toTime, time);
            }
            catch (Exception ex)
            {
                throw new AssertFailedException("Setting PerformanceParameterAnalysis properties failed.");
            }
        }
Пример #2
0
        public void Repository_Get_PlayerAnalysis_Test()
        {
            try
            {
                // Arrange
                PlayerAnalysisRepository PlayerAnalysisRepository = new PlayerAnalysisRepository();
                PlayerAnalysis           playerAnalysis           = new PlayerAnalysis();
                playerAnalysis.sport        = new Sport();
                playerAnalysis.sport.id     = 1;
                playerAnalysis.sport.name   = "Sport 1";
                playerAnalysis.sport.userId = 1;
                playerAnalysis.players      = new List <Player>();
                Player player = new Player();
                player.id        = 1;
                player.firstName = "FirstName";
                player.lastName  = "LastName";
                playerAnalysis.players.Add(player);
                playerAnalysis.perfPara                        = new PerformanceParameter();
                playerAnalysis.perfPara.id                     = 1;
                playerAnalysis.perfPara.perfParaName           = new PerformanceParameterName();
                playerAnalysis.perfPara.perfParaName.id        = 1;
                playerAnalysis.perfPara.perfParaName.name      = "Para Name 1";
                playerAnalysis.perfPara.perfParaTypeGroup      = new PerformanceParameterTypeGroup();
                playerAnalysis.perfPara.perfParaTypeGroup.id   = 1;
                playerAnalysis.perfPara.perfParaTypeGroup.name = "Para Type Group 1";
                playerAnalysis.perfPara.sportId                = 1;
                playerAnalysis.perfPara.customName             = "custom name";

                playerAnalysis.timeRange = "LAST1WEEK";

                DateTime time = DateTime.Now;
                playerAnalysis.fromTime = time;
                playerAnalysis.toTime   = time;

                // Act
                HighChart PlayerAnalysisResultFromDb = PlayerAnalysisRepository.GetPlayerAnalysis(playerAnalysis);

                // Assert
                Assert.IsNotNull(PlayerAnalysisResultFromDb);
                Assert.AreEqual(PlayerAnalysisResultFromDb.chart.type, "line");
                Assert.IsTrue(PlayerAnalysisResultFromDb.xAxis.categories.Count == 8);
                Assert.AreEqual(PlayerAnalysisResultFromDb.yAxis.title.text, playerAnalysis.perfPara.perfParaName.name);
                Assert.AreEqual(PlayerAnalysisResultFromDb.tooltip.valueSuffix, " " + playerAnalysis.perfPara.perfParaTypeGroup.name);
                Assert.AreEqual(PlayerAnalysisResultFromDb.series[0].name, playerAnalysis.players[0].firstName + " " + playerAnalysis.players[0].lastName);
                Assert.IsTrue(PlayerAnalysisResultFromDb.series[0].data.Count == 8);
            }
            catch (Exception)
            {
                throw new AssertFailedException("Unable to fetch player Analysis.");
            }
        }
Пример #3
0
        public void Post_Valid_Test()
        {
            // Arrange
            PlayerAnalysis PlayerAnalysisObjAsInput = new PlayerAnalysis();

            PlayerAnalysisObjAsInput.sport        = new Sport();
            PlayerAnalysisObjAsInput.sport.id     = 1;
            PlayerAnalysisObjAsInput.sport.name   = "Sport 1";
            PlayerAnalysisObjAsInput.sport.userId = 1;
            PlayerAnalysisObjAsInput.players      = new List <Player>();
            Player player = new Player();

            player.id        = 1;
            player.firstName = "FirstName";
            player.lastName  = "LastName";
            PlayerAnalysisObjAsInput.players.Add(player);
            PlayerAnalysisObjAsInput.perfPara                        = new PerformanceParameter();
            PlayerAnalysisObjAsInput.perfPara.id                     = 1;
            PlayerAnalysisObjAsInput.perfPara.perfParaName           = new PerformanceParameterName();
            PlayerAnalysisObjAsInput.perfPara.perfParaName.id        = 1;
            PlayerAnalysisObjAsInput.perfPara.perfParaName.name      = "Para Name 1";
            PlayerAnalysisObjAsInput.perfPara.perfParaTypeGroup      = new PerformanceParameterTypeGroup();
            PlayerAnalysisObjAsInput.perfPara.perfParaTypeGroup.id   = 1;
            PlayerAnalysisObjAsInput.perfPara.perfParaTypeGroup.name = "Para Type Group 1";
            PlayerAnalysisObjAsInput.perfPara.sportId                = 1;
            PlayerAnalysisObjAsInput.perfPara.customName             = "custom name";
            PlayerAnalysisObjAsInput.timeRange                       = "LAST1WEEK";
            PlayerAnalysisObjAsInput.fromTime                        = DateTime.Now.AddDays(-1);
            PlayerAnalysisObjAsInput.toTime = DateTime.Now;

            HighChart highChart = new HighChart();

            var mockRepository = new Mock <IPlayerAnalysisRepository>();

            mockRepository.Setup(x => x.GetPlayerAnalysis(PlayerAnalysisObjAsInput))
            .Returns(highChart);

            var controller = new PlayerAnalysisController(mockRepository.Object);

            controller.Request       = new HttpRequestMessage();
            controller.Configuration = new HttpConfiguration();

            // Act
            HttpResponseMessage response = controller.Post(PlayerAnalysisObjAsInput);

            // Assert
            string responseJSONStr = response.Content.ReadAsStringAsync().Result;

            Assert.IsNotNull(responseJSONStr);
        }
Пример #4
0
        public void PerformanceParameterAnalysis_Initialization_Test()
        {
            try
            {
                // Arrange and Act
                PlayerAnalysis playerAnalysis = new PlayerAnalysis();

                // Assert
                Assert.IsNotNull(playerAnalysis);
            }
            catch (Exception)
            {
                throw new AssertFailedException("PlayerAnalysis initialization failed.");
            }
        }
Пример #5
0
            public void Summarize(float budgetPerStat, List <Stat> stats)
            {
                this.ProjectedValue = 0f;
                StringBuilder sb = new StringBuilder();

                sb.AppendFormat("<TR><TD>{0}</TD>", this.Player.Name);
                foreach (Stat stat in stats)
                {
                    PlayerAnalysis a = this.Analyses.FirstOrDefault(pa => pa.Stat == stat.Name);
                    if (a != null)
                    {
                        float statValue = budgetPerStat * a.Percentage;
                        sb.AppendFormat("<TD>Raw Value: {0}<BR>Rank: {1}<BR>Percentage: {2}<BR>Value: {3}</TD>", a.RawValue, a.Rank, a.Percentage, statValue);
                        this.ProjectedValue += statValue;
                    }
                    else
                    {
                        sb.Append("<TD>&nbsp;</TD>");
                    }
                }
                sb.AppendFormat("<TD>{0}</TD>", this.ProjectedValue);
                sb.AppendLine("</TR>");
                this.HTML = sb.ToString();
            }
Пример #6
0
        // POST: api/PlayerAnalysis
        public HttpResponseMessage Post([FromBody] PlayerAnalysis playerInfo)
        {
            HttpResponseMessage response;

            if (playerInfo == null)
            {
                response = Request.CreateResponse(HttpStatusCode.NoContent, "Invalid JSON Passed.");
                return(response);
            }

            HighChart highChart = _iPlayerAnalysisRepository.GetPlayerAnalysis(playerInfo);

            if (highChart != null)
            {
                response         = Request.CreateResponse(HttpStatusCode.OK, "PlayerAnalysis added successfully.");
                response.Content = new StringContent(Helper.Serialize(highChart));
            }
            else
            {
                response = Request.CreateResponse(HttpStatusCode.Conflict, "Error adding PlayerAnalysis.");
            }

            return(response);
        }
Пример #7
0
        public HighChart GetPlayerAnalysis(PlayerAnalysis playerAnalysis)
        {
            HighChart highChart = new HighChart();

            highChart.chart      = new Chart();
            highChart.chart.type = "line";

            highChart.title      = new Title();
            highChart.title.text = "Performance Analysis Report of " + playerAnalysis.perfPara.perfParaName.name + " for " + playerAnalysis.sport.name;

            highChart.subtitle = new Title();

            if (playerAnalysis.timeRange == "LAST1WEEK")
            {
                highChart.subtitle.text = "<strong>Duration</strong>: Last 1 Week";
                playerAnalysis.fromTime = DateTime.Now.AddDays(-7);
                playerAnalysis.toTime   = DateTime.Now;
            }
            else if (playerAnalysis.timeRange == "LAST1MONTH")
            {
                highChart.subtitle.text = "Duration: Last 1 Month";
                playerAnalysis.fromTime = DateTime.Now.AddMonths(-1);
                playerAnalysis.toTime   = DateTime.Now;
            }
            else if (playerAnalysis.timeRange == "LAST3MONTHS")
            {
                highChart.subtitle.text = "Duration: Last 3 Months";
                playerAnalysis.fromTime = DateTime.Now.AddMonths(-3);
                playerAnalysis.toTime   = DateTime.Now;
            }
            else if (playerAnalysis.timeRange == "LAST6MONTHS")
            {
                highChart.subtitle.text = "Duration: Last 6 Months";
                playerAnalysis.fromTime = DateTime.Now.AddMonths(-6);
                playerAnalysis.toTime   = DateTime.Now;
            }
            else
            {
                highChart.subtitle.text = "Duration: Custom";
                playerAnalysis.fromTime = DateTime.Now.AddDays(-7);
                playerAnalysis.toTime   = DateTime.Now;
            }

            highChart.xAxis            = new XAxis();
            highChart.xAxis.categories = new List <string>();

            highChart.yAxis            = new YAxis();
            highChart.yAxis.title      = new Title();
            highChart.yAxis.title.text = playerAnalysis.perfPara.perfParaName.name;

            highChart.tooltip = new ToolTip();

            highChart.series = new List <SeriesElement>();
            SeriesElement seriesElement;

            String       sqlStr = "select id, group_id, name from perf_para_type where group_id = @groupId";
            MySqlCommand cmd    = new MySqlCommand(sqlStr, conn);

            cmd.Parameters.AddWithValue("groupId", playerAnalysis.perfPara.perfParaTypeGroup.id);
            MySqlDataReader perfParaTypeSqlReader = cmd.ExecuteReader();

            List <PerformanceParameterType> perfParaTypes = new List <PerformanceParameterType>();
            PerformanceParameterType        perfParaType  = null;

            while (perfParaTypeSqlReader.Read())
            {
                perfParaType         = new PerformanceParameterType();
                perfParaType.id      = perfParaTypeSqlReader.GetInt32(0);
                perfParaType.groupId = perfParaTypeSqlReader.GetInt32(1);
                perfParaType.name    = perfParaTypeSqlReader.GetString(2);

                perfParaTypes.Add(perfParaType);
            }
            perfParaTypeSqlReader.Close();

            MySqlDataReader sqlReader;

            if (perfParaTypes.Count == 1)
            {
                highChart.tooltip.valueSuffix = " " + playerAnalysis.perfPara.perfParaTypeGroup.name;

                DateTime startTime = playerAnalysis.fromTime;
                while (startTime <= playerAnalysis.toTime)
                {
                    highChart.xAxis.categories.Add(startTime.Day.ToString() + "-" + startTime.Month.ToString());
                    startTime = startTime.AddDays(1);
                }

                for (int i = 0; i < playerAnalysis.players.Count; i++)
                {
                    seriesElement      = new SeriesElement();
                    seriesElement.name = playerAnalysis.players[i].firstName + " " + playerAnalysis.players[i].lastName;

                    seriesElement.data = new List <string>();

                    sqlStr = "select value from player_eval where sport_id = @sportId and player_id = @playerId and name_id = @nameId and type_id = @typeId and eval_date = @evalDate";
                    cmd    = new MySqlCommand(sqlStr, conn);
                    cmd.Parameters.AddWithValue("sportId", playerAnalysis.sport.id);
                    cmd.Parameters.AddWithValue("playerId", playerAnalysis.players[i].id);
                    cmd.Parameters.AddWithValue("nameId", playerAnalysis.perfPara.perfParaName.id);
                    cmd.Parameters.AddWithValue("typeId", ((PerformanceParameterType)perfParaTypes[0]).id);
                    MySqlParameter para;

                    startTime = playerAnalysis.fromTime;
                    while (startTime <= playerAnalysis.toTime)
                    {
                        if (cmd.Parameters.Contains("evalDate"))
                        {
                            cmd.Parameters.RemoveAt(4);
                        }

                        para       = new MySqlParameter("evalDate", MySqlDbType.Date);
                        para.Value = startTime;
                        cmd.Parameters.Add(para);
                        sqlReader = cmd.ExecuteReader();

                        if (sqlReader.Read())
                        {
                            string[] timeformats = { @"m\:ss", @"mm\:ss", @"h\:mm\:ss" };
                            TimeSpan duration;

                            if (playerAnalysis.perfPara.perfParaTypeGroup.name == "min:sec")
                            {
                                duration = TimeSpan.ParseExact(sqlReader.GetString(0), timeformats, CultureInfo.InvariantCulture);
                                seriesElement.data.Add(duration.TotalSeconds.ToString());
                                highChart.tooltip.valueSuffix = " total sec";
                            }
                            else if (playerAnalysis.perfPara.perfParaTypeGroup.name == "hr:min:sec")
                            {
                                duration = TimeSpan.ParseExact(sqlReader.GetString(0), timeformats, CultureInfo.InvariantCulture);
                                seriesElement.data.Add(duration.TotalSeconds.ToString());
                                highChart.tooltip.valueSuffix = " total sec";
                            }
                            else
                            {
                                seriesElement.data.Add(sqlReader.GetString(0));
                            }
                        }
                        else
                        {
                            seriesElement.data.Add(string.Empty);
                        }

                        sqlReader.Close();
                        startTime = startTime.AddDays(1);
                    }

                    highChart.series.Add(seriesElement);
                }
            }
            else
            {
                highChart.chart.type = "column";

                for (int i = 0; i < perfParaTypes.Count; i++)
                {
                    highChart.xAxis.categories.Add(((PerformanceParameterType)perfParaTypes[i]).name);
                }

                for (int i = 0; i < playerAnalysis.players.Count; i++)
                {
                    seriesElement      = new SeriesElement();
                    seriesElement.name = playerAnalysis.players[i].firstName + " " + playerAnalysis.players[i].lastName;

                    seriesElement.data = new List <string>();

                    sqlStr = "select count(*) from player_eval where sport_id = @sportId and player_id = @playerId and name_id = @nameId and type_id = @typeId and eval_date >= @evalFromDate";
                    cmd    = new MySqlCommand(sqlStr, conn);
                    cmd.Parameters.AddWithValue("sportId", playerAnalysis.sport.id);
                    cmd.Parameters.AddWithValue("playerId", playerAnalysis.players[i].id);
                    cmd.Parameters.AddWithValue("nameId", playerAnalysis.perfPara.perfParaName.id);

                    MySqlParameter para = new MySqlParameter("evalFromDate", MySqlDbType.Date);
                    para.Value = playerAnalysis.fromTime;
                    cmd.Parameters.Add(para);

                    //para = new MySqlParameter("evalToDate", MySqlDbType.Date);
                    //para.Value = playerAnalysis.toTime;
                    //cmd.Parameters.Add(para);

                    for (int j = 0; j < perfParaTypes.Count; j++)
                    {
                        if (cmd.Parameters.Contains("typeId"))
                        {
                            cmd.Parameters.RemoveAt(4);
                        }

                        cmd.Parameters.AddWithValue("typeId", ((PerformanceParameterType)perfParaTypes[j]).id);

                        seriesElement.data.Add(cmd.ExecuteScalar().ToString());
                    }

                    highChart.series.Add(seriesElement);
                }
            }

            return(highChart);
        }