public virtual IReadItemsByQueryRequest DeepCopyGetItemByQueryRequest()
        {
            ++this.CopyInvocationCount;

            MockGetItemsByQueryParameters result = new MockGetItemsByQueryParameters();

            result.SitecoreQuery = this.SitecoreQuery;

            if (null != this.ItemSource)
            {
                result.ItemSource = this.ItemSource.ShallowCopy();
            }

            if (null != this.SessionSettings)
            {
                result.SessionSettings = this.SessionSettings.SessionConfigShallowCopy();
            }

            if (null == this.QueryParameters)
            {
                result.QueryParameters = this.QueryParameters.DeepCopy();
            }

            return(result);
        }
    public void TestBuildWithFastQuery()
    {
      MockGetItemsByQueryParameters mutableParameters = new MockGetItemsByQueryParameters ();
      mutableParameters.ItemSource = LegacyConstants.DefaultSource();
      mutableParameters.SitecoreQuery = "fast:/sitecore/content/Home/Products/*[@@name = 'Hammer']";
      mutableParameters.SessionSettings = this.sessionConfig;
      mutableParameters.QueryParameters = this.payload;

      IReadItemsByQueryRequest request = mutableParameters;

      string result = this.builder.GetUrlForRequest(request);
      string expected = "http://mobiledev1ua1.dk.sitecore.net:722/-/item/v13?sc_database=web&language=en&payload=full&query=fast%3a%2fsitecore%2fcontent%2fHome%2fProducts%2f%2a%5b%40%40name%20%3d%20%27Hammer%27%5d";

      Assert.AreEqual(expected, result);
    }
    public void TestNullPayloadStructIsIgnored()
    {
      MockGetItemsByQueryParameters mutableParameters = new MockGetItemsByQueryParameters ();
      mutableParameters.ItemSource = LegacyConstants.DefaultSource();
      mutableParameters.SitecoreQuery = "/Sitecore/Content/*";
      mutableParameters.SessionSettings = this.sessionConfig;
      mutableParameters.QueryParameters = null;

      IReadItemsByQueryRequest request = mutableParameters;

      string result = this.builder.GetUrlForRequest(request);
      string expected = "http://mobiledev1ua1.dk.sitecore.net:722/-/item/v13?sc_database=web&language=en&query=%2fSitecore%2fContent%2f%2a";

      Assert.AreEqual(expected, result);
    }
    public virtual IReadItemsByQueryRequest DeepCopyGetItemByQueryRequest()
    {
      ++this.CopyInvocationCount;

      MockGetItemsByQueryParameters result = new MockGetItemsByQueryParameters();
      result.SitecoreQuery = this.SitecoreQuery;

      if (null != this.ItemSource)
      {
        result.ItemSource = this.ItemSource.ShallowCopy();
      }

      if (null != this.SessionSettings)
      {
        result.SessionSettings = this.SessionSettings.SessionConfigShallowCopy();
      }

      if (null == this.QueryParameters)
      {
        result.QueryParameters = this.QueryParameters.DeepCopy();
      }

      return result;
    }
    public async void TestItemByQueryRequestMutationDoesNotAffectSession()
    {
      string homePath = "/sitecore/content/home";

      IQueryParameters payload = new QueryParameters(PayloadType.Min, null, null);

      MockGetItemsByQueryParameters mockMutableRequest = new MockGetItemsByQueryParameters();
      mockMutableRequest.SitecoreQuery = homePath;
      mockMutableRequest.QueryParameters = payload;
      mockMutableRequest.ItemSource = this.itemSource;

      try
      {
        Task<ScItemsResponse> loadItemsTask = this.session.ReadItemAsync(mockMutableRequest);
        //      await Task.Factory.StartNew(() => mockMutableRequest.SitecoreQuery = "/sitecore/content/media library");
        ScItemsResponse response = await loadItemsTask;
        var item = response[0];
        Assert.AreEqual(homePath.ToLowerInvariant(), item.Path.ToLowerInvariant());
      }
      catch (LoadDataFromNetworkException)
      {
        //IDLE
      }
      finally
      {
        Assert.AreEqual(1, this.itemSource.CopyInvocationCount);
        Assert.AreEqual(1, mockMutableRequest.CopyInvocationCount);
      }
    }
    public void TestDuplicateFieldsWithDifferentCaseCauseException()
    {
      var mutableParameters = new MockGetItemsByQueryParameters();
      mutableParameters.SessionSettings = this.sessionConfig;
      mutableParameters.ItemSource = LegacyConstants.DefaultSource();
      mutableParameters.SitecoreQuery = "/aaa/bbb/ccc/*";


      string[] fields = { "x", "y", "X" };
      IQueryParameters duplicatedFields = new QueryParameters(null, null, fields);
      mutableParameters.QueryParameters = duplicatedFields;


      IReadItemsByQueryRequest parameters = mutableParameters;
      Assert.Throws<ArgumentException>(() =>this.builder.GetUrlForRequest(parameters));
    }
    public void TestQueryCannotBeWhitespace()
    {
      MockGetItemsByQueryParameters mutableParameters = new MockGetItemsByQueryParameters ();
      mutableParameters.ItemSource = LegacyConstants.DefaultSource();
      mutableParameters.SitecoreQuery = "   \t \r \n   ";
      mutableParameters.SessionSettings = this.sessionConfig;
      mutableParameters.QueryParameters = this.payload;

      IReadItemsByQueryRequest request = mutableParameters;

      Assert.Throws<ArgumentException> (() => this.builder.GetUrlForRequest (request));
    }