Exemple #1
0
        public async Task Unique(string teamName, long teamId, bool expected)
        {
            var team = new TeamEntity {
                Name = teamName, Id = teamId
            };

            _tenantContext.TournamentContext.TeamRuleSet = new TeamRules {
                HomeMatchTime = new HomeMatchTime {
                }
            };
            var tv = new TeamValidator(team, _tenantContext);

            var factResult = await tv.CheckAsync(TeamValidator.FactId.TeamNameIsUnique, CancellationToken.None);

            Assert.Multiple(() =>
            {
                Assert.AreEqual(factResult.Enabled, teamName != null);
                Assert.AreEqual(expected, factResult.Success);
                if (factResult.Enabled && !factResult.Success)
                {
                    Assert.IsTrue(factResult.Message.Contains(teamName ?? string.Empty));
                }
                Assert.IsNull(factResult.Exception);
            });
        }
Exemple #2
0
        public async Task DayOfWeek_Must_Be_In_Range(DayOfWeek?dayOfWeek, bool errorIfNotInRange, bool expected)
        {
            var team = new TeamEntity {
                MatchDayOfWeek = dayOfWeek.HasValue ? (int)dayOfWeek : default(int?)
            };

            _tenantContext.TournamentContext.TeamRuleSet = new TeamRules
            {
                HomeMatchTime = new HomeMatchTime
                {
                    IsEditable = true,
                    MustBeSet  = true,
                    ErrorIfNotInDaysOfWeekRange = errorIfNotInRange,
                    DaysOfWeekRange             = new List <DayOfWeek> {
                        DayOfWeek.Monday, DayOfWeek.Tuesday
                    }
                }
            };
            var tv = new TeamValidator(team, _tenantContext);

            var factResult = await tv.CheckAsync(TeamValidator.FactId.DayOfWeekWithinRange, CancellationToken.None);

            Assert.Multiple(() =>
            {
                Assert.AreEqual(factResult.Enabled, _tenantContext.TournamentContext.TeamRuleSet.HomeMatchTime.IsEditable && _tenantContext.TournamentContext.TeamRuleSet.HomeMatchTime.MustBeSet);
                if (factResult.Enabled)
                {
                    Assert.IsTrue(errorIfNotInRange ? factResult.Type == FactType.Error : factResult.Type == FactType.Warning);
                    Assert.AreEqual(expected, factResult.Success);
                }
                Assert.IsNull(factResult.Exception);
            });
        }
Exemple #3
0
        public async Task DayOfWeek_Must_Be_Set(DayOfWeek?dayOfWeek, bool isEditable, bool mustBeSet, bool expected)
        {
            var team = new TeamEntity {
                MatchDayOfWeek = dayOfWeek.HasValue ? (int)dayOfWeek : default(int?), MatchTime = new TimeSpan(18, 0, 0)
            };

            _tenantContext.TournamentContext.TeamRuleSet = new TeamRules
            {
                HomeMatchTime = new HomeMatchTime
                {
                    IsEditable = isEditable,
                    MustBeSet  = mustBeSet,
                }
            };
            var tv = new TeamValidator(team, _tenantContext);

            var factResult = await tv.CheckAsync(TeamValidator.FactId.DayOfWeekWithinRange, CancellationToken.None);

            Assert.Multiple(() =>
            {
                Assert.AreEqual(factResult.Enabled, isEditable && mustBeSet);
                if (factResult.Enabled)
                {
                    Assert.AreEqual(expected, factResult.Success);
                }
                Assert.IsNull(factResult.Exception);
            });
        }
Exemple #4
0
        public async Task MatchTime_Within_Fixture_TimeLimit(TimeSpan startTime, bool startTimeMustBeSet, bool expected)
        {
            // Note: all times are set and compared to local time

            var team = new TeamEntity();

            _tenantContext.TournamentContext.TeamRuleSet = new TeamRules {
                HomeMatchTime = new HomeMatchTime {
                    IsEditable = true, MustBeSet = startTimeMustBeSet
                }
            };
            _tenantContext.TournamentContext.FixtureRuleSet = new FixtureRuleSet
            {
                RegularMatchStartTime = new RegularMatchStartTime
                {
                    MinDayTime = new TimeSpan(19, 0, 0),
                    MaxDayTime = new TimeSpan(21, 0, 0)
                }
            };
            var tv = new TeamValidator(team, _tenantContext);

            team.MatchTime = startTime;
            var factResult = await tv.CheckAsync(TeamValidator.FactId.MatchTimeWithinRange, CancellationToken.None);

            Assert.Multiple(() =>
            {
                Assert.AreEqual(expected, factResult.IsChecked == startTimeMustBeSet &&
                                factResult.Success && factResult.Message.Contains(_tenantContext.TournamentContext.FixtureRuleSet
                                                                                  .RegularMatchStartTime.MinDayTime.ToShortTimeString()));
                Assert.IsNull(factResult.Exception);
            });
        }
Exemple #5
0
        public async Task MatchTime_Must_Be_Set(TimeSpan?matchTime, bool isEditable, bool mustBeSet, bool expected)
        {
            var team = new TeamEntity {
                MatchTime = matchTime, MatchDayOfWeek = 1
            };

            _tenantContext.TournamentContext.TeamRuleSet = new TeamRules {
                HomeMatchTime = new HomeMatchTime {
                    IsEditable = isEditable, MustBeSet = mustBeSet
                }
            };
            var tv = new TeamValidator(team, _tenantContext);

            var factResult = await tv.CheckAsync(TeamValidator.FactId.MatchDayOfWeekAndTimeIsSet, CancellationToken.None);

            Assert.Multiple(() =>
            {
                Assert.AreEqual(factResult.Enabled, isEditable && mustBeSet);
                if (factResult.Enabled)
                {
                    Assert.AreEqual(matchTime.HasValue, factResult.Success);
                }
                Assert.IsNull(factResult.Exception);
            });
        }
Exemple #6
0
        public async Task TeamName_Must_Not_Be_Empty(string teamName, bool expected)
        {
            var team = new TeamEntity {
                Name = teamName
            };

            _tenantContext.TournamentContext.TeamRuleSet = new TeamRules {
                HomeMatchTime = new HomeMatchTime {
                }
            };
            var tv = new TeamValidator(team, _tenantContext);

            var factResult = await tv.CheckAsync(TeamValidator.FactId.TeamNameIsSet, CancellationToken.None);

            Assert.Multiple(() =>
            {
                Assert.IsTrue(factResult.Enabled);
                Assert.AreEqual(expected, factResult.Success);
                Assert.IsNull(factResult.Exception);
            });
        }
Exemple #7
0
        public async Task <bool> ValidateAsync(TeamValidator teamValidator, long tournamentId, ModelStateDictionary modelState, CancellationToken cancellationToken)
        {
            if (Round.ShowSelector && Round.SelectedRoundId.HasValue)
            {
                var tirValidator = new TeamInRoundValidator(
                    new TeamInRoundEntity {
                    RoundId = Round.SelectedRoundId.Value, TeamId = teamValidator.Model.Id
                },
                    (teamValidator.Data, tournamentId));

                await tirValidator.CheckAsync(cancellationToken);

                foreach (var fact in tirValidator.GetFailedFacts())
                {
                    // validator currently only has one rule
                    if (fact.Id == TeamInRoundValidator.FactId.RoundBelongsToTournament)
                    {
                        modelState.AddModelError(string.Join('.', Round.HtmlFieldPrefix, nameof(Round.SelectedRoundId)),
                                                 fact.Message);
                    }
                }
            }

            await teamValidator.CheckAsync(cancellationToken);

            foreach (var fact in teamValidator.GetFailedFacts())
            {
                if (fact.Exception != null)
                {
                    throw new Exception(null, fact.Exception);
                }

                if (fact.Type == FactType.Critical || fact.Type == FactType.Error)
                {
                    foreach (var fieldName in fact.FieldNames)
                    {
                        modelState.AddModelError(string.Join('.', Team.HtmlFieldPrefix, fieldName), fact.Message);
                    }
                }
                else
                {
                    modelState.AddModelError(string.Empty, fact.Message);
                    // Validator generates FactType.Warning only, if no errors exist
                    IsWarning = true;
                }
            }

            // The Hash is re-calculated with the new submitted values.
            // We have to compare to the original hidden Hash field value,
            // because to override warnings, form fields must be unchanged since last post
            var newHash = ComputeInputHash();

            if (IsWarning && OverrideWarnings && newHash == Hash)
            {
                modelState.Clear();
                IsWarning = false;
            }

            if (!modelState.IsValid)
            {
                // Show checkbox unchecked
                OverrideWarnings = false;
                // Set hash field value to latest form fields content
                Hash = newHash;
            }

            return(modelState.IsValid);
        }