public async void TestCreateItemByPathWithSpecifiedFields()
        {
            await this.RemoveAll();

            var expectedItem = this.CreateTestItem("Create with fields");

            const string CreatedTitle = "Created title";
            const string CreatedText  = "Created text";
            var          request      = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                                        .ItemTemplatePath(testData.Items.Home.Template)
                                        .ItemName(expectedItem.DisplayName)
                                        .Database("master")
                                        .AddFieldsRawValuesByNameToSet("Title", CreatedTitle)
                                        .AddFieldsRawValuesByNameToSet("Text", CreatedText)
                                        .AddFieldsToRead("Text", "Title")
                                        .Build();

            var createResponse = await session.CreateItemAsync(request);

            var resultItem = this.CheckCreatedItem(createResponse, expectedItem);

            Assert.AreEqual(CreatedTitle, resultItem["Title"].RawValue);
            Assert.AreEqual(CreatedText, resultItem["Text"].RawValue);

            this.GetAndCheckItem(expectedItem, resultItem);
        }
        public async void TestCreateItemByPathFromBranch()
        {
            await this.RemoveTestItemsFromMasterAndWebAsync();

            const string ItemFromBranchName = "Multiple item branch";

            TestEnvironment.Item expectedItem = this.CreateTestItem(ItemFromBranchName);

            var request = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                          .BranchId("{14416817-CDED-45AF-99BF-2DE9883B7AC3}")
                          .ItemName(ItemFromBranchName)
                          .Database("master")
                          .Language("en")
                          .Payload(PayloadType.Content)
                          .Build();

            var createResponse = await session.CreateItemAsync(request);

            this.testData.AssertItemsCount(1, createResponse);

            ISitecoreItem resultItem = createResponse[0];

            this.testData.AssertItemsAreEqual(expectedItem, resultItem);


            var readJustCreatedItemRequest = ItemWebApiRequestBuilder.ReadItemsRequestWithId(resultItem.Id)
                                             .Database("master")
                                             .Build();
            var readJustCreatedItemResponse = await this.session.ReadItemAsync(readJustCreatedItemRequest);

            this.testData.AssertItemsCount(1, readJustCreatedItemResponse);
            this.testData.AssertItemsAreEqual(expectedItem, readJustCreatedItemResponse[0]);
        }
        public async void TestCreateItemByPathWithDatabaseAndLanguageInSession()
        {
            await this.RemoveAll();

            const string Db           = "web";
            const string Language     = "da";
            var          expectedItem = this.CreateTestItem("Create danish version in web from session");

            var adminSession =
                SitecoreWebApiSessionBuilder.AuthenticatedSessionWithHost(testData.InstanceUrl)
                .Credentials(testData.Users.Admin)
                .Site(testData.ShellSite)
                .DefaultDatabase(Db)
                .DefaultLanguage(Language)
                .BuildSession();

            var request = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(testData.Items.CreateItemsHere.Path)
                          .ItemTemplatePath(expectedItem.Template)
                          .ItemName(expectedItem.DisplayName)
                          .Build();

            var createResponse = await adminSession.CreateItemAsync(request);

            var resultItem = this.CheckCreatedItem(createResponse, expectedItem);

            Assert.AreEqual(Db, resultItem.Source.Database);
            Assert.AreEqual(Language, resultItem.Source.Language);
        }
        public async void TestCreateItemByPathFromUnknownBranchCausesException()
        {
            await this.RemoveTestItemsFromMasterAndWebAsync();

            const string ItemFromBranchName = "ITEM PATH   A default name of the branch should be used";
            //      const string itemFromBranchName = "Multiple item brunch";

            var request = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                          .BranchId(NonExistingGuid)
                          .ItemName(ItemFromBranchName)
                          .Database("master")
                          .Language("en")
                          .Payload(PayloadType.Content)
                          .Build();

            var ex = Assert.Throws <ParserException>(async() =>
            {
                await session.CreateItemAsync(request);
            });


            Assert.AreEqual("Sitecore.MobileSDK.API.Exceptions.WebApiJsonErrorException", ex.InnerException.GetType().FullName);
            var castedException = ex.InnerException as WebApiJsonErrorException;

            Assert.AreEqual(500, castedException.Response.StatusCode);
            Assert.AreEqual("Template item not found.", castedException.Response.Message);
        }
        public void TestItemNameAndFieldNameIsCaseInsensitive()
        {
            ICreateItemByPathRequest request = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath("/sitecore/content/home")
                                               .ItemTemplatePath("/Sample/Sample Item")
                                               .ItemName("ItEmNaMe")
                                               .AddFieldsRawValuesByNameToSet("field1", "VaLuE1")
                                               .AddFieldsRawValuesByNameToSet("field2", "VaLuE2")
                                               .Build();

            ICreateItemByPathRequest autocompletedRequest = this.requestMerger.FillCreateItemByPathGaps(request);

            string result   = this.builder.GetUrlForRequest(autocompletedRequest);
            string expected = "http://mobiledev1ua1.dk.sitecore.net:7119/-/item/v234%2fsitecore%2fshell%2f"
                              + "sitecore%2fcontent%2fhome"
                              + "?sc_database=web"
                              + "&language=en"
                              + "&template=sample%2fsample%20item"
                              + "&name=ItEmNaMe";

            string fieldsResult         = this.builder.GetFieldValuesList(autocompletedRequest);
            string expectedFieldsResult = "field1=VaLuE1&field2=VaLuE2";

            Assert.AreEqual(expected, result);
            Assert.AreEqual(expectedFieldsResult, fieldsResult);
        }
        public void TestFieldsAppending()
        {
            Dictionary <string, string> fields = new Dictionary <string, string>();

            fields.Add("field1", "VaLuE1");
            fields.Add("field2", "VaLuE2");

            ICreateItemByPathRequest request = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath("/sitecore/content/home")
                                               .ItemTemplatePath("/Sample/Sample Item")
                                               .ItemName("ItEmNaMe")
                                               .Database("db")
                                               .Language("lg")
                                               .Payload(PayloadType.Full)
                                               .AddFieldsRawValuesByNameToSet(fields)
                                               .AddFieldsRawValuesByNameToSet("field3", "VaLuE3")
                                               .Build();

            ICreateItemByPathRequest autocompletedRequest = this.requestMerger.FillCreateItemByPathGaps(request);

            string result   = this.builder.GetUrlForRequest(autocompletedRequest);
            string expected =
                "http://mobiledev1ua1.dk.sitecore.net:7119/-/item/v234%2fsitecore%2fshell%2"
                + "fsitecore%2fcontent%2fhome"
                + "?sc_database=db"
                + "&language=lg"
                + "&payload=full"
                + "&template=sample%2fsample%20item"
                + "&name=ItEmNaMe";

            string fieldsResult         = this.builder.GetFieldValuesList(autocompletedRequest);
            string expectedFieldsResult = "field1=VaLuE1&field2=VaLuE2&field3=VaLuE3";

            Assert.AreEqual(expected, result);
            Assert.AreEqual(expectedFieldsResult, fieldsResult);
        }
        public void TestCreateItemByPathWithNullItemNameReturnsException()
        {
            var exception = Assert.Throws <ArgumentNullException>(() => ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                                                                  .ItemTemplatePath(testData.Items.Home.Template)
                                                                  .ItemName(null)
                                                                  .Build());

            Assert.IsTrue(exception.Message.Contains("CreateItemByPathRequestBuilder.ItemName"));
        }
        public void TestCreateItemByPathWithSpacesOnlyInTemplateIdReturnsException()
        {
            Exception exception = Assert.Throws <ArgumentException>(() => ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                                                                    .ItemTemplateId("   ")
                                                                    .ItemName("Item with empty template")
                                                                    .Build());

            Assert.AreEqual("CreateItemByPathRequestBuilder.ItemTemplate : The input cannot be empty.", exception.Message);
        }
        public void TestCreateItemByNullPathReturnsException()
        {
            Exception exception = Assert.Throws <ArgumentNullException>(() => ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(null)
                                                                        .ItemTemplatePath("Some template")
                                                                        .ItemName("Item with null parent path")
                                                                        .Build());

            Assert.IsTrue(exception.Message.Contains("CreateItemByPathRequestBuilder.ItemPath"));
        }
        public void TestCreateItemWithSpacesOnlyInPathReturnsException()
        {
            Exception exception = Assert.Throws <ArgumentException>(() => ItemWebApiRequestBuilder.CreateItemRequestWithParentPath("  ")
                                                                    .ItemTemplatePath("Some template")
                                                                    .ItemName("Item with empty parent path")
                                                                    .Build());

            Assert.AreEqual("CreateItemByPathRequestBuilder.ItemPath : The input cannot be empty.", exception.Message);
        }
        public void TestCreateItemByPathWithNullLanguageDoNotReturnsException()
        {
            var request = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(testData.Items.Home.Path)
                          .ItemTemplatePath("Some template")
                          .ItemName("Item with null language")
                          .Language(null)
                          .Build();

            Assert.IsNotNull(request);
        }
        public void TestCreateItemByPathAndSetDuplicateFieldsReturnsException()
        {
            const string FieldName  = "Text";
            const string FieldValue = "Duplicate value";

            var exception = Assert.Throws <InvalidOperationException>(() => ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                                                                      .ItemTemplatePath(testData.Items.Home.Template)
                                                                      .ItemName("Set duplicate fields")
                                                                      .AddFieldsRawValuesByNameToSet(FieldName, FieldValue)
                                                                      .AddFieldsRawValuesByNameToSet(FieldName, FieldValue));

            Assert.AreEqual("CreateItemByPathRequestBuilder.FieldsRawValuesByName : duplicate fields are not allowed", exception.Message);
        }
Esempio n. 13
0
        private async Task <ISitecoreItem> CreateItem(string itemName, ISitecoreItem parentItem = null, ISitecoreWebApiSession itemSession = null)
        {
            if (itemSession == null)
            {
                itemSession = session;
            }
            string parentPath = parentItem == null ? this.testData.Items.CreateItemsHere.Path : parentItem.Path;
            var    request    = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(parentPath)
                                .ItemTemplatePath(testData.Items.Home.Template)
                                .ItemName(itemName)
                                .Build();
            var createResponse = await itemSession.CreateItemAsync(request);

            Assert.AreEqual(1, createResponse.ResultCount);
            return(createResponse[0]);
        }
        public void TestCreateItemByPathWithInvalidItemTemplateReturnsException()
        {
            const string Template = "@*<<%#==_&@";
            var          request  = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                                    .ItemTemplatePath(Template)
                                    .ItemName("item with invalid template")
                                    .Database("master")
                                    .Build();

            TestDelegate testCode = async() =>
            {
                var   task = session.CreateItemAsync(request);
                await task;
            };
            var 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.AreEqual("Template item not found.", exception.InnerException.Message);
        }
        public void TestCreateItemByIdWithInvalidItemNameReturnsException()
        {
            const string ItemName = "@*<<%#==_&@";
            var          request  = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                                    .ItemTemplatePath(testData.Items.Home.Template)
                                    .ItemName(ItemName)
                                    .Database("master")
                                    .Build();

            TestDelegate testCode = async() =>
            {
                var   task = session.CreateItemAsync(request);
                await task;
            };
            var 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.AreEqual("An item name cannot contain any of the following characters: \\/:?\"<>|[] (controlled by the setting InvalidItemNameChars)", exception.InnerException.Message);
        }
        private async void SendRequest()
        {
            try
            {
                using (var session = this.instanceSettings.GetSession())
                {
                    var request = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.pathField.Text)
                                  .ItemTemplatePath("Sample/Sample Item")
                                  .ItemName(this.nameField.Text)
                                  .AddFieldsRawValuesByNameToSet("Title", titleField.Text)
                                  .AddFieldsRawValuesByNameToSet("Text", textField.Text)
                                  .Build();

                    this.ShowLoader();

                    ScItemsResponse response = await session.CreateItemAsync(request);

                    if (response.Any())
                    {
                        ISitecoreItem item = response[0];
                        this.CreatedItemPath = item.Path;
                        AlertHelper.ShowLocalizedAlertWithOkOption("The item created successfully", "Item path: " + item.Path);
                    }
                    else
                    {
                        AlertHelper.ShowLocalizedAlertWithOkOption("Message", "Item is not exist");
                    }
                }
            }
            catch (Exception e)
            {
                AlertHelper.ShowLocalizedAlertWithOkOption("Error", e.Message);
            }
            finally
            {
                BeginInvokeOnMainThread(delegate
                {
                    this.HideLoader();
                });
            }
        }
        public async void TestCreateItemByPathAndGetInvalidEmptyAndNullFields()
        {
            await this.RemoveAll();

            var          expectedItem = this.CreateTestItem("Create and get invalid field");
            const string FieldName    = "@*<<invalid!`fieldname=)";
            var          request      = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                                        .ItemTemplatePath(testData.Items.Home.Template)
                                        .ItemName(expectedItem.DisplayName)
                                        .Database("master")
                                        .AddFieldsToRead(FieldName, null, "")
                                        .Build();

            var createResponse = await session.CreateItemAsync(request);

            var resultItem = this.CheckCreatedItem(createResponse, expectedItem);

            Assert.AreEqual(0, resultItem.FieldsCount);

            this.GetAndCheckItem(expectedItem, resultItem);
        }
        public void TestCreateItemByPathWithAnonymousUserReturnsException()
        {
            var anonymousSession = SitecoreWebApiSessionBuilder.AnonymousSessionWithHost(testData.InstanceUrl)
                                   .Site(testData.ShellSite)
                                   .BuildSession();
            var request = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                          .ItemTemplatePath(testData.Items.Home.Template)
                          .ItemName("item created with anonymous user")
                          .Database("master")
                          .Build();

            TestDelegate testCode = async() =>
            {
                var   task = anonymousSession.CreateItemAsync(request);
                await task;
            };
            var 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.AreEqual("Access to site is not granted.", exception.InnerException.Message);
        }
        public void TestCreateItemByIdWithUserWithoutCreateAccessReturnsException()
        {
            var anonymousSession = SitecoreWebApiSessionBuilder.AuthenticatedSessionWithHost(testData.InstanceUrl)
                                   .Credentials(testData.Users.NoCreateAccess)
                                   .Site(testData.ShellSite)
                                   .BuildSession();
            var request = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                          .ItemTemplatePath(testData.Items.Home.Template)
                          .ItemName("item created with nocreate user")
                          .Database("master")
                          .Build();

            TestDelegate testCode = async() =>
            {
                var   task = anonymousSession.CreateItemAsync(request);
                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("AddFromTemplate - Add access required"));
        }
        public async void TestCreateItemByPathAndSetFieldWithSpacesInName()
        {
            await this.RemoveAll();

            var          expectedItem = this.CreateTestItem("Set standard field value");
            const string FieldName    = "__Standard values";
            const string FieldValue   = "Created standard value 000!! ))";
            var          request      = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                                        .ItemTemplatePath(testData.Items.Home.Template)
                                        .ItemName(expectedItem.DisplayName)
                                        .Database("master")
                                        .AddFieldsToRead(FieldName)
                                        .AddFieldsRawValuesByNameToSet(FieldName, FieldValue)
                                        .Build();

            var createResponse = await session.CreateItemAsync(request);

            var resultItem = this.CheckCreatedItem(createResponse, expectedItem);

            Assert.AreEqual(FieldValue, resultItem[FieldName].RawValue);

            this.GetAndCheckItem(expectedItem, resultItem);
        }
        public async void TestCreateItemByIdAndSetHtmlFieldValue()
        {
            await this.RemoveAll();

            var          expectedItem = this.CreateTestItem("Set HTML in field");
            const string FieldName    = "Text";
            const string FieldValue   = "<div>Welcome to Sitecore!</div><div><br /><a href=\"~/link.aspx?_id=A2EE64D5BD7A4567A27E708440CAA9CD&amp;_z=z\">Accelerometer</a></div>";

            var request = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(this.testData.Items.CreateItemsHere.Path)
                          .ItemTemplatePath(testData.Items.Home.Template)
                          .ItemName(expectedItem.DisplayName)
                          .Database("master")
                          .AddFieldsToRead(FieldName)
                          .AddFieldsRawValuesByNameToSet(FieldName, FieldValue)
                          .Build();

            var createResponse = await session.CreateItemAsync(request);

            var resultItem = this.CheckCreatedItem(createResponse, expectedItem);

            Assert.AreEqual(FieldValue, resultItem[FieldName].RawValue);

            this.GetAndCheckItem(expectedItem, resultItem);
        }
        protected override async void PerformCreateRequest()
        {
            var parentPath      = this.ItemField.Text;
            var itemName        = this.ItemNameField.Text;
            var titleFieldValue = this.ItemTitleFieldValue.Text;
            var textFieldValue  = this.ItemTextFieldValue.Text;

            if (string.IsNullOrWhiteSpace(parentPath))
            {
                Toast.MakeText(this, "Parent Item ID should not be empty", ToastLength.Short).Show();
                return;
            }

            if (string.IsNullOrWhiteSpace(itemName))
            {
                Toast.MakeText(this, "Item name should not be empty", ToastLength.Short).Show();
                return;
            }

            try
            {
                var builder = ItemWebApiRequestBuilder.CreateItemRequestWithParentPath(parentPath)
                              .ItemTemplatePath("Sample/Sample Item")
                              .ItemName(itemName);

                if (!string.IsNullOrEmpty(titleFieldValue))
                {
                    builder.AddFieldsRawValuesByNameToSet("Title", titleFieldValue);
                }

                if (!string.IsNullOrEmpty(textFieldValue))
                {
                    builder.AddFieldsRawValuesByNameToSet("Text", textFieldValue);
                }

                this.SetProgressBarIndeterminateVisibility(true);

                using (var session = this.Prefs.Session)
                {
                    var response = await session.CreateItemAsync(builder.Build());

                    this.SetProgressBarIndeterminateVisibility(false);
                    if (response.ResultCount == 0)
                    {
                        DialogHelper.ShowSimpleDialog(this, "Failed", "Failed to create item");
                    }
                    else
                    {
                        this.createItemId = response[0].Id;

                        var message = "Item path : " + response[0].Path;
                        DialogHelper.ShowSimpleDialog(this, "Item created", message);
                    }
                }
            }
            catch (System.Exception exception)
            {
                this.SetProgressBarIndeterminateVisibility(false);

                var title = this.GetString(Resource.String.text_error);
                DialogHelper.ShowSimpleDialog(this, title, exception.Message);
            }
        }
 public void TestNullBranchIdCausesNullPointerException()
 {
     Assert.Throws <ArgumentNullException>(() => ItemWebApiRequestBuilder.CreateItemRequestWithParentPath("/some/valid/path")
                                           .BranchId(null));
 }
 public void TestBracesOnlyBranchIdCausesArgumentException()
 {
     Assert.Throws <ArgumentException>(() => ItemWebApiRequestBuilder.CreateItemRequestWithParentPath("/some/valid/path")
                                       .BranchId("{}"));
 }