public IList <Anagram> GetAnagrams(string word, string ipAddress) { var freeSearchesCount = Convert.ToInt32(_appConfig.GetConfiguration()["FreeSearchesCount"]); var user = _usersRepository .GetUsers() .FirstOrDefault(u => u.Ip == ipAddress); if (user == null) { _usersRepository.AddUser(new User { Ip = ipAddress }); user = _usersRepository .GetUsers() .FirstOrDefault(u => u.Ip == ipAddress); } if (user.SearchesLeft > 0) { return(_anagramSolver.GetAnagrams(word, user)); } throw new Exception("You exceeded free searched limit, please add new word"); }
public void GetWordsForSearch_ReturnsAllWordsThatAreEligibleForAnagramSearch() { _appConfig.GetConfiguration() .GetSection("ConstantValues")["MinWordLength"] .Returns("2"); _wordsRepository.GetWords().Returns(new List <Word> { new Word { Id = 1, Text = "Lvbds" }, new Word { Id = 2, Text = "Vidas" }, new Word { Id = 3, Text = "Sabal" }, new Word { Id = 4, Text = "vaida" }, new Word { Id = 5, Text = "Lvbdr" }, }); var wordsResult = _wordsService.GetWordsForSearch("Labas Vaida"); _wordsRepository.Received(1).GetWords(); wordsResult.ShouldNotBeNull(); wordsResult.Count.ShouldBe(4); wordsResult.First().Text.ShouldBe("Lvbds"); wordsResult.Last().Text.ShouldBe("vaida"); wordsResult.ElementAt(1).Text.ShouldBe("Vidas"); wordsResult.ElementAt(2).Text.ShouldBe("Sabal"); }
public IEnumerable <Word> SearchWords(string phrase) { var minWordLen = Convert.ToInt32(_appConfig.GetConfiguration() .GetSection("ConstantValues")["MinWordLength"]); using (var command = new SqlCommand("GetSearchWords", _connection) { CommandType = CommandType.StoredProcedure }) { command.Parameters.AddWithValue("@phrase", phrase); command.Parameters.AddWithValue("@minLen", minWordLen); command.Connection.Open(); using (var reader = command.ExecuteReader()) { var searchWords = new List <Word>(); while (reader.Read()) { searchWords.Add(new Word { Text = reader.GetString(1) }); } command.Connection.Close(); return(searchWords .Where(w => phrase.GetSearchWord(w.Text) != phrase) .OrderByDescending(w => w.Text.Length).ToList()); } } }
public void GetAnagrams_ReturnsAllAnagramsForAWord() { _appConfig.GetConfiguration()["FreeSearchesCount"].Returns("5"); _usersRepository.GetUsers().Returns(new List <User> { new User { Id = 1, Ip = "::1", SearchesLeft = 5 }, new User { Id = 2, Ip = "::2", SearchesLeft = 4 }, new User { Id = 3, Ip = "::3", SearchesLeft = 3 }, new User { Id = 4, Ip = "::4", SearchesLeft = 2 } }); _anagramSolver.GetAnagrams(Arg.Is <string>("Dievas"), Arg.Is <User>(_usersRepository.GetUsers().First())) .Returns(new List <Anagram> { new Anagram { Id = 1, Text = "veidas" }, new Anagram { Id = 1, Text = "deivas" }, new Anagram { Id = 1, Text = "viedas" } }); var anagrams = _anagramsService.GetAnagrams("Dievas", "::1"); _usersRepository.Received(2).GetUsers(); _anagramSolver.Received(1).GetAnagrams(Arg.Is <string>("Dievas"), Arg.Is <User>(_usersRepository.GetUsers().First())); anagrams.ShouldNotBeNull(); anagrams.Count.ShouldBe(3); anagrams.ElementAt(0).Text.ShouldBe("veidas"); anagrams.ElementAt(1).Text.ShouldBe("deivas"); anagrams.ElementAt(2).Text.ShouldBe("viedas"); }
public void Seed() { var dictionaryFilePath = _appConfig .GetConfiguration()["DictionaryFilePath"]; var dictionaryData = _wordLoader .LoadFromFile(dictionaryFilePath) .DistinctBy(dd => dd.Text.ToLower().Trim()) .OrderBy(dd => dd.Text) .ToArray(); _wordsRepository.AddWords(dictionaryData); }
public IList <Word> GetWordsForSearch(string phrase) { var minWordLen = Convert.ToInt32(_appConfig .GetConfiguration() .GetSection("ConstantValues")["MinWordLength"]); return(_wordsRepository.GetWords() .Where(w => w.Text.Length <= phrase.Length && w.Text.Length >= minWordLen && phrase.GetSearchWord(w.Text) != phrase) .OrderByDescending(w => w.Text.Length) .ToList()); }