public void MaxScore_Returns3() { // Arrange RankingSet rankingSet = StubRankingsSets.ZeroToThree; // Act int maxScore = rankingSet.GetMaxScore(); // Assert Assert.AreEqual(3, maxScore); }
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); }
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); }
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); }
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); }
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); }
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); }
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)); }
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; }