Exemplo n.º 1
0
        public ScItem(
            ItemSource Source,
            string DisplayName,
            bool HasChildren,
            string Id,
            string LongId,
            string Path,
            string Template,
            Dictionary <string, ScField> FieldsByName)
        {
            this.Source      = Source;
            this.DisplayName = DisplayName;
            this.HasChildren = HasChildren;
            this.Id          = Id;
            this.LongId      = LongId;
            this.Path        = Path;
            this.Template    = Template;

            this.FieldsByName = new Dictionary <string, IField>();
            foreach (KeyValuePair <string, ScField> keyValuePair in FieldsByName)
            {
                this.FieldsByName.Add(keyValuePair.Key, (IField)keyValuePair.Value);
            }

//      this.FieldsByName = FieldsByName.ToDictionary(item => item.Key, item => (IField)item.Value);

            int fieldsCount = FieldsByName.Count;

            IField[] fields = new IField[fieldsCount];
            this.FieldsByName.Values.CopyTo(fields, 0);
            this.Fields = fields;
        }
    public void TestItemSourceDatabaseIsOptional()
    {
      var result = new ItemSource(null, "en", 1);

      Assert.IsNotNull(result);
      Assert.IsNull(result.Database);
    }
    public ISitecoreWebApiSession BuildSession()
    {
      string optionalWebApiVersion = this.OptionalWebApiVersion();
      string optionalMediaRoot = this.OptionalMediaRoot();
      string optionalMediaExtension = this.OptionalMediaExtension();
      string optionalMediaPrefix = this.OptionalMediaPrefix();


      ////////
      SessionConfig conf = new SessionConfig(
        this.instanceUrl,
        this.site,
        optionalWebApiVersion);

      var mediaSettings = new MediaLibrarySettings(
        optionalMediaRoot,
        optionalMediaExtension,
        optionalMediaPrefix,
        this.resizingFlag);

      var itemSource = new ItemSource(
        this.itemSourceAccumulator.Database,
        this.itemSourceAccumulator.Language,
        this.itemSourceAccumulator.VersionNumber);

      var result = new ScApiSession(conf, this.credentials, mediaSettings, itemSource);
      return result;
    }
    public void TestItemSourceLanguageIsOptional()
    {
      var result = new ItemSource("master", null, 1);

      Assert.IsNotNull(result);
      Assert.IsNull(result.Language);
    }
    public ScApiSession(
      ISessionConfig config,
      IWebApiCredentials credentials,
      IMediaLibrarySettings mediaSettings,
      ItemSource defaultSource = null,
      HttpMessageHandler httpMessageHandler = null)
    {
      if (null == config)
      {
        throw new ArgumentNullException("ScApiSession.config cannot be null");
      }

      this.sessionConfig = config.SessionConfigShallowCopy();
      this.requestMerger = new UserRequestMerger(this.sessionConfig, defaultSource);

      if (null != credentials)
      {
        this.credentials = credentials.CredentialsShallowCopy();
      }

      if (null != mediaSettings)
      {
        this.mediaSettings = mediaSettings.MediaSettingsShallowCopy();
      }

      this.httpClient = httpMessageHandler == null ? new HttpClient() : new HttpClient(httpMessageHandler);
    }
    public void TestUrlBuilderExcapesArgs()
    {
      ItemSource data = new ItemSource("{master}", "da???", 123);
      ItemSourceUrlBuilder builder = new ItemSourceUrlBuilder(RestServiceGrammar.ItemWebApiV2Grammar(), WebApiUrlParameters.ItemWebApiV2UrlParameters(), data);

      string expected = "sc_database=%7bmaster%7d&language=da%3f%3f%3f&sc_itemversion=123";
      Assert.AreEqual(expected, builder.BuildUrlQueryString());
    }
    public void TestSerializationSupportsVersion()
    {
      ItemSource data = new ItemSource("master", "da", 100500);
      ItemSourceUrlBuilder builder = new ItemSourceUrlBuilder(RestServiceGrammar.ItemWebApiV2Grammar(), WebApiUrlParameters.ItemWebApiV2UrlParameters(), data);

      string expected = "sc_database=master&language=da&sc_itemversion=100500";
      Assert.AreEqual(expected, builder.BuildUrlQueryString());
    }
 public ScTestApiSession(
   ISessionConfig config,
   IWebApiCredentials credentials,
   IMediaLibrarySettings mediaSettings,
   ItemSource defaultSource = null) :
   base(config, credentials, mediaSettings, defaultSource)
 {
   this.GetPublicKeyInvocationsCount = 0;
 }
    public async void TestGetItemWithDefaultDbLanguageAndVersion()
    {
      var response = await this.GetItemByIdWithItemSource(LegacyConstants.DefaultSource());
      const string Db = "web";
      const string Language = "en";
      const int Version = 2;
      testData.AssertItemsCount(1, response);
      var resultItem = response[0];
      testData.AssertItemsAreEqual(testData.Items.ItemWithVersions, resultItem);

      var source = new ItemSource(Db, Language, Version);
      testData.AssertItemSourcesAreEqual(source, resultItem.Source);
      Assert.AreEqual("English version 2 web", resultItem["Title"].RawValue);
    }
    public async void TestGetItemWithNotExistentLanguage()
    {
      const string Db = "web";
      const string Language = "da";
      var itemSource = new ItemSource(Db, Language, 1);
      using
      (
        var session = this.CreateAdminSession(itemSource)
      )
      {
        var response = await this.GetHomeItem(session);

        testData.AssertItemsCount(1, response);
        ISitecoreItem resultItem = response[0];
        Assert.AreEqual(testData.Items.Home.Id, resultItem.Id);
        testData.AssertItemSourcesAreEqual(itemSource, resultItem.Source);
        Assert.AreEqual("", resultItem["Title"].RawValue);
      }
    }
    public async void TestGetItemWithDbLanguageAndVersionFromSession()
    {
      const string Db = "web";
      const string Language = "da";
      const int Version = 1;
      var itemSource = new ItemSource(Db, Language, Version);
      var response = await this.GetItemByIdWithItemSource(itemSource);

      testData.AssertItemsCount(1, response);
      var resultItem = response[0];
      testData.AssertItemsAreEqual(testData.Items.ItemWithVersions, resultItem);

      var source = new ItemSource(Db, Language, Version);
      testData.AssertItemSourcesAreEqual(source, resultItem.Source);
      Assert.AreEqual("Danish version 2 web", resultItem["Title"].RawValue);
      Assert.AreEqual(Db, resultItem.Source.Database);
      Assert.AreEqual(Version, resultItem.Source.VersionNumber.Value);
      Assert.AreEqual(Language, resultItem.Source.Language);
    }
    private ISitecoreWebApiReadonlySession CreateAdminSession(ItemSource itemSource = null)
    {
      var builder =
        SitecoreWebApiSessionBuilder.AuthenticatedSessionWithHost(testData.InstanceUrl)
          .Credentials(this.testData.Users.Admin);

      if (null != itemSource)
      {
        builder.DefaultDatabase(itemSource.Database).DefaultLanguage(itemSource.Language);
      }

      var session = builder.BuildReadonlySession();
      return session;
    }
    public async void TestOverrideDatabaseInRequestByPath()
    {
      const string Db = "master";

      var requestBuilder = ItemWebApiRequestBuilder.ReadItemsRequestWithPath(testData.Items.ItemWithVersions.Path);
      var request = requestBuilder.Database(Db).Build();
      var response = await sessionAuthenticatedUser.ReadItemAsync(request);

      testData.AssertItemsCount(1, response);
      var resultItem = response[0];

      var expectedSource = new ItemSource(Db, LegacyConstants.DefaultSource().Language, 2);
      testData.AssertItemsAreEqual(testData.Items.ItemWithVersions, resultItem);
      testData.AssertItemSourcesAreEqual(expectedSource, resultItem.Source);
    }
    public async void TestGetItemWithDbLanguageAndVersionFromRequest()
    {
      const string Db = "master";
      const string Language = "da";
      const int Version = 1;

      var request = ItemWebApiRequestBuilder.ReadItemsRequestWithId(testData.Items.ItemWithVersions.Id)
        .Database(Db)
        .Language(Language)
        .Version(Version)
        .Payload(PayloadType.Content)
        .Build();
      var response = await sessionAuthenticatedUser.ReadItemAsync(request);

      testData.AssertItemsCount(1, response);
      var resultItem = response[0];
      testData.AssertItemsAreEqual(testData.Items.ItemWithVersions, resultItem);
      var source = new ItemSource(Db, Language, Version);
      testData.AssertItemSourcesAreEqual(source, resultItem.Source);
      Assert.AreEqual("Danish version 1 master", resultItem["Title"].RawValue);
    }
    private async Task<ScItemsResponse> GetItemByIdWithItemSource(ItemSource itemSource)
    {
      var session = SitecoreWebApiSessionBuilder.AuthenticatedSessionWithHost(testData.InstanceUrl)
        .Credentials(testData.Users.Admin)
        .DefaultLanguage(itemSource.Language)
        .DefaultDatabase(itemSource.Database)
        .BuildReadonlySession();

      IReadItemsByIdRequest request = null;

      if (null == itemSource.VersionNumber)
      {
        request = this.requestWithItemId;
      }
      else
      {
        request = ItemWebApiRequestBuilder.ReadItemsRequestWithId(testData.Items.ItemWithVersions.Id)
        .Payload(PayloadType.Content)
        .Version(itemSource.VersionNumber.Value)
        .Build();
      }

      var response = await session.ReadItemAsync(request);
      return response;
    }
    public async void TestGetItemByQueryWithCorrectField()
    {
      var requestBuilder = ItemWebApiRequestBuilder.ReadItemsRequestWithSitecoreQuery("/sitecore//*[@Title='English version 2 web']");
      var request = requestBuilder.Payload(PayloadType.Content).Build();
      var response = await sessionAuthenticatedUser.ReadItemAsync(request);

      testData.AssertItemsCount(1, response);
      var resultItem = response[0];
      var expectedSource = new ItemSource(LegacyConstants.DefaultSource().Database, LegacyConstants.DefaultSource().Language, 2);
      testData.AssertItemsAreEqual(testData.Items.ItemWithVersions, resultItem);
      testData.AssertItemSourcesAreEqual(expectedSource, resultItem.Source);
    }
    public async void TestOverrideLanguageInRequestByQuery()
    {
      const string Language = "da";

      var requestBuilder = ItemWebApiRequestBuilder.ReadItemsRequestWithSitecoreQuery("/sitecore/content/Home/*");
      var request = requestBuilder
        .Language(Language)
        .Build();
      var response = await sessionAuthenticatedUser.ReadItemAsync(request);

      testData.AssertItemsCount(4, response);
      var resultItem = response[3];
      var expectedSource = new ItemSource(LegacyConstants.DefaultSource().Database, Language, 1);
      testData.AssertItemSourcesAreEqual(expectedSource, resultItem.Source);
    }
    public void TestItemVersionIsOptionalForItemSource()
    {
      var result = new ItemSource ("core", "da", null);

      Assert.IsNotNull(result);
      Assert.IsNull(result.VersionNumber);
    }
    public async void TestGetItemWithInvalidLanguage()
    {
      const string Db = "web";
      const string Language = "#%^^&";

      var itemSource = new ItemSource(Db, Language);
      using
      (
        var session = this.CreateAdminSession(itemSource)
      )
      {
        var response = await session.ReadItemAsync(this.requestWithVersionsItemId);

        testData.AssertItemsCount(1, response);
        ISitecoreItem resultItem = response[0];
        testData.AssertItemsAreEqual(testData.Items.ItemWithVersions, resultItem);

        var expectedSource = new ItemSource(Db, "en", 2);
        testData.AssertItemSourcesAreEqual(expectedSource, resultItem.Source);
        Assert.AreEqual("English version 2 web", resultItem["Title"].RawValue);
      }
    }
    public void TestGetItemWithInvalidDbReturnsException()
    {
      const string Db = "@#er$#";
      const string Language = "da";
      var itemSource = new ItemSource(Db, Language);
      using
      (
        var session = this.CreateAdminSession(itemSource)
      )
      {
        TestDelegate testCode = async () =>
        {
          var task = session.ReadItemAsync(this.requestWithVersionsItemId);
          await task;
        };
        Exception exception = Assert.Throws<ParserException>(testCode);

        Assert.AreEqual("[Sitecore Mobile SDK] Data from the internet has unexpected format", exception.Message);
        Assert.AreEqual("Sitecore.MobileSDK.API.Exceptions.WebApiJsonErrorException", exception.InnerException.GetType().ToString());
        Assert.True(exception.InnerException.Message.Contains("Could not find configuration node: databases/database[@id='" + Db + "']"));
      }
    }
    public async void TestOverrideVersionAndDbInRequestById()
    {
      const string Db = "master";
      const string Language = "en";
      const int Version = 2;
      var source = new ItemSource("web", Language, 1);

      var session = SitecoreWebApiSessionBuilder.AuthenticatedSessionWithHost(testData.InstanceUrl)
        .Credentials(testData.Users.Admin)
        .DefaultDatabase(source.Database)
        .DefaultLanguage(source.Language)
        .BuildReadonlySession();

      var request = ItemWebApiRequestBuilder.ReadItemsRequestWithId(testData.Items.ItemWithVersions.Id)
        .Version(Version)
        .Database(Db)
        .Payload(PayloadType.Content)
        .Build();
      var response = await session.ReadItemAsync(request);

      testData.AssertItemsCount(1, response);
      var resultItem = response[0];
      testData.AssertItemsAreEqual(testData.Items.ItemWithVersions, resultItem);
      var sourceExpected = new ItemSource(Db, Language, Version);
      testData.AssertItemSourcesAreEqual(sourceExpected, resultItem.Source);
      Assert.AreEqual("English version 2 master", resultItem["Title"].RawValue);
    }