Exemple #1
0
        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");
        }
Exemple #3
0
        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());
                }
            }
        }
Exemple #4
0
        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");
        }
Exemple #5
0
        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());
        }