public void PASS_CreateRequest()
        {
            MoreLikeThisQuery query = new MoreLikeThisQuery("value");

            Assert.IsNotNull(query);
            Assert.AreEqual("value", query.Query);
        }
        public void PASS_Serialize()
        {
            MoreLikeThisQuery query = new MoreLikeThisQuery(
                new List<string>() { "field1", "field2" },
                "value");

            string json = JsonConvert.SerializeObject(query);
            Assert.IsNotNull(json);
            string expectedJson = "{\"more_like_this\":{\"fields\":[\"field1\",\"field2\"],\"like_text\":\"value\"}}";
            Assert.AreEqual(expectedJson, json);
        }
 public void FAIL_CreateRequest_Query()
 {
     try
     {
         MoreLikeThisQuery query = new MoreLikeThisQuery(null);
         Assert.Fail();
     }
     catch (ArgumentNullException ex)
     {
         Assert.AreEqual("query", ex.ParamName);
     }
 }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Dictionary<string, object> fieldDict = serializer.Deserialize<Dictionary<string, object>>(reader);
            QueryTypeEnum queryType = QueryTypeEnum.FuzzyLikeThis;
            queryType = QueryTypeEnum.Find(fieldDict.First().Key);

            MoreLikeThisBase query = null;

            if (queryType != null)
            {
                fieldDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(fieldDict.First().Value.ToString());
            }

            if (fieldDict.ContainsKey(_LIKE_TEXT))
            {
                query = new MoreLikeThisQuery();
            }
            else
            {
                query = new MoreLikeThisFieldQuery();
                query.Fields = new List<string>() { fieldDict.First().Key };
                fieldDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(fieldDict.First().Value.ToString());
            }

            query.Query = fieldDict.GetString(_LIKE_TEXT);
            query.PercentageTermsToMatch = fieldDict.GetDouble(_PERCENTAGE_TERMS_TO_MATCH, _PERCENTAGE_TERMS_TO_MATCH_DEFAULT);
            query.MinimumTermFrequency = fieldDict.GetInt32(_MINIMUM_TERM_FREQUENCY, _MINIMUM_TERM_FREQUENCY_DEFAULT);
            query.MaximumQueryTerms = fieldDict.GetInt32(_MAXIMUM_QUERY_TERMS, _MAXIMUM_QUERY_TERMS_DEFAULT);
            query.Analyzer = fieldDict.GetStringOrDefault(_ANALYZER);
            query.Boost = fieldDict.GetDouble(QuerySerializer._BOOST, QuerySerializer._BOOST_DEFAULT);
            query.BoostTerms = fieldDict.GetInt32(_BOOST_TERMS, _BOOST_TERMS_DEFAULT);
            query.MaximumDocumentFrequency = fieldDict.GetInt32OrNull(_MAXIMUM_DOCUMENT_FREQUENCY);
            query.MaximumWordLength = fieldDict.GetInt32(_MAXIMUM_WORD_LENGTH, _MAXIMUM_WORD_LENGTH_DEFAULT);
            query.MinimumDocumentFrequency = fieldDict.GetInt32(_MINIMUM_DOCUMENT_FREQUENCY, _MINIMUM_DOCUMENT_FREQUENCY_DEFAULT);
            query.MinimumWordLength = fieldDict.GetInt32(_MINIMUM_WORD_LENGTH, _MINIMUM_WORD_LENGTH_DEFAULT);
            query.QueryName = fieldDict.GetStringOrDefault(QuerySerializer._QUERY_NAME);

            if (fieldDict.ContainsKey(_FIELDS))
                query.Fields = JsonConvert.DeserializeObject<IEnumerable<string>>(fieldDict[_FIELDS].ToString());

            if(fieldDict.ContainsKey(_STOP_WORDS))
                query.StopWords = JsonConvert.DeserializeObject<IEnumerable<string>>(fieldDict[_STOP_WORDS].ToString());

            return query;
        }