Beispiel #1
0
        public void RunEquals_RunNoDiffers_false()
        {
            var crit = new JudgingCriterion()
            {
                Id = 5
            };
            var judge = new Judge()
            {
                Id = 8
            };
            var rc = new RoundContestant()
            {
                Id = 7
            };

            var j1 = new RunJudging(rc, judge, crit, 1, 7M);
            var j2 = new RunJudging(rc, judge, crit, 2, 6M);

            j1.Id = 1;
            j2.Id = 2;

            var result = j1.RunEquals(j2);

            Assert.IsFalse(result);
        }
        /// <summary>
        /// Used to quickly assign a score to all contestants in a round.
        /// </summary>
        /// <param name="tourney"></param>
        /// <param name="round"></param>
        public static List <RunJudging> ScoreAllContestants(Tournament tourney, Round round)
        {
            // Kvadruppel-nøsted loop. Ikke hver dag du ser det, eller hva?
            var rand      = new Random();
            var scoreList = new List <RunJudging>();

            foreach (var contestant in round.ContestantEntries)
            {
                for (int runNo = 1; runNo < round.RunsPerContestant; runNo++)
                {
                    foreach (var crit in tourney.JudgingCriteria)
                    {
                        foreach (var judge in tourney.Judges)
                        {
                            var judgement = new RunJudging();
                            judgement.CriterionId       = crit.Id;
                            judgement.JudgeId           = judge.Id;
                            judgement.RoundContestantId = contestant.Id;
                            judgement.RunNo             = runNo;
                            judgement.Score             = (decimal)((decimal)rand.NextDouble() * (crit.Max - crit.Min) + crit.Min);
                            contestant.ReplaceRunJudging(judgement);
                            scoreList.Add(judgement);
                        }
                    }
                }
            }
            return(scoreList);
        }
Beispiel #3
0
        public void RunEquals_AllButIdAndScoreEqual_true()
        {
            var crit = new JudgingCriterion()
            {
                Id = 5
            };
            var judge = new Judge()
            {
                Id = 8
            };
            var rc = new RoundContestant()
            {
                Id = 7
            };

            var j1 = new RunJudging(rc, judge, crit, 1, 7M);
            var j2 = new RunJudging(rc, judge, crit, 1, 6M);

            j1.Id = 1;
            j2.Id = 2;

            var result = j1.RunEquals(j2);

            Assert.IsTrue(result);
        }
Beispiel #4
0
 internal static RunJudging SetIdFromObjects(this RunJudging rj)
 {
     rj.JudgeId           = rj.Judge.Id;
     rj.RoundContestantId = rj.RoundContestant.Id;
     rj.CriterionId       = rj.Criterion.Id;
     return(rj);
 }
        public void ReplaceRunJudging_NewItem_Added()
        {
            var crit1 = new JudgingCriterion()
            {
                Id = 5
            };
            var crit2 = new JudgingCriterion()
            {
                Id = 9
            };
            var judge = new Judge()
            {
                Id = 8
            };
            var rc = new RoundContestant()
            {
                Id = 7
            };

            rc.EnsureListsAreInitialized();
            var j1 = new RunJudging()
            {
                Id              = 1,
                Criterion       = crit1,
                Judge           = judge,
                Score           = 7,
                RoundContestant = rc,
                RunNo           = 1
            };

            rc.ReplaceRunJudging(j1);

            Assert.AreEqual(1, rc.RunJudgings.Count);
            Assert.AreSame(j1, rc.RunJudgings.First());
        }
        /// <summary>
        /// Converts list back to a list of RunJudgings -mapping it to the criteria list supplied
        /// </summary>
        /// <param name="orderedCriteriaList">ID-ordered list of Criterias, mapping to the scores by inddex</param>
        /// <returns>List of runJudgings</returns>
        public List <RunJudging> GetAsRunJudgings(List <JudgingCriterion> orderedCriteriaList)
        {
            var list = new List <RunJudging>();

            if (!orderedCriteriaList.AreInRisingOrder(p => p.Id))
            {
                throw new ArgumentException("Criteria list must be ordered by ID because the score list is");
            }
            if (Scores.Count == 0)
            {
                return(list);
            }
            if (orderedCriteriaList.Count != Scores.Count)
            {
                throw new ArgumentException("You must supply as many criterias as there are scores");
            }
            for (int i = 0; i < Scores.Count; i++)
            {
                var rj = new RunJudging()
                {
                    RoundContestantId = RoundContestantId,
                    JudgeId           = JudgeId,
                    RunNo             = RunNo,
                    CriterionId       = orderedCriteriaList[i].Id,
                    Score             = Scores[i]
                };
                list.Add(rj);
            }
            return(list);
        }
Beispiel #7
0
        private static List <RunJudging> MapScoresToCriteria(IEnumerable <JudgingCriterion> criteria, List <RunJudging> scores, long judgeId, int runNo, long rcId)
        {
            var criteriaIds = criteria.OrderBy(p => p.Id).Select(p => p.Id);
            var list        = new List <RunJudging>();

            foreach (var critId in criteriaIds)
            {
                var scoreForCrit = scores.FirstOrDefault(p => p.CriterionId == critId);
                if (scoreForCrit == null) // Create score object with
                {
                    scoreForCrit = new RunJudging
                    {
                        CriterionId       = critId,
                        JudgeId           = judgeId,
                        RunNo             = runNo,
                        RoundContestantId = rcId
                    };
                }
                list.Add(scoreForCrit);
            }
            return(list);
        }
Beispiel #8
0
        /// <summary>
        /// Adds RunJudings with linearly increasing score for all contestants, all runs, all criterias, all judges, in specified round
        /// </summary>
        /// <param name="tourney"></param>
        /// <param name="roundNo">Round number to add for</param>
        /// <returns></returns>
        internal static Tournament WithJudgementsForRound(this Tournament tourney, int roundNo)
        {
            int score          = 1;
            var round          = tourney.GetRoundNo(roundNo);
            var judgementCount = tourney.GetExpectedJudgementCountPerRun();

            foreach (var rc in round.ContestantEntries)
            {
                foreach (var judge in tourney.Judges)
                {
                    for (int runNo = 1; runNo <= round.RunsPerContestant; runNo++)
                    {
                        foreach (var crit in tourney.JudgingCriteria)
                        {
                            var rj = new RunJudging(rc, judge, crit, runNo, score++);
                            rc.ReplaceRunJudging(rj);
                            rc.CalculateTotalScore(judgementCount, round.RunsPerContestant);
                        }
                    }
                }
            }
            return(tourney);
        }
 /// <summary>
 /// Adds or replaces juding for particular run
 /// </summary>
 /// <param name="judging"></param>
 public void ReplaceRunJudging(RunJudging judging)
 {
     RunJudgings.Replace(judging);
     SaveChanges();
 }
        public void IT_PostRunJudgingsFromWeb_FinalizingJudgementOfOneContestant()
        {
            long?id = null;

            try
            {
                var scores        = new ContestantRunViewModel();
                var wrappedScores = new JudgeViewModel();
                // Setup/Act
                using (var db = new NordicArenaDataContext())
                {
                    var tourney = Factory.CreateInitializedTourney();
                    tourney.Contestants.Add(new Contestant("Roger"));
                    tourney.Contestants.Add(new Contestant("Hans"));
                    var judge = new Judge("Dommer");
                    judge.Tournament = tourney;
                    db.Judges.Add(judge);
                    db.Tournaments.Add(tourney);
                    db.SaveChanges();

                    tourney = db.Tournaments.FirstOrDefault(p => p.Id == tourney.Id);
                    tourney.Start();
                    db.SaveChanges();
                    id = tourney.Id;

                    var round1 = tourney.Rounds.FirstOrDefault();
                    round1.RunsPerContestant = 1;
                    var rc1      = round1.ContestantEntries.FirstOrDefault();
                    var critList = tourney.JudgingCriteria.ToList();
                    // Set up scores
                    scores.RoundContestantId = rc1.Id;
                    scores.TournamentId      = tourney.Id;
                    for (int i = 0; i < critList.Count; i++)
                    {
                        var score = new RunJudging();
                        score.CriterionId       = critList[i].Id;
                        score.JudgeId           = judge.Id;
                        score.RoundContestantId = rc1.Id;
                        score.RunNo             = 1;
                        score.Score             = (i + 1);
                        scores.Scores.Add(score);
                    }

                    wrappedScores.Contestants = new List <ContestantRunViewModel>();
                    wrappedScores.Contestants.Add(scores);
                    wrappedScores.Tournament = tourney;
                }
                // Act
                var ctrl = new TournamentJudgeController(null, new EfTournamentService(), ServiceFaker.GetFakeSignalRHub());

                ctrl.JudgeIndex(wrappedScores);
                // Assert
                using (var db = new EfTournamentService())
                {
                    var rc = db.GetRoundContestantGuarded(scores.RoundContestantId);
                    Assert.IsTrue(rc.TotalScore.HasValue);
                }
            }
            catch (DbEntityValidationException exc)
            {
                throw DbValidationExceptionWrapper.Wrap(exc);
            }
            finally
            {
                DatabaseHelper.DeleteTournament(id);
                ServiceFaker.ResetIocContainer();
            }
        }