コード例 #1
0
        public void MaxScore_Returns3()
        {
            // Arrange
            RankingSet rankingSet = StubRankingsSets.ZeroToThree;

            // Act
            int maxScore = rankingSet.GetMaxScore();

            // Assert
            Assert.AreEqual(3, maxScore);
        }
コード例 #2
0
        public void GetClosestRanking_RankingSetMax3Score5_Returns3()
        {
            // Arrange
            RankingSet rankingSet      = StubRankingsSets.ZeroToThree;
            int        normalizedScore = 5;

            // Act
            KeyValuePair <int, string> closestRanking = rankingSet.GetClosestRanking(normalizedScore);

            // Assert
            Assert.AreEqual(3, closestRanking.Key);
        }
コード例 #3
0
        public void Normalize_RankingMax5ScoreMax5Score3_Returns3()
        {
            // Arrange
            ScoreNormalizer scoreNormalizer = new();
            IScore          score           = new MockScore(3);
            IScore          maxScore        = new MockScore(5);
            RankingSet      rankingSet      = StubRankingsSets.ZeroToFive;

            // Act
            int normalizedScore = scoreNormalizer.Normalize(score, maxScore, rankingSet);

            // Assert
            Assert.AreEqual(3, normalizedScore);
        }
コード例 #4
0
        public void Normalize_RankingMax3ScoreMax10Score4_Returns2()
        {
            // Arrange
            ScoreNormalizer scoreNormalizer = new();
            IScore          score           = new MockScore(4);
            IScore          maxScore        = new MockScore(10);
            RankingSet      rankingSet      = StubRankingsSets.ZeroToThree;

            // Act
            int normalizedScore = scoreNormalizer.Normalize(score, maxScore, rankingSet);

            // Assert
            Assert.AreEqual(2, normalizedScore);
        }
コード例 #5
0
        public void Normalize_RankingMax7ScoreMax3Score2_Returns5()
        {
            // Arrange
            ScoreNormalizer scoreNormalizer = new();
            IScore          score           = new MockScore(2);
            IScore          maxScore        = new MockScore(3);
            RankingSet      rankingSet      = StubRankingsSets.OddsToSeven;

            // Act
            int normalizedScore = scoreNormalizer.Normalize(score, maxScore, rankingSet);

            // Assert
            Assert.AreEqual(5, normalizedScore);
        }
コード例 #6
0
        public int Normalize(
            IScore score,
            IScore maxScore,
            RankingSet rankingSet)
        {
            // We don't want to deal with null, negative, or zero values, return early
            if (rankingSet == null || score == null || score.Score <= 0 || maxScore == null)
            {
                return(0);
            }

            // Normalize Score
            var normalizedScore = (int)Math.Ceiling((double)Math.Min(score.Score, maxScore.Score) / maxScore.Score * rankingSet.GetMaxScore());

            return(normalizedScore);
        }
コード例 #7
0
        public async Task Run()
        {
            StringBuilder      sb = new();
            IRankingSetService rankingSetService = new RankingSetService();

            if (ListRankings || string.IsNullOrEmpty(RankingNameDetails))
            {
                // List all rankings
                string[] rankingSetNames = await rankingSetService.GetRankingSets();

                sb.AppendJoin("\n", rankingSetNames);

                sb.AppendLine();
            }

            if (!string.IsNullOrEmpty(RankingNameDetails))
            {
                RankingSet rankingSet = await rankingSetService.GetRankingSet(RankingNameDetails);

                if (rankingSet.Rankings == null)
                {
                    return;
                }

                if (rankingSet.Rankings.Length > 0)
                {
                    IEnumerable <string>?values = rankingSet
                                                  .Rankings?
                                                  .Select(ranking => $"{ranking.Key} => {ranking.Value}");

                    if (values != null)
                    {
                        sb.AppendJoin("\n", values);
                    }
                }

                sb.AppendLine();
            }

            // Empty string builder to console
            Console.Write(sb);
        }
コード例 #8
0
        public async Task <CheckPasswordResult> Check(
            string password,
            string ruleSetName         = null,
            string rankingSetName      = null,
            bool isCheckHaveIBeenPwned = false)
        {
            RuleSet ruleSet = await this.ruleSetService.GetRuleSet(ruleSetName);

            RankingSet rankingSet = await this.rankingSetService.GetRankingSet(rankingSetName);

            // Test Password
            RuleSetTestResult ruleSetTestResults = ruleSet.Test(password);

            // Normalize Score
            int normalizedScore = this.scoreNormalizer.Normalize(
                ruleSetTestResults.IsSuccess ? ruleSetTestResults : null,
                ruleSet,
                rankingSet);

            // Interpret
            KeyValuePair <int, string>?interpretedRanking = rankingSet.GetClosestRanking(normalizedScore);

            PNDPassword pndPassword = null;

            if (isCheckHaveIBeenPwned)
            {
                // Check if pass has been pwned on the external website
                pndPassword = await this.pndService.HaveIBeenPND(password);
            }

            return(new CheckPasswordResult(
                       score: interpretedRanking?.Key,
                       ranking: interpretedRanking?.Value,
                       rankingSet: rankingSet,
                       ruleSet: ruleSet,
                       isSuccess: ruleSetTestResults.IsSuccess,
                       pndPassword: pndPassword,
                       rulesPassed: ruleSetTestResults.RulesPassed,
                       rulesFailed: ruleSetTestResults.RulesFailed,
                       rulesRecommendations: ruleSetTestResults.RulesRecommendations));
        }
コード例 #9
0
 public CheckPasswordResult(
     int?score,
     string ranking,
     RankingSet rankingSet,
     RuleSet ruleSet,
     bool isSuccess,
     PNDPassword pndPassword,
     Rule[] rulesPassed,
     Rule[] rulesFailed,
     Rule[] rulesRecommendations)
 {
     Score                = score;
     Ranking              = ranking;
     RankingSet           = rankingSet;
     RuleSet              = ruleSet;
     IsSuccess            = isSuccess;
     PNDPassword          = pndPassword;
     RulesPassed          = rulesPassed;
     RulesFailed          = rulesFailed;
     RulesRecommendations = rulesRecommendations;
 }