public void EventFromJsonEventSecondHalfTest()
        {
            // set up
            DateTime start = new DateTime(2014, 1, 1);
            GameEventMiner miner = new GameEventMiner();
            GameEvent evnt = null;
            Game game = new Game()
            {
                Id = 1,
                Start = start,
                HalftimeStart = start.AddMinutes(45)
            };
            JsonGameEvent jsonEvnt = new JsonGameEvent()
            {
                Comment = "Goal",
                CommentTypeId = 1,
                MatchPeriodId = 2,
                Minute = 55,
                Second = 2,
                Time = "55'"
            };

            // exercise
            evnt = miner.EventFromJsonEvent(jsonEvnt, game);

            // validate
            Assert.IsNotNull(evnt);
            Assert.AreEqual(GameEventType.GOAL, evnt.Type);
            Assert.AreEqual(new DateTime(2014, 1, 1, 1, 10, 2), evnt.Timestamp);
            Assert.AreEqual("55'", evnt.MatchTime);
            Assert.AreEqual("Goal", evnt.Comment);
        }
        public void EventFromJsonEventFailTest()
        {
            // set up
            GameEventMiner miner = new GameEventMiner();
            GameEvent evnt = null;
            Game game = new Game()
            {
                Id = 1,
                Start = new DateTime(2014, 1, 1)
            };
            JsonGameEvent jsonEvnt = new JsonGameEvent()
            {
                Comment = "Invalid",
                CommentTypeId = 99,
                MatchPeriodId = 1,
                Minute = 40,
                Second = 2,
                Time = "40'"
            };

            // exercise
            evnt = miner.EventFromJsonEvent(jsonEvnt, game);

            // validate
            Assert.IsNull(evnt);
        }
        /// <summary>
        /// translates a JsonGameEvent to a GameEvent. returns null if the event
        /// cannot be translated
        /// </summary>
        /// <param name="jsonEvent">the event to translate</param>
        /// <param name="game">the game the event belongs to</param>
        /// <returns>the new game event</returns>
        public GameEvent EventFromJsonEvent(JsonGameEvent jsonEvent, Game game)
        {
            GameEvent evnt = new GameEvent();

            // set up the easy fields first
            evnt.MatchTime = jsonEvent.Time;
            evnt.Comment = jsonEvent.Comment;
            evnt.GameId = game.Id;

            // calculate the timestamp
            if (jsonEvent.MatchPeriodId == 1)
            {
                evnt.Timestamp = game.Start.AddMinutes(jsonEvent.Minute).AddSeconds(jsonEvent.Second);
            }
            else if (jsonEvent.MatchPeriodId == 2)
            {
                TimeSpan extra = game.HalftimeStart.Value.AddMinutes(-45) - game.Start;
                // add 15 minutes for half time and any extra time
                evnt.Timestamp = game.Start.AddMinutes(jsonEvent.Minute + 15)
                    .AddSeconds(jsonEvent.Second).AddSeconds(extra.TotalSeconds);
            }
            else
            {
                return null;
            }

            // determine what time of event this is
            switch (jsonEvent.CommentTypeId)
            {
                case GoalType:
                    evnt.Type = GameEventType.GOAL;
                    break;
                case SubType:
                    evnt.Type = GameEventType.SUB;
                    break;
                case YellowType:
                    evnt.Type = GameEventType.YELLOW;
                    break;
                case RedType:
                    evnt.Type = GameEventType.RED;
                    break;
                case StartOfHalfType:
                    if (jsonEvent.MatchPeriodId == 1)
                    {
                        evnt.Type = GameEventType.FIRST_HALF_START;
                        evnt.MatchTime = "0'";
                    }
                    else if (jsonEvent.MatchPeriodId == 2)
                    {
                        evnt.Type = GameEventType.SECOND_HALF_START;
                        evnt.MatchTime = "45'";
                        game.HalftimeEnd = evnt.Timestamp;
                    }
                    else
                        return null;
                    break;
                case EndFirstHalfType:
                    evnt.Type = GameEventType.FIRST_HALF_END;
                    game.HalftimeStart = evnt.Timestamp;
                    break;
                case EndSecondHalfType:
                    evnt.Type = GameEventType.SECOND_HALF_END;
                    game.End = evnt.Timestamp;
                    break;
                default:
                    return null;
            }

            return evnt;
        }
        public void EventFromJsonEventTest()
        {
            // set up
            GameEventMiner miner = new GameEventMiner();
            GameEvent evnt = null;
            Game game = new Game()
            {
                Id = 1,
                Start = new DateTime(2014, 1, 1)
            };
            JsonGameEvent jsonEvnt = new JsonGameEvent()
            {
                Comment = "Goal",
                CommentTypeId = 5,
                MatchPeriodId = 1,
                Minute = 40,
                Second = 2,
                Time = "40'"
            };

            // exercise
            evnt = miner.EventFromJsonEvent(jsonEvnt, game);

            // validate
            Assert.IsNotNull(evnt);
            Assert.AreEqual(GameEventType.RED, evnt.Type);
            Assert.AreEqual(new DateTime(2014, 1, 1, 0, 40, 2), evnt.Timestamp);
            Assert.AreEqual("40'", evnt.MatchTime);
            Assert.AreEqual("Goal", evnt.Comment);
        }